Semantic versioning (semver)
Semantic versioning is the package-versioning convention MAJOR.MINOR.PATCH where MAJOR is incremented for breaking changes, MINOR for backwards-compatible feature additions, and PATCH for backwards-compatible bug fixes. The convention lets consumers express dependency tolerance, '^1.2.3' accepts any 1.x.x ≥ 1.2.3 but rejects 2.0.0.
Semver's promise is broken constantly in practice: bug fixes inadvertently introduce breaking behaviour, new features rely on deprecated APIs the consumer was using, and patch releases ship without changelogs. The pragmatic adaptation: pin tightly (exact versions or '~' patch-only ranges), automate upgrades via Dependabot/Renovate, and rely on test coverage to catch the semver violations. The 'caret' range ('^') is the npm default but is risky for libraries you don't control, many ecosystems have moved toward stricter pinning in production code, leaving semver ranges only for libraries you publish.