ow-ops

apoci

A federated, self-hostable container and package registry.

Beta. Usable in production with care. APIs may change between minor versions.Latest release v0.0.57, 4 October 2026.

Each apoci node is a single-user registry for container images and packages, and an ActivityPub actor at @registry@your.domain. Push an artifact and it federates to the peers who follow you.

If your node goes down, your peers still have your artifacts and you can rebuild it from any of them. Repositories are namespaced by domain, so two operators can never clash.

Features

Formats
OCI images, npm, Cargo, PyPI, NuGet and Go modules, all behind one token.
Federation
ActivityPub between nodes. A followed node serves and caches its peers’ artifacts.
Pull-through cache
Go modules can be cached from an upstream proxy such as proxy.golang.org.
Operations
One binary. SQLite or PostgreSQL, local disk or S3. Alerts to Discord, Slack, Telegram or email.

Platforms

Linux
amd64 and arm64 binaries
Kubernetes
Helm chart in the repository
Go
go install from source

Quick start

The only required setting is your endpoint. The domain becomes your identity and your namespace.

echo 'endpoint: "https://foo.com"' > apoci.yaml
apoci serve

docker login foo.com -u registry -p "$(cat ~/apoci/data/registry.token)"
docker push foo.com/myapp:v1

Recent releases

  1. v0.0.57

    • Container: Update image public.ecr.aws/docker/library/golang (1.26 → 1.27)
  2. v0.0.56

    • Stop blob transfers timing out and add upload-session recovery
    • Server: Refuse /v2/auth when registryToken is empty; challenge anonymous
  3. v0.0.55

    • Server: Restore anonymous pulls via /v2/auth pull-only tokens
    • Server: Refuse /v2/auth when registryToken is empty; challenge anonymous

All releases

Details

License
MIT
Language
Go
Bug reports
Issue tracker
Security issues
Report privately