OCI Distribution 1.1 and Docker Registry v2
The full v2 API, including chunked uploads and cross-repo blob mounts. Tools that work with Docker Hub, GHCR or Harbor work unchanged: docker, buildx, podman, skopeo, crane, containerd. Multi-arch manifest lists are stored as pushed, never flattened.
Signatures and SBOMs live next to the image
Manifests pushed with a subject (cosign signatures, SBOMs, in-toto attestations) are indexed at push time and served through the OCI 1.1 Referrers API, with the OCI-Subject header clients look for. Older tooling that uses the sha256-<digest>.sig tag scheme keeps working.
Scans the layers, not the manifest
Switch on Trivy and Grype for a project and every pushed image is scanned as an image: OS packages and the libraries inside its layers, one platform at a time. The scan reads the blobs OrbitalReg already holds, so it needs no network access once the vulnerability databases are local.
Auto-quarantine on findings
Opt a project into auto-quarantine and set a severity threshold. A finding at or above it blocks the image digest within one five-minute sweep, and every docker pull of it is refused with an explanation while the block is in place.
Block an image everywhere by digest
A sha256 security block applies to the manifest and to every blob request, on local, remote and virtual repositories alike. That includes images that only ever came through the Docker Hub cache.
A pull-gate in front of docker pull
Optional and off by default. Before an image you host is served, the gate can check its worst open CVE severity, whether it has an SBOM, and your own Rego rules. Blocked pulls get a 403 that says why.
Who pulled which digest
Every manifest pull of an image you host is recorded with the digest, the token or user, the client IP and the user agent, so "who pulled the vulnerable build?" is a query instead of a guess.
More than container images
The same endpoint accepts other OCI artifacts: Helm charts via helm push, ORAS-pushed files, attestations. Layers that no manifest references any more are removed after a one-hour grace period, so in-flight pushes are never reaped.