objgit README

The project's README from github.com/tigrisdata/objgit. As one markdown file: README.md.

objgit

An experiment in storing git repositories in object storage. You probably don't need this. This is a proof of concept and doesn't really have a lot of uses yet.

This is heavily vibe coded as an exploration of the design space. See the claude plans folder for an idea of the kinds of things that were being explored and why. If this experiment ends up being shippable, a better implementation will be made to replace this terrible code.

License: MIT

Price: Free as in mattress. If you use this, it's your problem.

Notable features

Design tradeoffs

Future goals

Setup instructions

objgit depends on the following things:

Prepare your .env file

objgit takes its configuration via flags, environment variables, and .env files in this order of precedence:

Here is a sample .env file:

# Use the AWS credential chain to load Tigris credentials
AWS_PROFILE=tigris

# If true, allow the execution of post-receive hooks
ALLOW_HOOKS=true
# Hook timeout in go time.Duration format
HOOK_TIMEOUT=60s

# If true, allow anonymous pushes
ALLOW_PUSH=true

# The Tigris bucket that all repos are stored in,
# as well as the SSH host key
BUCKET=xe-git-repos

# Per-protocol bindhosts
GIT_BIND=:9418
HTTP_BIND=:8080
SSH_BIND=:2222

# Pushes that unpack a packfile at the same time. This is what bounds
# memory under concurrent pushes: each one costs roughly 400 MiB of
# resident set for a large repository. 0 disables the limit.
MAX_CONCURRENT_PUSHES=4
# How long a push waits for a slot before it fails,
# in go time.Duration format
PUSH_QUEUE_TIMEOUT=2m

# Prometheus metrics
METRICS_BIND=:9090

# Logging detail level
SLOG_LEVEL=INFO

Run the program

go run ./cmd/objgitd

Push a repo

$ git push ssh://localhost:2222/xeiaso.net/objgit.git
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 32 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 2.80 KiB | 2.80 MiB/s, done.
Total 9 (delta 5), reused 0 (delta 0), pack-reused 0 (from 0)
remote: push to xeiaso.net/objgit.git refs/heads/main: a300ea49df20ad5dc82fc4dabb85fbd3261faed7 -> 3d889908eefd60d9a11605f077b7b4560aef8e74
remote: top-level contents:
remote: CLAUDE.md
remote: LICENSE
remote: README.md
remote: cmd
remote: docs
remote: go.mod
remote: go.sum
remote: internal
remote: go module: tangled.org/xeiaso.net/objgit
remote: manifest (/tmp/manifest.txt):
remote: ref refs/heads/main
remote: sha 3d889908eefd60d9a11605f077b7b4560aef8e74
remote: hook done
To ssh://localhost:2222/xeiaso.net/objgit.git
   a300ea4..3d88990  main -> main

Deployment to production

TODO(Xe): re-evaluate performance-based life choices and write.

objgit (tigrisdata/objgit)

Searching Database…

140 ·GitHub
What is this?objgit is an experiment: a Git server that keeps repositories in object storage (Tigris) instead of on a local disk. The author calls it a proof of concept that you probably don't need yet.
Is this a new version control system, or a server that hosts normal Git repos?It's a server, not a new VCS — repos stay ordinary Git, stored in bare repo format inside the bucket and served over ssh, http, and the git protocol.
How do I get it running?Get a Tigris account, bucket, and access keypair, put the config in a .env file (envvars take precedence over .env, which beats flags), then run the program and push a repo.
Can I point it at any S3-compatible bucket, or does it need Tigris specifically?Tigris specifically: the core flow relies on Tigris' RenameObject call, which is not part of the standard S3 API. You also need a system that runs Go, TLS certificate authorities on disk, and an IPv4/IPv6 network stack.
So what's missing before I could actually rely on it?Quite a lot: there is no authentication whatsoever, reads are fully buffered in memory (theoretical 2Gi file size limit), object storage is more latent than a local disk, and the author says it is very new and barely tested.
Why did the author build this instead of just running a normal Git server?The README calls it heavily vibe coded — an exploration of the design space, with the claude plans folder documenting what was being explored and why. If the experiment proves shippable, a better implementation is meant to replace the current code.
What's on the roadmap?Future goals include Tekton integration for CI pipelines, a web UI built on the Xe Design System, deployment to Kubernetes, HTTPS support with TLS termination, and a blogpost.
Does it expose any monitoring metrics?Yes, basic Prometheus metrics are included out of the box.
What are similar projects?minio, thanos, git-ai, walgithub, walgit, kubo, crab, sftpgo
Creator
tigrisdata
Size
1.5 MB
Stars
140
Age
4mo
Commits · 90 Days