gitcaskDocsGitHub

gitcask

An open-source git server that keeps every repository in your S3 bucket, so servers are disposable and cost follows pushes rather than repository count.

The shape

Any number of identical instances serve any repository. Each repository is a write-ahead log in the bucket: immutable packs, a log entry per push, and a small manifest that changes only by compare-and-swap. There is no database and no leader.

serveservemaintainevents
repos/<owner>/<repo>/
Instances with roles serve, serve and maintain, all pointed at one bucket.

Roles are configuration, not separate programs: serve answers git, LFS and the API, maintain folds the log into checkpoints and compacts packs, and events delivers webhooks. An empty role list runs all three.

What a request does

A read revalidates the manifest first, so every instance answers with the latest push.

GET manifest.pb, If-None-Match
304: serve from cache

A push is acknowledged only after the bucket accepted it.

index the pack
PUT pack ∥ idx ∥ log
CAS manifest.pb
ok

Who owns what

gitcask owns the bytes. Everything that differs from one organisation to the next belongs to the platform built on it.

gitcaskYour platform
GitSmart HTTP v0 and v2, LFS, the JSON APIThe UI people use
IdentityVerifies a signed token and its repository scopesUsers, sign-in, teams, revocation
RepositoriesCreate, delete, read, commit, mergeThe list of repositories and their metadata
AutomationOne webhook per ref change, replayableCI, reviews, issues, branch policy

Where to go next