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:v1Recent releases
- Container: Update image public.ecr.aws/docker/library/golang (1.26 → 1.27)
- Stop blob transfers timing out and add upload-session recovery
- Server: Refuse /v2/auth when registryToken is empty; challenge anonymous
- Server: Restore anonymous pulls via /v2/auth pull-only tokens
- Server: Refuse /v2/auth when registryToken is empty; challenge anonymous
Details
- License
- MIT
- Language
- Go
- Bug reports
- Issue tracker
- Security issues
- Report privately