Base URL
Endpoints
Both plain and gzip-compressed request bodies are accepted.
Authentication
All endpoints require HTTP Basic auth with a Mesa API key. The username field is ignored — only the password (API key) matters.Scopes
API keys can be org-wide or scoped to specific repositories. See Authentication for details.
Clone and fetch
Push
Pushing requires thewrite scope on your API key.
Branch operations
Credential helpers
Store your Mesa credentials so you don’t need to embed API keys in URLs.- macOS
- Linux
- Windows
CI/CD example
Supported operations
Wire protocol
Fetch (upload-pack) speaks Git protocol v2 only. Everyinfo/refs?service=git-upload-pack response advertises:
Git-Protocol request header is ignored — Mesa always responds with v2 on the fetch path. Pre-v2 clients cannot fetch from Mesa.
Push (receive-pack) has no v2 spec upstream and uses the historical smart-HTTP framing. Advertised capabilities: report-status, side-band-64k, ofs-delta, delete-refs.
Client compatibility
Supported fetch arguments
Mesa’s v2 command=fetch accepts the baseline gitprotocol-v2 arguments: want <oid>, have <oid>, done, thin-pack, no-progress, ofs-delta, include-tag, and wait-for-done.
Shallow fetch (advertised via fetch=… shallow) is supported: shallow <oid>, deepen <n>, deepen-since <unix-time>, and deepen-relative. The server replies with a shallow-info section listing shallow <oid> / unshallow <oid> boundary changes before the packfile. This powers git clone --depth=<n>, git clone --shallow-since=<date>, git fetch --deepen=<n>, and git fetch --unshallow. deepen-not (--shallow-exclude) is not yet supported.
Ref-in-want (advertised via fetch=… ref-in-want) is supported: want-ref <ref> resolves a ref name to its current oid server-side and reports the result in a wanted-refs section. Because the name is resolved at fetch time, it is immune to the race where a ref moves between a client’s ls-refs and its fetch.
Object filtering (filter) and multi-round negotiation (acknowledgments/ready) are not yet supported.
Limits
These limits apply to individual push operations. There are no rate limits on the number of operations.
Git ↔ Mesa concept mapping
When you interact with Mesa via Git, concepts are translated automatically:
When you
git push, commits become changes and branch refs become bookmarks. When you
git clone or git fetch, Mesa translates changes and bookmarks back into commits and refs.
The round-trip is transparent — your Git client sees a normal repository.
See Versioning for a deeper look at changes, bookmarks, and how
Mesa’s model compares to Git and Jujutsu.
