πŸ”’ TouchQuill is in closed testing.Want to try it? Get in touch β†’
Benchmarks

How we measured

Each number is the real time you wait for your change to reach the server, or for a teammate's change to reach you. Same operation, same files, in TouchQuill, Git, Git LFS and Perforce, tested over connections from a fast office network down to slow mobile. Median of a few runs. You can download the benchmarks and reproduce these numbers yourself.

Real end-to-end, over the network

The time you actually wait

Every bar is the whole time a person waits: the change makes the full trip to the server and back. Systems are ordered fastest first, so the order changes from chart to chart. We win on the everyday work, sending and receiving changes; the first full download is where we still have ground to make up.

Send a change to one big file fastest
A single 60 MB binary. You change about 1 MB inside it and push. The bar is the whole wait: writing the commit locally, then the upload. Office link, 100 Mbit.
β˜… TouchQuill
597 ms
Git
2.25 s
Perforce
5.22 s
Git LFS
5.53 s
Pull a teammate's change (same file) fastest
Someone else changed ~1 MB in that 60 MB file. You pull their change down. The bar is the full time to receive it. Office link, 100 Mbit.
β˜… TouchQuill
609 ms
Git
1.59 s
Perforce
5.18 s
Git LFS
5.46 s
Send changes across a binary-heavy repo fastest
A repository of many binaries (2 to 100 MB each). You touch about 10% of the content and push. The bar is commit plus upload, end to end. Office link, 100 Mbit.
β˜… TouchQuill
1.81 s
Git
2.77 s
Perforce
5.66 s
Git LFS
6.09 s
Send a change in an asset repo fastest
200 assets of 2 MB each (400 MB total). You change part of them and push. The bar is the whole save and upload. Fast LAN, 1 Gbit.
β˜… TouchQuill
252 ms
Git LFS
493 ms
Git
560 ms
Perforce
1.98 s
First download of a big-binary repo 3. of 4
A fresh clone of a repository built from large binary files: download plus writing every file to disk. Here we still trail Perforce and Git LFS, though we stay ahead of plain Git. Fast LAN, 1 Gbit.
Perforce
655 ms
Git LFS
897 ms
β˜… TouchQuill
923 ms
Git
1.80 s
First download of an asset repo 3. of 4
A fresh clone of an asset-heavy repository, reconstructing all files locally. Same story: the first full download is where we have the most to gain. Home fibre, 300 Mbit.
Perforce
5.27 s
Git LFS
6.68 s
β˜… TouchQuill
8.58 s
Git
42.1 s
Publish a whole project for the first time 2nd of 4
A fresh repository: the whole project (a mix of game assets, ~170 MB) committed and pushed to an empty server. The bar is commit plus upload, start to finish. Fast LAN, 1 Gbit.
Git LFS
2.07 s
β˜… TouchQuill
2.46 s
Perforce
2.76 s
Git
7.54 s
fsmonitor

It only checks what changed

A daemon listens for file changes at the OS level (inotify / FSEvents / ReadDirectoryChangesW), so status and commit skip walking the whole tree. Cross-platform: verified on Linux and Windows.

Operationwithout fsmonitorwith fsmonitor
incremental commit, 5,000 shallow files60 ms40 ms
status, 5,000 files28 ms21 ms
commit, deep tree19 ms15 ms
Transfer & network

What goes over the wire, and what stays

The server and client don't ship raw bytes. Three mechanisms, compression, delta transfer and an office-side cache, mean a fraction of what the disk sees crosses the wire. All measured against a running server over LAN (TLS on).

ScenarioOn disk / in repoOver the wire
Push a code corpus (zstd compression)78 MB15 MB (5.2:1)
Re-commit a 200 MB file after a 1 MB change (chunking)200 MB~3 MB

Compression. zstd shrinks code and text files by about five times, so pushing 78 MB of code over the LAN takes 1.4 s. Files that are already compressed, textures, audio, video, gain nothing from it, so they go whole, with no time wasted trying to squeeze them.

Sending only what changed. When you tweak a small part of a large binary file, say one texture or a model weighing a few hundred megabytes, TouchQuill doesn't re-send the whole file. It splits the file into chunks, and only the ones that actually changed travel over the wire (and land on disk). Measured: changing 1 MB inside a 200 MB file is about 3 MB of transfer, not 200 MB.

Parallel downloads. Large downloads run over eight streams at once to use the full bandwidth. The first pull of a whole repository, 2.1 GB of Unreal assets, takes about 19 s over 1 GbE.

Edge Proxy for the office. A remote team behind one link runs a LAN proxy that caches objects from HQ. The first person pulls a large asset from the server; everyone else gets it from the proxy over the local network. Content-addressing means the cache is never stale: if the hash matches, the file is correct.
Takeaways

An honest scorecard

βœ“ Large binaries

Sending a change to a large binary is almost 4Γ— faster than Git and 9Γ— faster than Git LFS (60 MB file, over the network). This is the scenario the system was built for.

βœ“ Asset repositories

Sending a change in an asset repo lands faster than in Git and Perforce (400 MB repo, over the network).

βœ“ Integrity

A BLAKE3 hash on every object means any data corruption is detectable. Perforce offers no such guarantee.

β‰ˆ Small text files

On thousands of tiny text files Git is still faster: its binary index has had twenty years to mature. We accept that: it's the profile of a typical software project, not a game.