summ
summ

Container Registry

summ is an OCI-conformant container registry in a single binary — with a built-in web UI, pull counts and tag history. No database, no object store, nothing else to stand up alongside it.

curl -fsSL https://summcr.com/install.sh | sh

Get started See the live demo

$ ./summ serve
summ 0.1.0-rc.1
  listening on  127.0.0.1:3110
  registry      http://127.0.0.1:3110/v2/
  data dir      /home/you/data
  purge         every 1h after 1d unreferenced
  auth mode     open - no credential is required, to pull or to push
                any process on this machine may pull, push and
                delete; the listener is on loopback, so nothing
                else can reach it

$ docker push 127.0.0.1:3110/demo/alpine
The push refers to repository [127.0.0.1:3110/demo/alpine]
latest: digest: sha256:beefc0de… size: 527

$ open http://127.0.0.1:3110   # the web UI is already there
A registry, from nothing, in two commands.

Install summ

One command on Linux and macOS, or one docker run. A single file, no runtime dependencies.

Install →

Try the demo

The built-in web UI on a real registry — repositories, tags, pull grids and tag timelines.

Open the demo →

Read the source

Apache-2.0, written in Rust, with the docs, the API reference and the deployment guide beside it.

GitHub →

Batteries included

A built-in web UI

Same binary, same port, assets compiled in — no build step, no framework, no CDN, so it works air-gapped. Browse repositories, search names, drill into a manifest.

Pull counts

Every repository, tag and manifest gets a thirty-day contribution grid and a last-24-hours strip. Serving a pull never touches the store, so the counters cost the pull path nothing.

Tag history

What has this tag pointed at, and what has this manifest ever been called — the same endpoint, addressed by tag or by digest. A deleted tag still answers.

Metadata is the product

Four of the five serial steps in a cold containerd pull are metadata lookups. summ is built around a key schema over RocksDB: nothing is a directory walk, and no stored value grows with the size of the registry.

Space that comes back

A background purge reclaims unreferenced layer bytes, unfinished uploads and empty names, with a grace period in front of it. A dry-run pass says what it would reclaim before you let one run.

Auth over everything it serves

--auth-mode open|public-pull|private covers /v2/, the discovery API and the UI at once, with no exemption list. API keys over HTTP Basic, so docker login works with no token server to run.

Conformant. The OCI distribution-spec conformance suite passes at every profile with zero failures — 1032 checks at the suite's dev profile, referrers included, nothing skipped.

Install

Prebuilt binary

curl -fsSL https://summcr.com/install.sh | sh

Reads uname, downloads the matching build, checks it against the published SHA-256 and leaves a single summ in the current directory. No PATH edits, no service files, no sudo.

./summ serve

Docker

docker run -d --name summ -p 3110:3110 -v summ-data:/var/lib/summ summcr/summ

Multi-architecture, so that line is the same on x86_64 and arm64. Name the volume — without -v you still get one, but an anonymous volume that docker run --rm deletes.

Either way the registry is on http://127.0.0.1:3110, web UI included.

Or take a tarball directly: Linux x86_64 · Linux arm64 · macOS Apple silicon · macOS Intel