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

How we measured

Each measurement runs the same operation on the same data in all three systems, median of five runs (large binaries: three). Everything is local, so we're not measuring the network: TouchQuill without a server, Git as a local repo, Perforce against a live p4d Helix Core 2026.1 with a workspace. Hardware: AMD Strix Halo, NVMe drive, Linux 6.18. The measurement script is in the repo, so you can reproduce these numbers yourself.

Comparison

TouchQuill vs Git vs Perforce

Bars show proportions within each row; the numbers are milliseconds.

TouchQuill Git Perforce

On the 200 MB binary Git's bar runs off the row's scale β€” zlib compression and delta attempts choke Git on binary content, while TouchQuill's CAS merely hashes the stream (BLAKE3 β‰ˆ 900 MB/s). Perforce doesn't hash content at all (revision numbers), which is why it can be faster on a single file β€” at the cost of the integrity guarantees content-addressing provides.

The target workload

Incremental commit in an asset repository

200 assets of 2 MB each (400 MB total), one file changed β€” the most ordinary thing an artist does all day. In this scenario TouchQuill beats both incumbents.

OperationTouchQuillGitPerforce
status after changing 1 file4 ms7 msβ€”
incremental commit8 ms43 ms42 ms

The trick: a worktree index with an mtime cache (unchanged content is never re-hashed) plus a hierarchical tree (unchanged subdirectories share their hash) make the work scale with the number of changes rather than the size of the repo.

Scaling

O(changes), not O(tree)

Committing a single change in a growing tree. With the index, the hierarchy and fsmonitor, TouchQuill keeps a flat profile where it matters.

Tree sizeTouchQuillGitPerforce
statuscommitstatuscommitstatuscommit
1,000 files8 ms~10 ms4 ms9 ms59 ms11 ms
5,000 files21 ms*34 ms*6 ms14 ms152 ms9 ms
400 MB of assets (200 files)4 ms8 ms7 ms43 ms456 ms42 ms

* with fsmonitor. "commit" means an incremental commit (one change). On thousands of small text files Git is still fastest β€” its binary index has had twenty years to mature; that's the profile of a typical software project, not a game. Perforce has a cheap submit (it doesn't hash content), but its status is a full reconcile against the server β€” nearly half a second on an asset repo.

fsmonitor

Worktree scanning in O(changes)

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
The landscape

How it stacks up against the rest

Performance is one thing, but choosing a VCS for a game is mostly a decision about your working model. Here's a feature comparison against eight systems used in game dev β€” from Git to Epic's freshly open-sourced Lore. Data based on each vendor's public materials (July 2026).

Feature TouchQuillGitPerforceSVNUnity VCSArkDiversionLore
Model Local + serverDistributedCentralizedCentralizedHybridServer + clientCloud (SaaS)Central + offline
Large binaries natively (no LFS) βœ“βœ—βœ“~βœ“βœ“βœ“βœ“
File locks with a queue βœ“βœ—~~βœ“βœ“~β€”
Conflict as data (never blocks) βœ“βœ—βœ—βœ—βœ—βœ—βœ—βœ—
Content-addressed (hashing) βœ“βœ“βœ—βœ—βœ—β€”β€”~
Symbol history / Lens βœ“βœ—βœ—βœ—βœ—βœ—βœ—βœ—
Offline work (commit / branch) βœ“βœ“~βœ—βœ“βœ“~βœ“
Self-host / on-premise βœ“βœ“βœ“βœ“βœ“βœ“βœ—βœ“
Open source ~βœ“βœ—βœ“βœ—βœ—βœ—βœ“
Pricing TBDFreeCommercial (per‑seat)FreeFreemiumFreemium (free for indies)SaaS (subscription)Free (MIT)
βœ“ full support~ partial or with caveatsβœ— noneβ€” no data

We're not pretending to win everywhere. Lore (Epic) and Ark are strong, recent players with a similar philosophy β€” Lore is even MIT-licensed open source, and Ark ships the exact same queue-based locking we do. The two things you won't find anywhere else are a conflict kept as data (integration never stalls) and Lens β€” symbol history that survives file renames and refactors. Perforce and Diversion win on maturity and ecosystem; we're betting on the working model.

Takeaways

An honest scorecard

βœ“ Large binaries

Committing 50–200 MB files is over ten times faster than in Git. This is the scenario the system was built for.

βœ“ Asset repositories

The everyday commit in an asset repo: 8 ms, against 43 ms in Git and 42 ms in Perforce.

βœ“ 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.

Reproduce it: scripts/bench-vs.sh in the repository (spins up its own p4d, security=0). Raw results in bench-results.csv.