walgit turns an S3 bucket into a stateless Git server — the open-source implementation of Cursor's "Continuity" design

walgitgitrusts3gcsobject-storage+7
Generated editorial diagram showing walgit's architecture: three stateless walgit instances push and read from an S3/GCS bucket via CAS on a manifest, with UDP gossip between instances. The bucket is the source of truth; each instance is a disposable cache.
Generated editorial image · Model/tool: hand-authored SVG · Disclosure: AI-generated, not source evidence

walgit is a single Rust binary that turns an S3 or GCS bucket into a stateless Git server. Created on August 23, 2026 by Tobias Lütke (Shopify CEO), it implements the architecture Cursor described in Git at any scale — the system Cursor calls Continuity (README, 2026-08-26). The repository has ~1,700 GitHub stars and 92 forks in three days (GitHub API, 2026-08-26).

Why it matters

Git hosting at scale has been stuck on Spokes: application-level replication with three-phase commit across a fixed replica set, a routing database, and local NVMe as the source of truth. Cursor’s Continuity post (cursor.com/blog/git-at-any-scale, 2026-08-18) laid out a different design: make a write-ahead log in object storage the source of truth, and make every on-disk repository a cache. A push is stored as an immutable object and becomes visible only when a tiny manifest is rewritten with compare-and-swap (CAS). That CAS is the consensus — no election, no quorum, no primary.

walgit takes that architecture and ships it as open-source Rust (README, 2026-08-26). For developers running agent-heavy workloads — throwaway repos per task, burst CI on monorepos, read replicas without a routing DB — this is the first self-hostable implementation of the pattern.

How it works

The repository stores everything under repos/<owner>/<repo>/ in the bucket (README, 2026-08-26):

A push indexes the pack, checks connectivity and policy, uploads pack + idx + log entry, then CASes the manifest. On a 412 (concurrent conflict), it re-reads, re-validates every ref, and retries (README, 2026-08-26).

A read does one conditional GET of the manifest. A 304 means serve from local cache; a 200 means apply new entries before serving. Reads are consistent without coordination.

The bucket is the repository. Every local disk is a cache. Kill all instances and you lose warmth, nothing else.

What it does

walgit supports (README, 2026-08-26):

Practical implications

Risks and caveats

What to watch

Sources

#SourceTypeDateURL
1tobi/walgit — GitHub repository (MIT, Rust, ~1.7K stars, 92 forks)Primary2026-08-26https://github.com/tobi/walgit
2tobi/walgit — README (capabilities, architecture, Cursor lineage)Primary2026-08-26https://github.com/tobi/walgit#readme
3Cursor engineering blog — “Git at any scale” (Vicent Martí, Continuity architecture)Primary2026-08-18https://cursor.com/blog/git-at-any-scale
4tobi/walgit — docs/reference/cursor-git-at-any-scale.md (verbatim copy)Primary2026-08-26https://github.com/tobi/walgit/blob/main/docs/reference/cursor-git-at-any-scale.md
5GitHub API — tobi/walgit repo metadataSecondary2026-08-26https://api.github.com/repos/tobi/walgit