Keeper: the local git object store

Keeper is the object-store dog: its purview is git object storage, and it owns those objects — append-only NNNNN.keeper pack logs, their NNNNN.keeper.idx kv64 indexes, and a project refs reflog, one flat shard per project. The goal is a store trivially git-exchangeable yet never rewriting packs, so packs copy verbatim and a dropped branch costs only a refs tombstone. The method: address by 60-bit hashlets, append to pack logs, index as sorted kv64 runs, resolve deltas within the single project pool.

API

Keeper follows the Dog three-call contract plus an incremental pack writer; objects are read by hashlet or URI and written through the pack API.

CLI

The keeper CLI clones, fetches, resolves, and cats by URI, plus a few maintenance verbs; be normally drives it rather than the user.

Pack logs

Pack logs are append-only, git-encoded object files — close to git's packfile format but not valid git packfiles, with no trailing checksum; see PackLog for the full format.

Index (kv64)

Each index entry is 16 bytes — a u64 key and u64 val — sorted by hashlet then type, so a hash-prefix lookup is one range query over all types; see Indices for the shared sorted-run format.

Delta dependencies and branch drop

All of a project's objects share one flat pool; a REF_DELTA may delta against any earlier object in that pool, with no cross-project base, which keeps each shard self-contained.

Refs and aliases

The project <project>/refs is an append-only reflog (a dog/ULOG) holding every branch, tag, and host alias as rows; the verb is always set and the key/val pair is packed into one URI.