sovereign version control

graf

Version control + package distribution in one protocol.
BLAKE3 content-addressing. Ed25519 identity. Built in Janus.

One protocol. One identity. One manifest.
Ship code, distribute packages, prove integrity – without ever touching GitHub again.

~24.6K Lines Janus + Zig
68/68 Integration Tests
24 Commands
2026.3.1 Release (CalVer)
Get Started View Source →

First Principles. Zero Baggage.

What happens when you build a VCS from the physics up, without 30 years of accidental complexity.

Content-Addressed

BLAKE3 CIDs. The hash is the name. Every object is immutable, every reference is a proof. Physics, not policy.

Format: graf1 + hex(BLAKE3(type_byte ++ content)). 69 characters. Deterministic.

Three-Clock Causality

Wall clock + Lamport counter + local sequence. Every event has a total causal order. CRDT-safe. Merge without coordination.

Distributed-first timestamps. No clock skew ambiguity.

Cryptographic Identity

Ed25519 keypairs. Your public key is your identity. No usernames, no passwords, no OAuth, no KYC. SoulKeyID – 20 characters, zero PII, permanent. Works the same for humans and autonomous agents.

Format: grf1 + hex(BLAKE3(pubkey)[0:8]). Challenge-response auth. No secrets on the wire.

No Accidental Complexity

24,600 lines. Full VCS + package manager: checkpoint, diff, merge, cherry-pick, blame, release, stash, sync, publish. 24 commands. Clarity is the architecture.

Fewer lines means fewer bugs, faster audits, easier contribution.

Git Redistribution

Graf doesn't lock you out of the old ecosystem. graf sync push redistributes your repository to any legacy git remote – GitHub, GitLab, Gitea, bare SSH. Sovereign at the core, compatible at the edge.

Move at your own pace. Keep your mirrors. Leave when you're ready – or don't.

One Protocol. Everything Ships.

Git has one protocol for code and npm/pip/cargo for packages. Graf unifies both. GTP – the Graf Transfer Protocol – handles version control, package distribution, and identity in a single wire protocol. Push code and publish packages through the same endpoint, with the same key.

Challenge-Response Auth

Ed25519 challenge → sign → session nonce. No passwords stored. No tokens to rotate. BLAKE3(challenge ++ sig ++ secret) derives the session.

Content-Addressed Storage

R2-backed CAS. Push objects by CID, pull by CID. HEAD to check existence. Batch existence queries. Every write is idempotent.

Atomic Ref Updates

Compare-and-swap on every ref write. Race-safe. old_cid must match or the update is rejected. Tags are immutable once created.

GPAK Bulk Transfer

Pack multiple objects into a single framed stream. Length-prefixed frames, BLAKE3 footer checksum. Efficient clone and fetch.

Package Distribution

Same protocol, same identity. graf publish seals a package with your SoulKey, pushes to the registry. graf resolve pulls deps by CID.

68/68 Integration Tests

Every endpoint tested against the live forge. Auth, repos, CAS, refs, GPAK, conflicts, error cases. Zero-dependency Node.js test suite.

Complete Ecosystem. No Third Parties.

Everything you need to version, build, publish, and collaborate – sovereign from edge to forge.

Graf CLI

Local Tooling

24 commands. Single binary built with janus build. Checkpoint, diff, merge, blame, stash, release, sync. Sub-100ms status via stat cache.

Graf Forge

Cloud Infrastructure

GTP v1.1 server on Cloudflare Workers. R2 for objects, D1 for refs, KV for sessions. BLAKE3 WASM for all crypto. Ed25519 verification at the edge. Cloudflare-independent local backends coming soon – self-host your own forge.

📦

Hinge

Package Manager

SemVer 2.0 resolution, BFS dependency solver, KDL manifests, RFC 8785 lockfiles. Seal, sign, publish, verify. Transparency log with BLAKE3 chain.

🌐

Web Interface

Coming Soon

Repository browsing, ref explorer, package registry UI, SoulKey management. The GitHub/GitLab replacement – without the surveillance.

Agent-Native. Not Agent-Bolted.

Git was designed for humans typing at terminals in 2005. Twenty years later, AI agents generate more commits than people in some repositories. Graf was designed for this world. Agent collaboration isn't a plugin or a wrapper – it's why the architecture exists.

Per-Agent Branches

Each agent operates on its own branch. No lock contention. No index.lock. Parallel work by design, merge when ready.

WorkFn Interface

Agents implement a typed WorkFn callback. The nursery schedules, supervises, and collects results. Structured concurrency for version control.

Nursery Supervision

Three-level nested nurseries: supervisor → agent → scanner. Budget fairness. Structured cancellation. If an agent panics, its siblings survive.

Policy Hooks

Every merge can be gated: approve, reject, hold. Human-in-the-loop or fully autonomous – the policy is configurable, not hardcoded.

Conflict Reporting

Three-way conflict entries carry base_cid, ours_cid, theirs_cid. Agents can resolve programmatically. No interactive prompts needed.

SoulKey Identity

Every agent gets an Ed25519 keypair. SoulKeyID identifies the agent permanently. No shared credentials. Audit trail is cryptographic, not string-based.

Git asks "who typed this?" – Graf asks "what caused this, and can you prove it?"

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: Janus Hinge & Nexus OS Nip packages & your sources over same protocol, same identity
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, WorkFn, nursery supervision, policy hooks, three-way conflict CIDs
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 ~24.6K lines Janus + Zig
Crypto None SHA-1 (migrating SHA-256) SHA-1 BLAKE3 everywhere. Ed25519 signatures. Zero SHA.

CVS counted files. Git counted snapshots. Graf counts meaning. And it does it in 24,600 lines because it doesn't carry 30 years of accidental complexity.

Build. Init. Ship.

Single static binary. Clone, build, run. Requires Janus (Zig 0.16+ backend).

terminal
# build graf CLI
janus build

# initialize repository
graf init myproject

# content-addressed snapshot
graf checkpoint "first snapshot"

# stat-cached, sub-100ms
graf status

# Merkle DAG history
graf log

# signed release with test proof
graf release create v1.0.0 --run-tests

# verify the signature
graf release verify v1.0.0
# → VALID: Ed25519 signature verified

# push to forge
graf sync push

# publish package
graf publish
# → Sealed with SoulKey grf1a3f8c2e1...

24 Commands. One Binary.

Everything a VCS should do. Nothing it shouldn't.

Core

init Initialize repository
status Stat-cached change detection
checkpoint Content-addressed snapshot
log DAG history with three-clock timestamps
diff Myers O(ND) line-level diff
cat Inspect any CAS object by CID

Branch & Merge

branch Create, switch, list, delete
merge LCA + 3-way tree+line merge
cherry-pick Apply checkpoint to current branch
revert Undo checkpoint's changes
stash Snapshot/restore dirty state

History & Integrity

blame Line-level attribution
fsck Full DAG integrity verification
checkout Materialize tree by CID

Release & Package

release create Ed25519-signed certificate
release verify Cryptographic signature check
tag create Lightweight named ref to CID
publish Seal and push Hinge package

Sync, Git Redistribution & Interop

sync push Push to forge or git remote
sync pull Pull from forge or git remote
import Import git history
daemon Unix socket server

Architecture

Five subsystems. Auditable in an afternoon. No magic.

Content-Addressed Store

BLAKE3 CIDs with graf1 prefix. Prefix-sharded object directory, transparent deflate compression. CIDs hash raw content – compression is invisible. graf fsck verifies the entire graph.

Object Model

Five types: BlobTreeChangeCheckpointRelease. All CBOR-serialized. Checkpoints form the DAG. Tags and releases are cryptographic – not faith.

🔑

SoulKey Identity

Ed25519 keypair = identity. SoulKeyID = grf1 + BLAKE3(pubkey)[0:8]. 20 characters, zero PII, permanent. No KYC – for humans and agents alike. Challenge-response auth – no passwords on the wire, no tokens to rotate.

Merge Engine

LCA via alternating BFS (depth limit 10K). Three-way tree + line-level merge. Conflict entries carry base_cid, ours_cid, theirs_cid for programmatic resolution.

📜

Release Certificates

Ed25519-signed release objects binding version + checkpoint + tree CID. --run-tests embeds verified test counts. Git tags are faith. Graf releases are receipts.

GTP Wire Protocol

17 endpoints over HTTPS. CAS per-object, refs with atomic CAS, GPAK bulk transfer, challenge-response auth. BLAKE3 WASM at the edge. Cloudflare Workers + R2 + D1.

Forge is Live. Protocol is Proven.

Forge
Operational
Protocol
GTP v1.1
Integration Tests
68/68 Passing
Crypto
BLAKE3 + Ed25519
CLI Language
Janus (:core)
Package Manager
Hinge (Beta)
SHA-256
Purged. Zero.
License
LCL-1.0
"Git tags are faith. Graf releases are receipts."

Ed25519-signed release certificates with embedded test proof. The version, the checkpoint, the tree, the signature – all in one CAS object, verified by BLAKE3.