HEDDLE

Sley ⇄ Git parity

The whole scoreboard, against Git's own tests.

Sley is the native Git engine under Heddle. This is every relevant case from upstream Git's test suite, run against Sley and compared cell by cell. Skips excluded; the number only ratchets up.

85%
upstream Git parity
oracle git 2.54.0 (PCRE) rev aeda933e 844 in-scope files
24,856cells passing
4,482cells failing
273skipped
29,338assertions run
Faster, too: Sley beats Git in 29 of 30 corrected CLI timing rows, with the final add fix folded in. See the speed charts →

Speed

Wall-clock means against git 2.54.0, after warmups, tools interleaved and rotated. Shorter is faster. Git, Sley and Grit are real CLIs. Bars marked → run off the scale (real value labelled). Mean wall-clock ms, process start to exit. Source: /home/heddleco/dev/HeddleCo/06-20.01/sley-multi-impl-results-20260621-full-current. Git, Sley and Grit are real CLIs. Every included timing row validated byte-identical stdout against Git.

Typical command time by repo size: geometric mean of the ten measured human-facing commands.
GitSley01020 msinih15 ms8 mssure18 ms12 mslarge · Flutter→ 27 ms16 ms
Every command on the Flutter clone (15k files), slowest first.
GitSleyGrit050100150 msstatus --shortstatus --porcelain=v1 --branchcommit -m ...add new filerev-parse --short HEADbranch --listlog --oneline -100branch -f ... HEADtag -f ... HEADtag --list→ 199 ms145 ms→ 421 ms→ 196 ms140 ms→ 462 ms58 ms34 ms28 ms17 ms52 ms14 ms7 ms12 ms7 ms7 ms12 ms9 ms12 ms7 ms8 ms11 ms6 ms7 ms10 ms6 ms10 ms
Harness engine timings on the Flutter clone, in-process only. Mean in-process harness wall-clock ms for validated engine calls from the same run. Unsupported commands and stdout mismatches are omitted.
Sleygitoxidelibgit2Grit025 msstatus --shortlog --oneline -100branch -f ... HEADtag -f ... HEADrev-parse --short HEADbranch --listtag --list→ 142 ms→ 140 ms→ 399 ms3.3 ms19 ms0.8 ms3.7 ms4.4 ms2.0 ms0.6 ms1.7 ms3.3 ms1.5 ms0.1 ms0.5 ms0.1 ms0.2 ms0.4 ms0.3 ms0.2 ms0.3 ms0.3 ms0.2 ms

Out of scope

These t-files sit outside the headline parity number — the serving end of transport, foreign-SCM interop, and email. The pass counts below are incidental: Git's server test files are mostly shared setup (init, commit, config) that Sley runs fine, so a count like 97/81 reflects scaffolding passing, not server support.

Footprint

spec // restricted

Footprint of the binaries that produced the timings. git is the real CLI; sley/gix/libgit2 are the minimal harnesses that embed each engine; Grit is its CLI. The dependency column is the apples-to-apples number — third-party crates only, excluding each project's own crates. libgit2's tiny crate count hides an entire C library.

unitbinarylinkingdependencies
git 2.54.0C ~17 MiBgit-core: the git binary + all builtins (libexec) dynamic — 7 shared libs pcre2 · zlib · iconv · gettext (libintl) · macOS libSystem · CoreServices · CoreFoundation
SleyRust 12.5 MiBfull CLI, static; embedded in a minimal harness (only a slice of the engine linked) it drops to ~1.86 MiB / 13 deps static — no shared libs 36 external crates
gitoxide (gix)Rust 4.86 MiBstatus/log harness; static, pure-Rust zlib static — libiconv/libSystem only 77 external crates (+56 gitoxide)
libgit2C (via Rust FFI) 0.50 MiB + ~7.3 MiB dylibsthin harness over libgit2 1.9.4 (+ libssh2, llhttp, OpenSSL) dynamic — libgit2, libssh2, llhttp, OpenSSL, libz 6 Rust shim crates + the libgit2 C library
GritRust 28.5 MiBfull CLI static 116 external crates

noteHarness sizes read low for different reasons. gix's 4.86 MiB is the code its status/log harness actually links — Rust strips everything unreferenced, so a harness exercising more of gitoxide would be larger. libgit2's 0.50 MiB is small because the engine lives in the ~7.3 MiB C dylib it loads at runtime, not in the binary. So binary size tracks how much of each engine is exercised; the dependency count is the comparison that doesn't.

Parity = passing ÷ (passing + failing) per upstream test cell, skips excluded. Scope: in-scope upstream t-files, 844 of 1042. Client-side transport (fetch, clone, push, protocol) counts; the serving side, foreign-SCM interop and email are broken out under Out of scope above. Generated 2026-06-21 19:15 · aeda933e (sley main, post wave 8-12).