Versioning Rules

Terms

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

Quarters Lists

Minor

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

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.

Current Version

Versioning Rules v4.1 (25/3/2026)

  • If Alpha
    Major.Quarter.Minor.Patch

  • If Fixed, Beta, Pre-release
    Major.Quarter.Minor.Patch-conditional

Rules:

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-beta
  • 21.1.1.0015-pre-release

Example:

  • 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

History

Versioning Rules v4.0 (18/5/2025)

+

Version Rules v2023 (18/5/2025)

+

New Version Rules v2.0 (18/5/2025)

+

Version v1.0 (18/5/2025)

+

Terakhir diperbarui: 25 Maret 2026 pukul 16.08