Summary
Semantic Versioning (SemVer) is a widely adopted versioning convention using a MAJOR.MINOR.PATCH format where each segment communicates the type and compatibility impact of a software change.
What is Semantic Versioning?
Semantic Versioning, defined at semver.org, specifies that a version number takes the form MAJOR.MINOR.PATCH:
- MAJOR is incremented for incompatible API changes that break backward compatibility
- MINOR is incremented for new functionality added in a backward-compatible manner
- PATCH is incremented for backward-compatible bug fixes
Pre-release versions and build metadata can be appended using hyphens and plus signs (e.g., 1.0.0-alpha.1 or 1.0.0+build.42).
SemVer solves "dependency hell" by giving consumers a clear contract about what to expect when upgrading. Package managers like npm, Maven, and Helm rely on SemVer to automatically resolve compatible dependency versions. In CI/CD pipelines, automated tools like semantic-release can analyze conventional commit messages and automatically determine and publish the correct next version number.
Why is Semantic Versioning relevant?
- Clear communication: Version numbers convey the risk and compatibility impact of an upgrade to consumers
- Automated release management: CI/CD tools can automate version bumps and changelog generation based on SemVer rules
- Dependency management: Package ecosystems rely on SemVer to resolve compatible versions without manual intervention