Semantic Versioning

/ˈsɛm.vɜːr/ · Noun · Development · Origin: 2011

Definitions

  1. 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.

Related Terms