GitHunt
CA

cafkafk/ha-registry

High Availability Container Registry

HA-registry

Important

HA-registry is in an early stage of development, and not recommened for
production usage.

Note

HA-registry is experimental, and is subject to API changes until stabilized.
Many features still aren't implemented, and it's in no way useful yet.

HA-registry, is a highly available, blazingly fast™ OCI container distribution
service, written in rust, and leveraging an S3 backend for blob storage and a
postgresql database for distributed locking. It's goal is to support being both
pull and push available under both update rollout and garbage collection for
a n>=2 deployment.

It's designed with automation of garbage collection in mind, and hopes to
replace enterprise registry solutions like artifactory, by implementing features
like virtual repositories and promotion based garbage collection

Another goal is to be able to standup a database by walking the S3 storage,
ensuring the database only needs to be consistent during runtime.

HA-registry is licensed under EUPL-1.2, without a CLA, and seeks to stay REUSE
compliant. We also enforce conventional commits, and seek to have a strong
semver culture.

Other technologies leveraged in the project includes Axum, Tokio, and Nix for
development shells, packaging, and NixOS VM tests.

Limitations

  • Only S3 support

OCI API Compliance

Endpoints

ID Method API Endpoint Success Failure Implemented
end-1 GET /v2/ 200 404/401 200, 404 (missing 401)
end-2 GET / HEAD /v2/<name>/blobs/<digest> 200 404
end-3 GET / HEAD /v2/<name>/manifests/<reference> 200 404
end-4a POST /v2/<name>/blobs/uploads/ 202 404
end-4b POST /v2/<name>/blobs/uploads/?digest=<digest> 201/202 404/400
end-5 PATCH /v2/<name>/blobs/uploads/<reference> 202 404/416
end-6 PUT /v2/<name>/blobs/uploads/<reference>?digest=<digest> 201 404/400
end-7 PUT /v2/<name>/manifests/<reference> 201 404
end-8a GET /v2/<name>/tags/list 200 404
end-8b GET /v2/<name>/tags/list?n=<integer>&last=<tagname> 200 404
end-9 DELETE /v2/<name>/manifests/<reference> 202 404/400/405
end-10 DELETE /v2/<name>/blobs/<digest> 202 404/405
end-11 POST /v2/<name>/blobs/uploads/?mount=<digest>&from=<other_name> 201 404
end-12a GET /v2/<name>/referrers/<digest> 200 404/400
end-12b GET /v2/<name>/referrers/<digest>?artifactType=<artifactType> 200 404/400
end-13 GET /v2/<name>/blobs/uploads/<reference> 204 404

See Also

Languages

Rust56.3%Nix43.6%Shell0.1%

Contributors

European Union Public License 1.2
Created November 26, 2025
Updated November 27, 2025
cafkafk/ha-registry | GitHunt