Skip to content
Distr
Book DemoStart free trialLogin

Artifact Registry

The Distr Artifact Registry is a built-in, OCI-compliant registry designed for AI and software companies to distribute Docker images and Helm Charts, SBOMs and other OCI artifacts to self-managed and BYOC environments. It also includes tag-based access and licensing controls. The registry also provides detailed download analytics that let you monitor which versions of your software are being used by each customer.

Use it to publish versioned artifacts, enforce entitlement rules, and track consumption across your customer base.

Registry diagram
  • Multi-artifact support: Distribute Docker Images, Helm Charts, Terraform Modules, Zarf packages, and any OCI-compliant artifact
  • Software supply chain security: Store SBOMs and signatures for image verification
  • Visibility: Get insights into which customers are using which artifacts and versions
  • Open standards: Built on the OCI specification and compatible with existing tooling (Docker, ORAS, Helm, etc.)
  • Built-in licensing (beta): Bind artifact versions to entitlements for fine-grained customer access control

Want a quick overview of how it works? Watch this short walkthrough:

The Artifact List page lets you view all artifacts stored in your registry. It provides an overview of pull counts across all tags, along with insights into which users and customers are using each artifact.

Registry artifacts view

The artifact details page gives you a complete view of all tags associated with a specific artifact. You can see the OCI URL, upload date, and artifact size, along with pull counts for each tag.

Registry artifacts view

A single artifact can be made public, so anyone who knows its name can pull it without credentials. This is meant for what you want to hand out freely, an installer image, a CLI, an agent chart or a public demo, while everything else in the registry stays private.

Open the artifact details page and pick Make public from the menu in the top right. The artifact then carries a Public badge everywhere it is listed, and Make private in the same menu requires credentials again. Only organization admins can change it.

ORAS and anything speaking the HTTP API directly pull a public artifact with no setup at all:

Terminal window
oras pull registry.example.com/acme/my-artifact:1.0.0
helm pull oci://registry.example.com/acme/my-chart --version 1.0.0
curl -sSL https://registry.example.com/v2/acme/my-image/manifests/1.0.0 \
-H 'Accept: application/vnd.oci.image.manifest.v1+json'

Pulling a public artifact with Docker requires the containerd image store. It does not work on the legacy overlay2 storage driver, which cannot pull a public artifact without credentials at all.

The reason is that the Docker CLI asks the registry whether authentication is needed before it pulls anything, and Distr has to answer yes, because a client holding a PAT sends it only after it has seen that answer. A daemon on overlay2 reads that answer as “log in first” and gives up, while the containerd image store never asks and pulls the artifact like any other:

Terminal window
docker pull registry.example.com/acme/my-image:1.0.0

The containerd image store is the default for a fresh installation of Docker Engine 29 and later and for Docker Desktop, while a daemon upgraded from an earlier version keeps overlay2 until you enable it. Check which one is in use with docker info: the storage driver reads overlayfs with the containerd image store and overlay2 without it. Podman and Skopeo ask the same question as Docker does.

Anonymous pulls are rate limited per client IP address, considerably more strictly than the pull limits of the large public registries. A client that exceeds them gets 401 Unauthorized with an authentication challenge and a Retry-After header. Authenticated pulls are never rate limited, so a client that holds a PAT answers the challenge with it and pulls on, and a customer who runs into the limit only has to log in. The answer is a challenge rather than 429 Too Many Requests because OCI clients send their credentials only once they have seen a 401, so a 429 would lock out a customer whose credentials are sitting unused in the client’s config file. Self-hosted instances can change the limits, see the REGISTRY_ANONYMOUS_* variables.

Every anonymous pull is recorded in the download analytics like any other pull, marked as Anonymous since there is no user or customer behind it.

The main Distr dashboard also provides a global view of which artifacts each end customer has consumed, including version details and a health status.

Registry artifacts view

The Distr registry protects artifacts and tags that are referenced in entitlements, so customers keep access to their licensed software.

You can delete individual tags from an artifact through the API and UI. However, the system enforces several validation rules to prevent breaking customer access.

Tag deletion succeeds when all of these conditions are met:

  • The tag exists, and at least one other tag remains for the artifact
  • No artifact entitlement grants all versions of the artifact
  • If an entitlement grants exactly the version the tag points at, another tag must point at that version as well

Deleting a tag also deletes the version the tag pointed at, so that its blobs can be reclaimed. For a multi-arch image, this extends to the per-architecture manifests the index referenced. A version is only deleted when nothing references it any more, that is when no other tag points at it and no other version references it (a per-architecture manifest shared with another index is kept).

An entitlement that grants a version deleted this way loses that version, and keeps every other artifact and version it grants.

Once a version is deleted, it can no longer be pulled by its digest. The blobs themselves are removed by the blob cleanup job, which a self-hosted instance has to schedule.

Scenario 1: Safe deletion

Artifact: myapp Tags: v1.0.0, v1.0.1, latest (all point to different digests) License: References sha256:abc123 (v1.0.0’s digest)

Action: Delete tag “v1.0.1” Result: Success - v1.0.1 is not licensed and not the last tag

Scenario 2: Blocked deletion - licensed digest

Artifact: myapp Tags: v1.0.0 (points to sha256:abc123) License: References sha256:abc123

Action: Delete tag “v1.0.0” Result: Blocked (400) - Cannot delete last non-SHA tag for licensed digest

Scenario 3: Blocked deletion - last tag

Artifact: myapp Tags: v1.0.0 (only tag remaining) No licenses

Action: Delete tag “v1.0.0” Result: Blocked (409) - At least one tag must remain

You can delete entire artifacts from your registry, which will cascade to all associated versions, tags and historical download data.

Artifacts can be deleted when they are not referenced in any entitlement, including an expired one.

  • Check entitlements first: Before deleting artifacts or tags, verify they are not referenced in customer entitlements
  • Use caution with tags: Deleting tags can affect customer access if not done carefully
  • Monitor usage: Review the Downloads section to understand which artifacts and versions are actively used
  • Keep at least one tag: The system requires at least one non-SHA tag per artifact to maintain discoverability