Lakshya

SDLC, DevOps & Developer Experience · Chapter 11 of 15

Artifact registries, and what immutable actually means

Where your binaries live, the free tier that silently stops accepting them, and why 'we require immutable tags' is four different implementations.

4 min read0 diagramsAll 15 chapters

The artifact registry is the least discussed and most load-bearing component in a delivery pipeline: it holds the thing you actually ship. This chapter is what the products are for and the specific ways each surprises you.

The categories

CategoryProductsWhat it is genuinely for
Universal binary storesArtifactory, NexusThe only serious answer when you must serve thirty package formats from one governed place, with replication
Cloud-native container registriesThe three clouds' own registriesCheap, integrated, and free to pull from within the same region — which is the whole argument
Platform-bundled registriesThe source platforms' package registriesConvenient because they are already there. Included tiers are small; not a serious enterprise binary store
Hosted multi-formatCloudsmith and similarThe 'I do not want to operate Artifactory' option, with good regional delivery
Self-hosted container registryHarborFree, CNCF-graduated, with the most expressive immutability rules of any product here

The free-tier trap that is a production incident waiting to happen.

One major self-hosted registry's community edition has usage limits — and those limits were tightened on existing users in a late-2025 release, roughly halving the allowed component count and cutting the daily request allowance.

When either threshold is exceeded, new component ingestion pauses until usage drops back below both. A free registry that silently stops accepting artifacts mid-sprint is not a licensing inconvenience; it is an outage in your delivery pipeline, and the failure mode is confusing because everything else keeps working.

The general lesson, which recurs throughout this chapter: read the limits, not the badge. ‘Free and open source’ and ‘free with usage limits that can be reduced under you’ are very different propositions, and only one of them belongs in a build pipeline.

Immutable tags: four incompatible implementations

Every security standard says to use immutable tags, and the term means four different things depending on the product. Anyone writing a policy across a mixed estate is writing four implementations.

DesignHow it worksUsability
Repository-level with exclusionsImmutable by default, with wildcard patterns exempting specific tags such as a moving latestThe most usable design. It matches how teams actually work — pinned releases immutable, one moving pointer allowed
Repository-level, absoluteSet at repository creation, all or nothingWorkable, and it forces a separate repository for anything that must move
Per-tag manual lockingEach tag is individually marked read-only after pushEffectively unusable at scale without automation, because it is a post-push step someone must remember
Pattern rulesProject-scoped rules matching tag patternsThe most expressive, on a self-hosted product
Not supported nativelyEnforced through permissions and policy insteadThis is where the two largest enterprise binary stores sit — a fact worth knowing before you write the policy

The practical consequence: deploy by digest rather than by tag, everywhere. A content digest is immutable by construction and requires no registry feature at all, which makes it the only portable answer. Tag immutability is a helpful defence in depth; the digest is the actual control.

The charges that surprise people

  • Storage measured at the high-water mark on at least one hosted product — the peak stored during the billing period rather than the average. One afternoon of publishing debug builds sets your bill for the month.
  • Shared storage pools. On the platform-bundled registries, package storage shares a quota with build artifacts, so a chatty CI pipeline consumes your registry allowance.
  • Scanning billed separately. Cloud registries typically offer basic scanning free and route deeper scanning to a separate security product with its own meter. Teams enable it and are surprised by a line item under a different service name.
  • Egress. Pulling within the same region is generally free and pulling across regions or out to the internet is not — which makes registry placement a real architectural decision for a multi-region cluster estate.
  • And retention. Every registry accumulates. Untagged manifests, old builds, abandoned branches. A retention policy is the cheapest cost control here and it is almost never configured until someone looks at the bill.

Check yourself

What is the portable way to guarantee you deploy what you tested?Deploy by digest. It is immutable by construction and needs no registry feature, which matters because tag immutability means four incompatible things across products.
What happens when a community-edition registry hits its component limit?Ingestion pauses until usage drops below the threshold — a delivery outage, made worse because the limits have been reduced on existing users.
Which immutability design is most usable?Repository-level with wildcard exclusions, because it allows pinned releases to be immutable while permitting one deliberately-moving pointer.
What is the cheapest cost control on a registry?A retention policy. Registries accumulate untagged manifests and abandoned builds indefinitely, and nobody configures it until the bill arrives.
← Infrastructure as code: the tooling and the licence questionThe security tooling landscape, and what the evidence supports →