Skip to content
Latchkey

How to Choose Independent vs Fixed Versioning for a Monorepo

Independent versioning bumps only what changed; fixed (locked) mode bumps every package to the same version on every release.

Independent mode keeps versions decoupled so consumers only see churn when a package they use actually changes. Fixed mode ties the whole monorepo to one version, which simplifies mental model but forces no-op bumps.

Trade-offs

AspectIndependentFixed / locked
Version scopePer packageOne shared version
No-op bumpsNoneAll packages bump each release
Tagsname@x.y.z per packageSingle vX.Y.Z
Best forLibraries used separatelyTightly coupled suite

How each tool sets it

Terminal
# Lerna: lerna.json
{ "version": "independent" }        # or "1.0.0" for fixed

# Changesets: .changeset/config.json
{ "fixed": [["@acme/a", "@acme/b"]] }  # empty = independent

# Nx: nx.json
{ "release": { "projectsRelationship": "independent" } }

Gotchas

  • Fixed mode publishes unchanged packages at a new version, which can confuse consumers who see a bump with no changelog entries.
  • Independent mode requires per-package changelogs and per-package tags to stay legible.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →