📈 GH Trending Explorer 🎲 Surprise me

← all repos

rgodha24 / walgithub

git clone https://github.com/rgodha24/walgithub.git

walgit with a GitHub Enterprise Server facade — git over smart HTTP from an object-store bucket

—
stars, 24h
—
stars, 7 days
+135
stars, 30 days · #1,744
135
★ total
4
forks · 0 open issues

Star history starts 2026-10-20; the chart appears after the second daily snapshot.

LanguageRust
LicenseMIT
Created2026-09-25 (25d ago)
Last push25d ago
Watchers0
OwnerUser

Links

README excerpt
# walgit — a git server that is one binary in front of an object store
walgit hosts git repositories with **no database, no leader and no local state that matters**. You run a
single binary, point it at an S3 or GCS bucket, and you have: smart HTTP (v0/v2) fetch and push, `bundle-uri`
clones served as static files, Git LFS, a browsing web UI, a JSON API with an SDK, per-repository push policy,
webhooks — and a server that scales to repositories **larger than the machine it runs on**. Every machine that
runs walgit is a disposable cache; the bucket is the repository.
 [code] sh
# build (needs rust per rust-toolchain.toml, protoc, node 24 + pnpm for the web UI)
just web-build && cargo build --release -p walgit-cli
# or: nix build .#walgit or: podman build -t walgit -f Containerfile .
# one box, TLS by walgit itself, a local S3 store (rustfs in a container)
just dev-store
./target/release/walgit-server --config walgit.standalone.toml
open https://walgit.localhost:8080/
 [code] sh
just test # fast hermetic tier (< 1 min): unit + quick integration, in-memory store, real git
just e2e # real git against the server (~20 s)
just warnings # zero rustc warnings across all targets
just ci # all of the above
cargo test -p walgit-server --test sim # fault-injection simulation (crashes, partitions, stale reads)
just test-s3 # store contract against local rustfs
 [code] 
crates/
 walgit-proto protobuf schema (wal.proto), log framing, store keys
 walgit-store ObjectStore trait (CAS versions, conditional GET, range, compose); backends s3, gcs, memory; leases
 walgit-git bare repos on disk, receive-pack, pack ingest, refs ↔ packed-refs, advertisements, upload-pack drivers
 walgit-wal RepoHandle: sync levels, publish (group commit + CAS), checkpoints, log reader, remote reader, tasks
 walgit-bundle bundle-uri: slots and chains, building, header ∘ pack composition, lists, retention
 walgit-server axum: smart HTTP, LFS, bundles, auth (none/token/oidc), the maintainer loop, upstream follow,
 web/ (API, UI, SDK routes, SSE), setup.rs (installer + recipes), events bridge
 walgit-config walgit.toml (+ WALGIT__ env overrides), per-repo settings merge, fail-closed validation
 walgit-cli `walgit serve|import|compact|bundle|wal|mirror|synth|config|repo`; `walgit-server` = `walgit serve`
web/ React SPA (Vite) + sdk/repos.ts, built into the binary; the wire contract is web/API.md
docs/ BUNDLE_URI_DESIGN, ROUNDTRIPS (the cost model), POLICY, LFS, INTEGRITY, EVENTS, CONTRACT, patches/
```
## Invariants worth memorising
* The manifest CAS is the only commit point; everything before it is invisible, everything after it is
 idempotent and replayable.
* Immutable objects are content-addressed; nothing is overwritten except the manifest, the bundle list and leases.
* Every read revalidates against the bucket first; there is no "eventually".
* Local disk is a cache. Memory is a cache. The bucket is the repository.
* Placement is configured, never inferred; refs-level reads work everywh