Home

SemVer

Semantic Versioning, or SemVer, is a specification for versioning software that expresses meaning about code changes in a version number. The core form is MAJOR.MINOR.PATCH, optionally followed by a pre-release label and build metadata. Examples include 2.4.1, 3.0.0-alpha.2, and 1.2.0+build.40.

Under SemVer, increments signal compatibility: MAJOR increases for incompatible API changes, MINOR for backwards-compatible new features,

The scheme also defines stability and development guidance: 0.y.z is considered initial development and may change

SemVer aims to enable automated dependency management and clearer signaling of compatibility. It is widely adopted

Limitations include that version numbers cannot fully guarantee API stability, and some projects may violate the

and
PATCH
for
backwards-compatible
bug
fixes.
Pre-release
versions
(for
example,
1.0.0-beta.1)
indicate
releases
that
are
not
yet
stable
and
may
not
satisfy
dependency
constraints.
Build
metadata
(after
a
plus
sign)
does
not
affect
version
precedence
and
is
used
for
informational
identifiers
like
build
numbers.
at
any
time;
once
1.0.0
is
released,
public
API
compatibility
is
expected
to
be
preserved
across
subsequent
1.x.y
releases
unless
a
new
major
version
is
issued.
Version
constraints
in
tooling
allow
specifying
compatible
ranges,
such
as
^1.2.3
or
>=1.2.0
<2.0.0.
in
package
ecosystems
and
build
tools
(such
as
npm,
Cargo,
RubyGems,
and
Composer),
though
adoption
varies
and
some
projects
do
not
strictly
follow
the
spec.
The
SemVer
2.0.0
specification
was
published
by
Tom
Preston-Werner
in
2013
and
formalizes
these
rules.
spec
or
misrepresent
compatibility.
Nevertheless,
SemVer
provides
a
common
framework
for
signaling
changes
and
guiding
automated
upgrades.