In dit artikel
Wat is Semantic Versioning?
Semantisch versiebeheer (SemVer) is een versieschema dat betekenis toekent aan elk deel van een versienummer. Gemaakt door Tom Preston-Werner biedt SemVer een universele conventie voor het communiceren van de aard en impact van softwarewijzigingen alleen via versienummers.
Door SemVer te volgen kunnen ontwikkelaars en gebruikers direct begrijpen of een update brekende wijzigingen, nieuwe functies of bugfixes introduceert — alleen door het versienummer te lezen. Deze voorspelbaarheid is cruciaal voor afhankelijkheidsbeheer in moderne software-ecosystemen.
Het SemVer-formaat
Een semantische versie bestaat uit drie numerieke componenten gescheiden door punten: MAJOR.MINOR.PATCH.
- MAJOR — verhoogd wanneer u incompatibele API-wijzigingen aanbrengt. Van 1.x.x naar 2.0.0 gaan signaleert dat bestaande code kan breken
- MINOR — verhoogd wanneer u functionaliteit toevoegt op een achterwaarts compatibele manier. Van 1.2.x naar 1.3.0 gaan betekent nieuwe functies zonder bestaande te verbreken
- PATCH — verhoogd wanneer u achterwaarts compatibele bugfixes aanbrengt. Van 1.2.3 naar 1.2.4 gaan betekent dat alleen bugs zijn opgelost
- Elk onderdeel moet een niet-negatief geheel getal zijn en mag geen voorloopnullen bevatten (1.02.3 is ongeldig)
Probeer gratis — geen aanmelding vereist
Valideer een SemVer-string →Versiebereiken
Pakketbeheerders gebruiken versiebereiken om compatibele afhankelijkheidsversies op te geven. Het begrijpen van deze bereiken is essentieel voor betrouwbare builds.
- Caret-bereiken (^1.2.3) — staan wijzigingen toe die het meest linkse niet-nulcijfer niet wijzigen. ^1.2.3 betekent elke versie van 1.2.3 tot maar niet inclusief 2.0.0
- Tilde-bereiken (~1.2.3) — staan alleen wijzigingen op patch-niveau toe. ~1.2.3 betekent elke versie van 1.2.3 tot maar niet inclusief 1.3.0
- Exacte versie (1.2.3) — alleen die specifieke versie is acceptabel, geen flexibiliteit
Toepassingen
Semantisch versiebeheer is de basis van modern pakketbeheer en release-workflows.
- npm, pip en Cargo — pakketbeheerders vertrouwen op SemVer om afhankelijkheidsbomen op te lossen en te voorkomen dat brekende wijzigingen de productie bereiken
- CI/CD-pipelines — geautomatiseerde systemen gebruiken SemVer-tags om builds te activeren, releases te publiceren en wijzigingslogboeken te genereren
- API-versiebeheer — REST API's gebruiken hoofdversies in URL's (v1, v2) om achterwaartse compatibiliteit te behouden terwijl ze evolueren
- Bibliotheekauteurs — het publiceren van een bibliotheek met correct SemVer geeft consumenten aan wanneer upgrades veilig zijn
Pre-release en metadata
SemVer ondersteunt twee optionele uitbreidingen die context toevoegen aan versienummers zonder de voorrangsregels te beïnvloeden.
- Pre-release-identifiers — toegevoegd na een koppelteken: 1.0.0-alpha, 1.0.0-beta.2, 1.0.0-rc.1. Deze geven versies aan die nog niet stabiel zijn en lagere prioriteit hebben dan de bijbehorende release
- Build-metadata — toegevoegd na een plusteken: 1.0.0+build.123, 1.0.0-beta+exp.sha.5114f85. Build-metadata wordt genegeerd bij het bepalen van versieprioriteit
- Pre-release-versies worden gesorteerd op basis van door punten gescheiden identifiers: numerieke identifiers sorteren numeriek, alfanumerieke identifiers sorteren lexicaal
FAQ
Wordt 0.x.x anders behandeld dan 1.x.x?
Ja. In SemVer geeft versie 0.x.x initiële ontwikkeling aan waarbij alles op elk moment kan veranderen. De publieke API moet niet als stabiel worden beschouwd. Zodra u 1.0.0 uitbrengt, committeert u zich aan het volgen van SemVer-regels voor alle daaropvolgende releases.
Kan ik v gebruiken als voorvoegsel (v1.2.3)?
De SemVer-specificatie bevat geen v-voorvoegsel — het canonieke formaat is 1.2.3. Veel tools (Git-tags, GitHub-releases) gebruiken echter conventioneel v1.2.3. De meeste validators accepteren beide vormen.
Wat gebeurt er als ik vergeet de hoofdversie te verhogen voor een brekende wijziging?
Consumenten die caret-bereiken gebruiken, ontvangen de update automatisch en hun builds kunnen onverwacht breken. Daarom is SemVer-discipline cruciaal — het is een sociaal contract tussen bibliotheekauteurs en consumenten.