Semantic Versioning
/ˈsɛm.vɜːr/ · Noun · Development · Origin: 2011
Definitions
A versioning scheme using MAJOR.MINOR.PATCH (e.g., 2.4.1) where MAJOR = breaking changes, MINOR = backwards-compatible features, PATCH = backwards-compatible fixes. In theory. In practice, 'major version zero' can mean anything.
In plain English: A system for numbering software versions so you can tell at a glance whether an update might break things (big number change) or just fixes bugs (small number change).
Etymology
- 2009
- Tom Preston-Werner (GitHub co-founder) drafts the Semantic Versioning specification to bring order to version number chaos
- 2011
- SemVer 2.0.0 is published, establishing the MAJOR.MINOR.PATCH convention that npm and most package managers adopt
- 2020s
- Debates rage about whether SemVer works in practice — accidental breaking changes in minor versions remain common
Origin Story
Three numbers that try to make software changes predictable
**Semantic Versioning** (SemVer) is the MAJOR.MINOR.PATCH numbering scheme formalized by **Tom Preston-Werner**, co-founder of GitHub, in 2011. The rules are simple: increment MAJOR for breaking changes, MINOR for backward-compatible new features, and PATCH for backward-compatible bug fixes.
Version numbering existed long before SemVer, of course, but it was wildly inconsistent. Some projects used dates, some used sequential numbers, some used marketing-driven numbers (Windows went from 8 to 10, skipping 9). SemVer's contribution was making the version number **meaningful** — a developer could look at `2.0.0` and immediately know it contained breaking changes from `1.x.x`.
SemVer has been enormously influential, especially in the npm/Node.js ecosystem where the caret (`^`) and tilde (`~`) version ranges in package.json depend on SemVer semantics to work correctly. It's also been the subject of debate: some argue that in practice, "minor" versions frequently contain breaking changes, making SemVer more aspiration than guarantee.
Coined by: Tom Preston-Werner
Context: semver.org, 2011
Fun fact: The SemVer spec itself is versioned using SemVer. It's currently at version 2.0.0 and has been since 2013 — meaning its author has either achieved perfection or is avoiding a 3.0.0 breaking change.