Docs

Tags & pinning

Every image publishes several tags pointing at the same build. Which one you pin decides what happens when the software changes underneath you.

Pin by digest for immutability

A digest is content-addressed — it can never move. Preferred for production deployments.

FROM ghcr.io/rtvkiz/minimal-python@sha256:<digest>

What each tag does

ReferenceExampleBehavior
Digestminimal-python@sha256:…Immutable content identity. Never moves.
Versionminimal-caddy:2.11.4-r0Moves when that application version is rebuilt with newer packages.
Dated versionminimal-caddy:2.11.4-r0-20260725Build-history tag; may move if rebuilt again on the same UTC date.
Minor lineminimal-caddy:2.11Newest patch within that minor line.
Major lineminimal-caddy:2Newest release within that major line. Does not cross a major bump.
Latestminimal-caddy:latestNewest production build, including across major versions.
Devminimal-caddy:latest-devNewest development/debug variant.

Which should you pin?

Pin a major line (:2) if you want ongoing patches without being moved across a breaking upstream release. :latest will cross a major bump; an exact version tag never moves forward at all, so it stops receiving security fixes. Pin a digest when you need a byte-identical artifact and will update it deliberately.

Every tag above has a -dev companion — :2-dev, :2.11-dev.

Two deliberate exceptions

  • Images on a 0.x version publish only the minor line (:0.42, never :0). Semantic versioning permits breaking changes between 0.x minors, so a rolling :0 would promise a compatibility guarantee that does not exist.
  • Calendar-versioned images (minio, 2025.10.15) publish no line tags — a :2025 tag would imply a support line that is not a real thing.

About the epoch

The Melange epoch (-r0) resets on an upstream application-version bump, and increments when the build recipe changes while the upstream version stays the same.