Architecture
objgitd is one binary. It stores git repositories as objects in a Tigris
bucket. It does not keep repository data on a local filesystem.
The daemon is the shared backend
cmd/objgitd/main.go builds one *daemon. One errgroup then serves that
daemon through all three transports at the same time.
The struct holds three fields, plus the hook configuration:
| Field | Type | Purpose |
|---|---|---|
sysFS |
billy.Filesystem |
Daemon-level state only, which is the SSH host key. Still internal/s3fs. |
resolver |
repofs.Resolver |
Maps a repository path to its storage. |
authz |
auth.Authorizer |
One decision point for every transport. |
resolver.Resolve returns a go-git storage.Storer directly. No
billy.Filesystem is involved in repository data. The production resolver is
repofs.BucketResolver, and its Base field is an
internal/storage/tigris.Storer over the single -bucket. Each repository
gets its own key prefix of the form orgID/name through Storer.Scoped.
Three behaviors live on *daemon, so every transport acts the same way:
- repository resolution
- authorization
- create-on-first-push, which is
loadOrInitingit_protocol.go
Pages
| Page | Contents |
|---|---|
| transports.md | Smart HTTP, git://, and SSH. Two protocol points that are easy to get wrong. |
| auth.md | The one authorization interface that every transport calls. |
| hooks.md | Push hooks, webhook dispatch, live output streaming, and the kefka sandbox. |
| metrics.md | Prometheus vectors and the three instrumentation seams. |
| snapshots.md | erofs images of pushed trees, and the snapshot cache. |
| tigris-storer.md | Repository storage: a storage.Storer on one Tigris bucket. |
| s3fs.md | Daemon-level state: a billy.Filesystem on Tigris. |
| lfs.md | Git LFS: presigned transfers, global blobs, per-repository markers. |
Related documents outside this directory:
- ../reference/tigris-backend.md — the
.cuebinary layout, the failure modes, and the build order. - ../usage/hooks.md — how to write a hook script.
- ../usage/webhooks.md — how to configure and verify push webhooks.
- ../usage/lfs.md — how to use Git LFS against objgitd.
../plans/— plans for work that is not yet complete.