The Record. No Adjectives.

Four version control systems. Three decades of evolution. One table.

CVS (1990) · Git (2005) · Mercurial (2005) · Graf (2026)
Feature CVS Git Mercurial Graf
Storage model RCS deltas per file Snapshot DAG, packfiles Revlog delta chains Merkle DAG, BLAKE3 CIDs, CBOR
Content addressing None (sequential revnums) SHA-1 (SHA-256 transition) SHA-1 nodeid BLAKE3, prefix-sharded CAS
Branching Directory copies Lightweight refs Named branches / bookmarks Named refs + per-agent branches
Merge strategy Manual Recursive 3-way + rename detect 3-way with bdiff LCA via alternating BFS + 3-way tree+line merge
Timestamps Wall clock Wall clock + timezone Wall clock + timezone Three-clock: wall + Lamport + sequence (CRDT-safe)
Wire protocol pserver / SSH git:// / SSH / HTTP smart SSH / HTTP GTP v1.1 – unified VCS + package distribution
Package distribution None None (npm/pip/cargo separate) None Native: Hinge + Nip packages over same protocol
Identity / auth Unix user Author string, GPG optional Author string Ed25519 SoulKeyID + challenge-response. Zero PII.
Agent awareness None None None Native: per-agent branches, nursery supervision, policy hooks
Concurrency Single-threaded, lock files Single-threaded + index.lock Single-threaded M:N fiber scheduler, nursery-structured concurrency
Codebase ~80K lines C ~400K lines C ~200K lines Python/C ~34K lines Janus + Zig
Crypto None SHA-1 (migrating SHA-256) SHA-1 BLAKE3 trust root + Ed25519 signatures. SHA-1 only on the Git bridge.

CVS counted files. Git counted snapshots. Graf counts meaning. And it does it in ~34,000 lines – including native push to its own forge – because it doesn't carry 30 years of accidental complexity.