ran-j/PS2RecompPublic

Playstation 2 Static Recompiler & Runtime Tool to make native PC ports

AI summary: An experimental static recompiler that translates PlayStation 2 games into C++.

Stars
3.1K
Forks
114
Watchers
94
Open issues
22
Open PRs
25
Contributors
~17
Commits
156
Branches
3

C++GPL-3.0Created Apr 12, 2025Last push 1d ago+17 stars this week+17 this month

Star history

since Apr 6, 2025
01K2K3KApr 2025Sep 2025Feb 2026Aug 2026
3.1K stars as of Aug 6, 2026, tracked back to Apr 6, 2025. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 20 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 1 commit2025-12-27: 2 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 1 commit2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 1 commit2026-01-27: 6 commits2026-01-28: 6 commits2026-01-29: 0 commits2026-01-30: 1 commit2026-01-31: 4 commits2026-02-01: 1 commit2026-02-02: 2 commits2026-02-03: 1 commit2026-02-04: 0 commits2026-02-05: 1 commit2026-02-06: 3 commits2026-02-07: 1 commit2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 1 commit2026-02-14: 1 commit2026-02-15: 0 commits2026-02-16: 1 commit2026-02-17: 5 commits2026-02-18: 4 commits2026-02-19: 1 commit2026-02-20: 1 commit2026-02-21: 1 commit2026-02-22: 2 commits2026-02-23: 0 commits2026-02-24: 3 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 1 commit2026-02-28: 0 commits2026-03-01: 2 commits2026-03-02: 0 commits2026-03-03: 2 commits2026-03-04: 0 commits2026-03-05: 1 commit2026-03-06: 1 commit2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 1 commit2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 1 commit2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 1 commit2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 1 commit2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 2 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 1 commit2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 2 commits2026-06-21: 0 commits2026-06-22: 1 commit2026-06-23: 0 commits2026-06-24: 1 commit2026-06-25: 0 commits2026-06-26: 1 commit2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 2 commits2026-07-04: 1 commit2026-07-05: 0 commits2026-07-06: 1 commit2026-07-07: 2 commits2026-07-08: 1 commit2026-07-09: 0 commits2026-07-10: 3 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 1 commit2026-07-14: 0 commits2026-07-15: 1 commit2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 1 commit2026-07-22: 1 commit2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 1 commit2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
105 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Actively maintained

    Pushed within 48 hours

  • Continuous integration

    Automated checks passing

What PS2Recomp does

PS2Recomp is a static recompilation tool designed to translate PlayStation 2 ELF binaries directly into executable C++ code. It scans the original MIPS R5900 instructions, analyzes function boundaries, and generates equivalent C++ operations. The project includes a custom runtime environment to handle memory management, syscall dispatch, and hardware stubs. This allows classic PS2 games to be ported and run natively on modern operating systems without traditional emulation.

Reverse engineers and emulator developers interested in static recompilation and porting PlayStation 2 software. Requires C++ development tools and PS2 ELF binaries.

  • Static Recompilation: Translates MIPS assembly directly to C++, mapping each instruction to an operation.
  • Custom Runtime: Hosts memory and dispatches syscalls required by the translated code.
  • Configuration System: Uses TOML files to define instruction patches, skips, and function stubs.
  • Specialized Instructions: Supports PS2-specific MMI and VU0 macro instructions.
  • IOP Emulation: Includes portable HLE services to handle the PS2 Input/Output Processor.

Where teams use it

Game Porting

Recompile classic PS2 titles into native PC executables for modding and preservation.

Reverse Engineering

Translate opaque PS2 binaries into readable C++ for easier analysis of game logic.

Performance Enhancement

Run games natively to achieve higher framerates than traditional emulators.

Engine Reconstruction

Use the generated C++ as a base to manually rewrite rendering backends for modern APIs.

Getting started: See the GitHub Wiki for detailed build instructions and configuration examples.

README

main branch

PS2Recomp: PlayStation 2 Static Recompiler (Experimental)

Discord

Also check our WIKI

This project statically recompiles PS2 ELF binaries into C++ and provides a runtime to execute the generated code.

Modules

  • ps2xAnalyzer: scans ELF/functions and writes TOML config (stubs, skip, instruction patches).
  • ps2xRecomp: reads TOML + ELF, decodes R5900 instructions, and generates C++ output.
  • ps2xRuntime: hosts memory, function registration, syscall dispatch, and hardware stubs.
  • ps2xIOP: portable, instance-owned IOP HLE services, game profiles, and the C plugin ABI.

Features

  • Translates MIPS R5900 instructions to C++ code
  • PS2-specific MMI and VU0 macro support.
  • Single-file or multi-file output.
  • Configurable stubs, skips, and instruction patches.
  • Instruction-driven syscall handling.

How It Works

PS2Recomp works by:

  • Parsing a PS2 ELF file to extract functions, symbols, and relocations
  • Decoding the MIPS R5900 instructions in each function
  • Translating those instructions to equivalent C++ code
  • Generating a runtime that can execute the recompiled code

The translated code is very literal, with each MIPS instruction mapping to a C++ operation. For example, addiu $r4, $r4, 0x20 becomes ctx->r4 = ADD32(ctx->r4, 0X20);.

Current Behavior

  • stubs entries generate wrappers that call known runtime syscall/stub handlers by name.
  • stubs also supports address bindings with handler@0xADDRESS for stripped games (for example sceCdRead@0x00123456).
  • Address bindings also support generic return handlers for triage: ret0, ret1, reta0.
  • Recompiler now tries relocation-symbol auto-binding at callsites (J/JAL) before raw address dispatch; when relocation symbol is known (for example sceCdRead), it can call runtime handlers without manual address mapping.
  • Recompiler discovers additional internal static entry targets and emits entry_... wrappers for those addresses.
  • For unresolved static J/JAL sites, generated code falls back to runtime->lookupFunction(0x...).
  • skip entries are not recompiled and generate explicit ps2_stubs::TODO_NAMED(...) wrappers.
  • Recompiled SYSCALL now calls runtime->handleSyscall(...) with the encoded syscall immediate.
  • Runtime syscall dispatch tries encoded syscall ID first, then falls back to $v1.

Requirements

  • CMake 3.20+
  • C++20 compiler (currently tested mainly with MSVC)
  • SSE4/AVX host support for some vector paths

Build

git clone --recurse-submodules https://github.com/ran-j/PS2Recomp.git
cd PS2Recomp

cmake -S . -B out/build
cmake --build out/build --config Debug

Usage

Preferred workflow for retail or stripped games:

  1. Open the ELF in Ghidra.
  2. Run ps2xRecomp/tools/ghidra/ExportPS2Functions.java.
  3. Use the exported TOML and CSV map.
  4. Recompile with the exported TOML:
./ps2_recomp config.toml

Fallback workflow for quick local experiments or ELFs with debug symbol :

./ps2_analyzer your_game.elf config.toml

Use this only when you do not have a Ghidra project yet. The native analyzer is faster to start, but it is less accurate on stripped retail games and more likely to miss internal callable entry points.

See the Ghidra Workflow for the recommended path.

Then build generated output and link with ps2xRuntime.

Configuration

Main fields in config.toml:

  • general.input: source ELF path.
  • general.ghidra_output: recommended function map CSV exported from Ghidra.
  • general.output: generated C++ output folder.
  • general.single_file_output: one combined cpp or one file per function.
  • general.low_memory_mode: reduce peak output-generation memory by avoiding retained disassembly strings and forcing serial output generation. Generated instruction comments are still emitted; disassembly text is produced while writing each output file instead of being kept in memory.
  • general.output_worker_threads: number of output-generation workers (clamped to nproc * 2). A positive value uses exactly that many workers. 0 uses nproc - 1 when at least two hardware threads are available, otherwise serial output generation. 1 forces serial output generation.
  • general.patch_syscalls: apply configured patches to SYSCALL instructions (false recommended).
  • general.patch_cop0: apply configured patches to COP0 instructions.
  • general.patch_cache: apply configured patches to CACHE instructions.
  • general.stubs: names to force as stubs. Also accepts handler@0xADDRESS to bind a stripped function address directly to a runtime syscall/stub handler. Includes generic handlers ret0, ret1, reta0.
  • general.skip: names to force as skipped wrappers.
  • patches.instructions: raw instruction replacements by address.

Address binding for stripped ELFs:

  • Use handler@0xADDRESS inside general.stubs to map a stripped function start directly to a runtime handler.
  • Example: sceCdRead@0x00123456 binds function start 0x00123456 to ps2_stubs::sceCdRead(...).
  • Generic temporary handlers are available: ret0@0xADDR, ret1@0xADDR, reta0@0xADDR.
  • Before manual binding, prefer recompilation from a Ghidra-exported TOML/CSV first. The extra boundaries and synthetic entry points are usually more important than manual early triage.
  • The address must be the function start in that exact ELF build.
  • Addresses are not portable across different games/regions/builds.
  • The handler name must exist in runtime call lists (PS2_SYSCALL_LIST or PS2_STUB_LIST).

Example:

# stripped function binding by address:
stubs = ["sceCdRead@0x00123456", "SifLoadModule@0x00127890"]
# temporary return handlers:
stubs = ["ret0@0x001D9410", "ret1@0x001D5BC8", "reta0@0x0024B7C0"]
# mixed example:
stubs = ["printf", "sceCdRead@0x00123456", "SifLoadModule@0x00127890"] 

Runtime

To execute the recompiled code.

ps2xRuntime currently provides:

  • Guest memory model and function dispatch table.
  • Some syscall dispatcher with common kernel IDs.
  • Basic GS/VU/file/system stubs.
  • Foundation to expand and port your game.
  • ps2xIOP profile selection and optional .dll/.so discovery for game-specific IOP HLE.

See IOP HLE profiles and plugins for the service boundary and external plugin workflow.

Game Override Hooks

Game overrides are runtime-side, build-scoped patch modules.

A game override is C++ code that runs during loadELF and can replace EE function bindings by address for one specific game build. IOP RPC/DMA behavior belongs in a ps2xIOP profile instead. This is separate from recompilation output and separate from global runtime stubs/syscalls.

API:

  • Header: ps2xRuntime/include/game_overrides.h
  • Register macro: PS2_REGISTER_GAME_OVERRIDE(name, elfName, entry, crc32, applyFn)
  • Direct bind helper: ps2_game_overrides::bindAddressHandler(runtime, addr, "handler")

Use Game Override modules when:

  • You need per-game/per-build routing or patches without polluting global behavior.
  • You need to bind many addresses, or install custom replacement logic for a specific title.

Recommended Iteration Loop

  1. Run with minimal config and no aggressive skipping.
  2. Fix hard blockers first (function not found, syscall TODO, critical IO stubs).
  3. Use temporary return stubs only to classify call importance.
  4. Promote temporary fixes to real implementations.
  5. Move per-game hacks into game overrides keyed by ELF metadata.
  6. Re-test from cold boot after each batch.

Limitations

  • Graphics Synthesizer and other hardware components need external implementation
  • VU1 microcode is not complete.
  • Hardware emulation is partial and many paths are stubbed.

Acknowledgments

  • Inspired by N64Recomp
  • Uses ELFIO for ELF parsing
  • Uses toml11 for TOML parsing
  • Uses fmt for string formatting
View on GitHub

Recent activity

commits and pull requests

Releases and announcements

5 total
  1. v0.4v0.4Apr 5, 2026pre-release

    ## What's Changed * sceGsSetDefDBuff and sceGsSwapDBuff implementation based on the DC version by @roby65 in https://github.com/ran-j/PS2Recomp/pull/106 * feat: remove memory and pad from stub section * feat: add support for resume entry targets in CodeGenerator (this allow jumps in address outside function) feat: refactor entry point discovery one more try to reduce big generated file * feat: optmizations for release build * feat: remove unused file * feat: added some test cases for code gen * feat: added log macro and remove win specific code * feat: refactor runtime folder structure feat: added reset sound driver RPC state and compatibility layout feat: rename and added new test feat: update RPC calls to use defined constants feat: added more PSMC(16, 32) feat: change cd read to try find the asset ignoring case sensitive fix: fix some render problems feat: add logs on pad feat: added more RPC handles * feat: added game override for code veronica * feat: apply vita patch * feat: flags to disable build * feat: fix merges feat: break a lot of tests * feat: better throw error on empty cd path feat: remove recompiler unusde function fea

  2. v0.3v0.3Mar 18, 2026pre-release

    ## What's Changed * fix: CRITICAL fix on code gen on generating BEQ translation, I added a small yeld because goto could spin forever and monopolize guest execution * feat: add scratchpad alias base and improve scratchpad address handling * feat: added debug logging on GifArbiter for submit and drain operations * feat: add interrupt and thread management syscall implementations fix: change some IDs calls to match ps2sdk * feat: added vif1 logs * feat: added logs on gs gpu feat: added performLocalToLocalTransfer to GS emulation path for TRXDIR = 2. (emulates the PS2 GS “copy this rectangle from one place in VRAM to another”) * feat: added PSMT8 and refactor PSMT4 * feat: some identation on vu1 feat: added some logs on vu1 * feat: added GuestExecutionScope to temporarily stop owning guest execution, then restore it exactly as it was. feat: added vsync wizardry feat: added some regression test * fix: fix gs logger * feat: remove extra logs I think they will help no one feat: move join all threads to prevent the app to get stuck on close, but now it random crash on closing feat: one more small test on psmt4 to try fix ghosting on re code veronica

  3. v0.2v0.2Mar 9, 2026pre-release

    ## What's Changed * Fixed recompiler error when the cpp filename is too long by @roby65 in https://github.com/ran-j/PS2Recomp/pull/88 * Integrate ps2xStudio and improve elf_analyzer callback detection by @BlackLineInteractive in https://github.com/ran-j/PS2Recomp/pull/83 * Issue 13: Minimal libpad (SIO2/PAD) stubs, input mapping and tests by @Whoneon in https://github.com/ran-j/PS2Recomp/pull/69 * Normalize Windows drive paths exported by Ghidra by @Whoneon in https://github.com/ran-j/PS2Recomp/pull/92 * Filter Ghidra auto-generated symbols using map start addresses by @Whoneon in https://github.com/ran-j/PS2Recomp/pull/95 * Implement syscall 0x83 (FindAddress) with kernel tests by @Whoneon in https://github.com/ran-j/PS2Recomp/pull/93 * Feature/ghidra export and syscall fixes by @ran-j in https://github.com/ran-j/PS2Recomp/pull/100 ## New Contributors * @roby65 made their first contribution in https://github.com/ran-j/PS2Recomp/pull/88 * @BlackLineInteractive made their first contribution in https://github.com/ran-j/PS2Recomp/pull/83 **Full Changelog**: https://github.com/ran-j/PS2Recomp/compare/v0.1...v0.2

  4. v0.1v0.1Feb 27, 2026pre-release

    ## What's Changed * Add game name to window title by @DanielSvoboda in https://github.com/ran-j/PS2Recomp/pull/74 * Add IOP, audio, pad, fio changes, VAG handling, and call-stack logger by @aslanhudajev in https://github.com/ran-j/PS2Recomp/pull/76 * Feat: GS, VIF1, VU1 pathways + font rendering stubs + mpeg stubs by @aslanhudajev in https://github.com/ran-j/PS2Recomp/pull/80 * Fix 'max' by @DanielSvoboda in https://github.com/ran-j/PS2Recomp/pull/81 * Feature/runtime review codegen fixes by @ran-j in https://github.com/ran-j/PS2Recomp/pull/87 **Full Changelog**: https://github.com/ran-j/PS2Recomp/compare/v0.0...v0.1

  5. V0v0.0Feb 22, 2026pre-release

    We have a recompiler with a lot of instructions and workflow for strip and debug symbol games. We also have a runtime with simple GS, DMA and many more.

Commits per week

last 52 weeks
200Week of 2025-08-03: 0 commitsWeek of 2025-08-10: 0 commitsWeek of 2025-08-17: 0 commitsWeek of 2025-08-24: 0 commitsWeek of 2025-08-31: 0 commitsWeek of 2025-09-07: 0 commitsWeek of 2025-09-14: 0 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 20 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 3 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 1 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 18 commitsWeek of 2026-02-01: 9 commitsWeek of 2026-02-08: 2 commitsWeek of 2026-02-15: 13 commitsWeek of 2026-02-22: 6 commitsWeek of 2026-03-01: 6 commitsWeek of 2026-03-08: 1 commitsWeek of 2026-03-15: 1 commitsWeek of 2026-03-22: 1 commitsWeek of 2026-03-29: 1 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 2 commitsWeek of 2026-06-07: 1 commitsWeek of 2026-06-14: 2 commitsWeek of 2026-06-21: 3 commitsWeek of 2026-06-28: 3 commitsWeek of 2026-07-05: 7 commitsWeek of 2026-07-12: 2 commitsWeek of 2026-07-19: 2 commitsWeek of 2026-07-26: 1 commitsAug 3, 2025Jul 26, 2026
105 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 0 commitsSun 2:00 — 1 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 1 commitsSun 10:00 — 0 commitsSun 11:00 — 0 commitsSun 12:00 — 0 commitsSun 13:00 — 0 commitsSun 14:00 — 0 commitsSun 15:00 — 0 commitsSun 16:00 — 0 commitsSun 17:00 — 0 commitsSun 18:00 — 0 commitsSun 19:00 — 0 commitsSun 20:00 — 2 commitsSun 21:00 — 0 commitsSun 22:00 — 2 commitsSun 23:00 — 0 commitsMon 0:00 — 2 commitsMon 1:00 — 4 commitsMon 2:00 — 2 commitsMon 3:00 — 1 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 1 commitsMon 9:00 — 0 commitsMon 10:00 — 1 commitsMon 11:00 — 1 commitsMon 12:00 — 0 commitsMon 13:00 — 1 commitsMon 14:00 — 0 commitsMon 15:00 — 0 commitsMon 16:00 — 0 commitsMon 17:00 — 0 commitsMon 18:00 — 0 commitsMon 19:00 — 0 commitsMon 20:00 — 0 commitsMon 21:00 — 0 commitsMon 22:00 — 3 commitsMon 23:00 — 2 commitsTue 0:00 — 1 commitsTue 1:00 — 1 commitsTue 2:00 — 2 commitsTue 3:00 — 1 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 1 commitsTue 10:00 — 2 commitsTue 11:00 — 1 commitsTue 12:00 — 0 commitsTue 13:00 — 0 commitsTue 14:00 — 3 commitsTue 15:00 — 3 commitsTue 16:00 — 2 commitsTue 17:00 — 4 commitsTue 18:00 — 3 commitsTue 19:00 — 1 commitsTue 20:00 — 2 commitsTue 21:00 — 1 commitsTue 22:00 — 0 commitsTue 23:00 — 4 commitsWed 0:00 — 0 commitsWed 1:00 — 4 commitsWed 2:00 — 1 commitsWed 3:00 — 1 commitsWed 4:00 — 1 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 0 commitsWed 11:00 — 0 commitsWed 12:00 — 0 commitsWed 13:00 — 1 commitsWed 14:00 — 0 commitsWed 15:00 — 2 commitsWed 16:00 — 1 commitsWed 17:00 — 1 commitsWed 18:00 — 0 commitsWed 19:00 — 2 commitsWed 20:00 — 0 commitsWed 21:00 — 0 commitsWed 22:00 — 2 commitsWed 23:00 — 1 commitsThu 0:00 — 0 commitsThu 1:00 — 2 commitsThu 2:00 — 5 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 0 commitsThu 11:00 — 0 commitsThu 12:00 — 1 commitsThu 13:00 — 0 commitsThu 14:00 — 1 commitsThu 15:00 — 1 commitsThu 16:00 — 2 commitsThu 17:00 — 1 commitsThu 18:00 — 3 commitsThu 19:00 — 0 commitsThu 20:00 — 0 commitsThu 21:00 — 0 commitsThu 22:00 — 0 commitsThu 23:00 — 0 commitsFri 0:00 — 1 commitsFri 1:00 — 3 commitsFri 2:00 — 3 commitsFri 3:00 — 1 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 1 commitsFri 10:00 — 0 commitsFri 11:00 — 1 commitsFri 12:00 — 0 commitsFri 13:00 — 2 commitsFri 14:00 — 1 commitsFri 15:00 — 1 commitsFri 16:00 — 1 commitsFri 17:00 — 2 commitsFri 18:00 — 1 commitsFri 19:00 — 0 commitsFri 20:00 — 0 commitsFri 21:00 — 1 commitsFri 22:00 — 0 commitsFri 23:00 — 1 commitsSat 0:00 — 6 commitsSat 1:00 — 7 commitsSat 2:00 — 3 commitsSat 3:00 — 3 commitsSat 4:00 — 0 commitsSat 5:00 — 1 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 4 commitsSat 12:00 — 2 commitsSat 13:00 — 1 commitsSat 14:00 — 2 commitsSat 15:00 — 0 commitsSat 16:00 — 4 commitsSat 17:00 — 0 commitsSat 18:00 — 1 commitsSat 19:00 — 1 commitsSat 20:00 — 0 commitsSat 21:00 — 0 commitsSat 22:00 — 0 commitsSat 23:00 — 4 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits64 (57%)
Community commits48 (43%)

112 commits in total over the last year.

DateListRankStars gained
Jan 27, 2026daily#13+189
  • ggml-org/llama.cpp

    LLM inference in C/C++

    123K stars · C++

  • ocornut/imgui

    Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

    75.6K stars · C++

  • LadybirdBrowser/ladybird

    Truly independent web browser

    64.8K stars · C++

  • grpc/grpc

    C++ based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

    45.3K stars · C++

  • microsoft/BitNet

    Official inference framework for 1-bit LLMs

    39.8K stars · C++

  • hyprwm/Hyprland

    Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.

    37.7K stars · C++