Performance compared with git
Command durations and storage sizes of kit and git. The page lists the machine, the versions and the kit commit.
Large files
Large files of random bytes and small edits to them. kit splits a large file into chunks and stores each chunk once.
Command duration
Mean wall-clock time of one command, including process start. Lower is better.
Commit a 1 MiB change to the 100 MiB file
kit 21.3× fasterAppend 1 MiB to the committed 100 MiB file, then add and commit the new version.
Mean ± standard deviation: kit 112ms ± 8.1ms, git 2.38s ± 3.0ms. 10 runs of each command.
kit reads and hashes the whole file but stores only the chunks that changed. git compresses the file and stores the full 101 MiB blob again.
Add and commit one 1 GiB file
kit 7.4× fasterAdd and commit a 1 GiB file of random bytes.
Mean ± standard deviation: kit 3.73s ± 24.6ms, git 27.5s ± 44.7ms. 3 runs of each command, because git is slow here.
The time of both tools grows with the size of the file.
Add and commit one 100 MiB file
kit 7.0× fasterThe file holds random bytes, which stand in for video or other compressed media.
Mean ± standard deviation: kit 339ms ± 5.3ms, git 2.37s ± 12.8ms. 10 runs of each command.
In a repeat run, one slow run raised the mean of kit to 382 ms with a standard deviation of 111 ms. Four other runs gave 334 ms to 341 ms. git gave 2.36 s to 2.37 s in every run.
Check out a branch that changed a 100 MiB file
no clear winnerBranch main holds a committed 100 MiB file. Branch v2 appends 1 MiB to it. The command switches from main to v2.
Mean ± standard deviation: kit 311ms ± 3.5ms, git 338ms ± 0.6ms. 10 runs of each command.
The means differ by 8%, which is under the 15% limit of this page, so the row names no winner. kit was the faster tool by 8% to 9% in each of the five runs of the suite.
Storage size
Size of .kit and .git from du -k after the same commits. Lower is better.
One 100 MiB file, one commit
about evenSize of the repository after the first commit of the 100 MiB file.
git uses 3% less space. The random bytes do not compress, so git stores one loose blob of about the file size. kit stores the file as chunk objects and a manifest. The extra 3.4 MiB is the cost of that layout.
Growth after a 1 MiB change
kit 91.4× smallerExtra bytes in the repository after the 1 MiB append is committed as a second version.
kit stores the appended data, the chunks that changed and a new manifest. Loose git stores the full 101 MiB blob again. After git gc, git grows by 1028 KiB, which is 9% less than kit.
Everyday operations
Small files and unchanged repositories. kit signs every commit and flushes object writes to disk. In these runs git uses its defaults: unsigned commits and no flush for loose objects.
Command duration
Mean wall-clock time of one command, including process start. Lower is better.
Add and commit 100 small files
git 1.6× fasterAdd and commit 100 files of 10 KiB each, all in one commit.
Mean ± standard deviation: kit 47.1ms ± 6.3ms, git 29.4ms ± 0.5ms. 53 runs of kit and 72 runs of git.
git is faster here. kit signs the commit and flushes the object writes to disk before the command returns. git does neither by default. The five runs of the suite gave 46 ms to 47 ms for kit and 29 ms to 30 ms for git.
Add an unchanged 100 MiB file again
kit 2.6× fasterRun touch on the committed file. This changes the modification time but not the content. Then add the file.
Mean ± standard deviation: kit 96.2ms ± 8.0ms, git 251ms ± 0.2ms. 10 runs of each command.
The new modification time makes both tools read and hash the whole file again. kit hashes with BLAKE3 and git hashes with SHA-1.
Create an empty repository
too fast to compareRun init in an empty directory.
Mean ± standard deviation: kit 3.6ms ± 0.7ms, git 1.9ms ± 0.3ms. 562 runs of kit and 741 runs of git.
Both commands finish in under 5 ms, so the timer cannot rank them with confidence. The mean of git was lower than the mean of kit in all five runs of the suite, by about 1.5 ms.
Show the status with an unchanged 100 MiB file
too fast to compareRun status in a clean repository that holds the committed 100 MiB file, after a first status call.
Mean ± standard deviation: kit 1.3ms ± 0.0ms, git 1.1ms ± 0.0ms. 10 runs of each command.
Both commands finish in under 5 ms, so the timer cannot rank them with confidence. The mean of git was lower than the mean of kit in all five runs of the suite, by about 0.2 ms to 0.3 ms.
Storage size
Size of .kit and .git from du -k after the same commits. Lower is better.
100 small files, one commit
about evenSize of the repository after one commit of 100 files of 10 KiB each (1000 KiB of content).
Both repositories hold the content plus the overhead of each object.
Method and limits
- Date
- Oct 28, 2026
- Commit
8cdb37e4e3eb(clean checkout)- Machine
- A 32-core Arm cloud virtual machine with 125 GiB of RAM, running Linux.
- Versions
- kit 0.5.0 (release build) · git 2.43.0 · hyperfine 2.0.0 · rustc 1.99.1
- Harness
- scripts/bench-vs-git.sh runs hyperfine with a warm-up run (none for the 1 GiB row) and a prepare command that resets a temporary directory before each run. Most rows use 10 runs. The 1 GiB row uses 3 runs. hyperfine uses more runs for fast commands. The page shows the mean and the standard deviation from the JSON export. The script measures sizes with du -k.
- Workload
- Random bytes, which do not compress. They stand in for media files. Source code can compress well in the git object store. These runs do not measure it.
- Signing: kit signs every commit with Ed25519. git does not sign commits by default. The two commands do different work.
- Durability: kit makes the object writes of a command durable before it returns, with a batched flush. git does not flush loose objects by default.
- One machine: the numbers come from one virtual machine and one file system. Other hardware, file systems and git versions give other ratios.
- Repeats: the suite ran five times on a machine with no other user processes. The means agree within about 10% on every row. The exception is the 100 MiB add row, where one slow run in one repeat raised the mean of kit. The page shows the first of the last two runs.
- Verdicts: a row names a winner only when the means differ by at least 15% and the ranges (mean plus or minus one standard deviation) do not overlap. A row where both commands finish in under 5 ms names no winner.
- Defaults: both tools ran as command-line processes with their default settings. The run includes process start.
Commands to reproduce
cd rust cargo build --release --locked -p kit-bin --bin kit cd .. scripts/bench-vs-git.sh rust/target/release/kit bench-results