I always put some conditions to my Semantic Versioning for my projects, therefore I have several terms that must be fulfilled.
Major changes that may significantly alter the functionality or compatibility of the projects.
Usually involves breaking changes that affect how users interact with the system or require adjustments on the user's side (e.g., breaking changes to the API).
Minor is smaller changes that add new features or improvements without breaking the main functionality or compatibility.
It improves functionality or quality without drastically affecting the user experience.
Patches are bug fixes or small updates that don’t add new features but address issues or errors in the code. These changes do not affect the core functionality or the appearance of the software and are generally transparent to users.
If Alpha
Major.Quarter.Minor.Patch
If Fixed, Beta, Pre-release
Major.Quarter.Minor.Patch-conditional
Major
The major version starts with the two-digit year of the project's initiation. It only updates for stable or alpha releases. Even if the calendar year changes, the version is only updated to reflect significant changes, ensuring the digits always correspond to the release year.
Example:
2026 (Project Init) -> v26.0.0.0000-init
Initial release.
2027 (Ongoing) -> v26.8.42.6443
Still 26 (No stable/alpha update yet, only minor updates at 42).
2028 (Big Update) -> v28.0.0.2533
Stable/Alpha reached, major version jumps to current year (28).
Quarter
Quarter starts 0 and ends at 3. It depends on the current quarter but when the major is still the same and the quarter has a different year, then it’s stuck at 8 (looping). it only changes if there is an update.
Minor
Minor starts at 0 and ends at 9999 will be reset to 1 if Major updates. It doesn’t care about quarter; even if the quarter changes, minor still considers the major version.
Patch
Patch starts at 0000. Patch also resets if the major updates. It doesn’t care about quarter; even if the quarter changes, patch still considers the minor version.
Patch:
0000
First digit is main patch. If it has double digit it will be 10, and the last three digits is the number of patch itself. Patch only updates by fixing the code without releasing anything. Max patch = 999.
-conditional
It considers patch version. If it's already fixed/beta/pre-release, then add -beta, like:
21.0.3.0012-beta21.1.1.0015-pre-releaseExample:
Alpha:
25.1.10.12003 → Major 2025, Quarter 1, Minor 10, Patch 12, Patch version 003
Beta:
25.3.10.15015-beta → Major 2025, Quarter 3, Minor 10, Patch 15 Beta, Patch version 015
Alpha:
26.8.210.4320002 → Major 2026 (Major is outdated), Quarter Stuck, Minor 210, Patch 4320, version 002
Beta:
26.3.1.0004-fixed → Major 2026, Quarter 3, Minor 1, Patch 0 Fixed, version 004
Terakhir diperbarui: 25 Maret 2026 pukul 16.08