mrkeyoor.com_
Tue 01 Sept 17:41 UTC
Self-Hostedevaluationupdated 25 Aug 2026

walgit review

walgit is a Git server that stores repository history in S3-compatible storage or Google Cloud Storage while treating each server's disk as a disposable cache. It aims to host repositories larger than one machine, serve Git over smart HTTP, and scale by pointing more stateless instances at the same bucket.

+369stars / 7d
Verdict

Our walgit build ran for 643 seconds before walgit-server failed with 3 compiler errors, and tests hit the same compilation boundary after 271 seconds. Its object-store WAL design is worth studying for Git repositories that exceed one machine, but the measured commit is not a clean source-build recommendation. Use Forgejo or Gitea for a normal team forge; test walgit only when its storage architecture solves a problem you already have.

We ran it

Lab card: what happened when we ran walgitScreenshot of walgit (github.com/tobi/walgit)
Install✓ · 25s658 packages
Build✗ · 643s
Tests✗ · 271sran, no count parsed
Repo212 files~74,266 lines of source · 3.4 MB · 1 CI workflows · tests dir

Answers from our run

Does walgit build from source?

Dependencies installed in 25 seconds (658 packages), and the build failed. We cloned commit a71c592 into a clean Debian container with 3 CPUs and no project-specific setup.

Do walgit's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use walgit?

Teams expecting a GitHub or GitLab replacement with issues, pull requests, CI, and code review: the README scopes walgit to repository serving and browsing.

What are the alternatives to walgit?

Forgejo, Gitea, Soft Serve. Our walgit build ran for 643 seconds before walgit-server failed with 3 compiler errors, and tests hit the same compilation boundary after 271 seconds.

Setup2/5Concise config, but the measured source build failed after 643 seconds
Docs5/5Detailed protocol, storage, operations, auth, and code-map guidance
Community2/5Fresh activity, but only a small issue-and-PR queue so far
Maturity2/5Ambitious design with no release and a failing measured commit

Discussed on

  1. hnWalgit – a Git server that is one binary in front of an object store141 points

Who it’s for

Infrastructure teams testing object storage as the source of truth for large Git repositories.
Operators who need smart HTTP, Git LFS, bundle URI clones, a web browser, and push policy in one binary.
Rust teams prepared to inspect storage and Git protocol code before production use.
Organizations already operating S3-compatible storage or Google Cloud Storage.

Who it’s NOT for

Teams expecting a GitHub or GitLab replacement with issues, pull requests, CI, and code review: the README scopes walgit to repository serving and browsing.
Operators who require SSH Git transport: the documented protocol surface is smart HTTP v0 and v2.
Small installations without object storage: S3-compatible storage or GCS is the durable repository, not an optional backup.
Buyers requiring a tagged stable release: GitHub reports no release, and the repository was still receiving storage-coordination changes on 2026-08-25.
Contributors who need the documented source build to pass today: our Rust build and test runs both stopped on compiler errors in walgit-server.

Setup reality

Our run at commit a71c592 installed 658 packages in 25 seconds. The build failed with exit 101 after 643 seconds on 3 compiler errors in walgit-server; tests failed with exit 101 after 271 seconds while compiling the same library and test target.

A deployment needs an S3-compatible or GCS bucket, a TOML configuration, and either static tokens or an OIDC provider. Production choices include cache placement, maintainer roles, TLS, bundle schedules, compaction, webhook delivery, and secret rotation.

The 3.4 MB checkout has 212 files, about 74,266 source lines, 1 CI workflow, a compose file, and a tests directory. The lab found no Dockerfile; the README separately documents a Containerfile and Nix build.

The bucket is the repository, and every server is a cache

walgit changes the usual Git hosting layout. Repository state lives in an object-store write-ahead log, while files on each server can be rebuilt and discarded. A tiny manifest is updated with compare-and-swap and acts as the commit point. Immutable pack and log objects sit behind it. Any instance may accept a push, and racing writers must re-read and retry when only one manifest update wins. The design removes a leader and repository-placement database from the serving path.

The server exposes smart HTTP v0 and v2 for fetch and push, Git LFS, bundle URI clones, a React repository browser, a JSON API, push policies, and webhooks. It supports SHA-1 and SHA-256 repositories. Fresh clones can download scheduled bundles directly from object storage or a CDN, leaving the server to supply only the remainder. For very large repositories, a remote reader uses HTTP range requests so packs need not fit on the machine.

Large repositories gain more than a stateless HTTP tier

Moving files to S3 is only the first layer. Git pack access is random and can turn a network filesystem into a latency problem. walgit keeps commits and trees in a history pack while allowing blobs to remain remote, then uses checkpoints and immutable log entries to rebuild state. Maintenance work such as compaction, bundle creation, connectivity audits, and repairs is derived from the durable log rather than a separate job database.

That model fits a narrow buyer. A company with a monorepo larger than its serving machines, expensive clone traffic, and existing object-store operations has reasons to test it. A team hosting 40 ordinary repositories does not. It would be adopting new storage semantics, cache placement, leases, compaction, and recovery behavior to solve a scale problem it lacks. The README is unusually candid about round trips to the bucket being the cost budget.

What happened when we ran it

Our sandbox cloned commit a71c592, a 3.4 MB checkout with 212 files and about 74,266 source lines. Installation succeeded in 25 seconds and installed 658 packages. The repository had 1 CI workflow, a compose file, and a tests directory. The lab found no Dockerfile, while the README documents a separately named Containerfile, a Nix package, and a local object-store development path.

The build ran for 643 seconds and failed with exit 101. The tail reported 3 errors in walgit-server, including Rust diagnostics E0277 and E0433. One compiler suggestion said to remove an .await, and the complete expanded type was written to a file inside the build directory. The log tail does not provide enough context to state which dependency, feature, or source change caused those errors.

Tests ran for 271 seconds and failed with exit 101 while compiling walgit-server and its library test target. The output again showed E0277, suggested removing an .await, and said the library could not compile. No test result followed because compilation did not finish. This is a build failure in our measured commit, not evidence that a particular Git protocol case or storage invariant failed at runtime.

One binary still needs an object store and identity plan

The opening configuration is short: listen address, public URL, authentication mode, bucket, and store endpoint. Real operation adds more decisions. Static tokens can come from environment variables, while OIDC supports providers such as Google, Entra, Okta, Auth0, Keycloak, Dex, and GitLab. The server issues its own access tokens after browser login. Rotating the session secret revokes those tokens, which must be part of an operator's incident plan.

Roles can be split into serving, maintenance, and event delivery. Multiple serving hosts can share one bucket, but each repository should have one maintainer selected through placement rules. Bundle schedules, compaction, cache mode, webhook cursors, TLS, and CDN or nginx byte offload all need configuration. The single binary reduces application packaging; it does not remove storage credentials, monitoring, routing, or recovery testing.

It is a Git server, not a collaboration forge

The web interface browses trees, blobs, commits, diffs, and WAL health. Per-repository policy can protect refs, require fast-forward updates, and assign groups or bypass lists. What the README does not offer is equally important: there is no issue tracker, pull-request review system, CI product, package registry, or organization administration comparable to a full forge. Those omissions are reasonable for the architecture, but they change the buying decision.

Project activity is immediate and early. The last push was 2026-08-25, GitHub showed 5 open issues and pull requests combined, and no release was published. Current pull requests covered storage coordination, browser authentication, webhook batching, protected namespaces, and another blob backend. This is evidence that the core is moving, not that those changes have settled into a stable release line.

walgit is best read as a serious implementation of an object-store-native Git architecture. Its documentation provides enough detail for an infrastructure team to review the invariants before a trial. The failed 643-second build raises the bar for that trial: pin the commit, reproduce compilation, then test push races, cold reads, recovery, and bucket behavior with disposable repositories. Conventional teams should take the simpler answer and install a conventional forge.

Alternatives

ProjectWhat it isPick it when
ForgejoA full Git forge with repositories, collaboration, administration, and familiar workflows.pick this instead when issues, pull requests, users, and routine forge administration matter more than object-store-native Git internals.
Gitea gh↗A mature self-hosted Git service with a broad web product and many deployment options.pick this instead when you want a conventional small-team GitHub replacement with a larger operating history.
Soft ServeA compact self-hostable Git server centered on SSH and a terminal interface.pick this instead when a small SSH-first Git service is enough and object-store scaling is unnecessary.

What people are saying

  1. [velocity-scout] tobi/walgit
  2. [hackernews] Walgit – a Git server that is one binary in front of an object store

Sources

  1. walgit README
  2. walgit pull request 8
  3. walgit issue 3

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →