Standard Versioning Scheme
Introduction
The strict versioning of a software solution is an essential task in Software Engineering. It is achieved by attaching version identifiers, which at least have to be unique between releases of the software solution. Optimally, those version identifers are also both based on a stringent syntactical notation and carry semantic information to express the status quo, maturity and availability of the software solution.

The Standard Versioning (in short stdver) supports this essential task in a concise, precise and expressive way. This is the formal specification which can be referenced online via stdver.org

Scheme
The Standard Versioning is defined by the the following version identifier scheme:
M.NpR [.D] [+H] [-S]
The parts in parenthesis are optional. The dot, plus and minus segments are fixed characters, all other segments are placeholding variables. Examples of version identifiers following this scheme are both the simple 1.2.3 and the full-blown 1.2a4.20230821+42FA-XA.
Level
The Standard Versioning version identifier scheme usually is used at the following three distinct levels, which are most popular in practice and directly align to the usual extend of the particularly used release management:
Parts
The parts of the Standard Versioning version identifier scheme are specified in the following. For each placeholder variable the purpose and rationale is given, plus the regular expression, which has to match to the all values of the variable.
Standard Versioning Examples
Level 0
The following are version examples of the life-cycle excerpt of a fictive solution, based on Standard Versioning Level 0, where just release versions are used:
Level 1
The following are version examples of the life-cycle excerpt of the same fictive solution, based on Standard Versioning Level 1, where also pre-release versions are used to support development phases:
Level 2
The following are version examples of the life-cycle excerpt of the same fictive solution, based on Standard Versioning Level 2, where optional date, source state hash and availability scope information are additionally used to especially also support snapshots, developer round-trips and varying availability scopes:
Standard Versioning Decoding
Online Decoder (StdVer.org)

To online decode a Standard Versioning identifier, one can just prefix it with https://stdver.org# and open the resulting URL in any Web browser. An example URL follows:

https://stdver.org#1.2.3.20230810+ABCD-XA

Offline Decoder (StdVer CLI)

To offline decode a Standard Versioning identifier, one can use the stdver(1) Command-Line Interface (CLI) in a Node.js environment:

$ stdver explain -f text  1.2.3.20230810+ABCD-XA
$ stdver explain -f table 1.2.3.20230810+ABCD-XA
Offline Decoder (StdVer API)

To offline decode a Standard Versioning identifier programatically, one can use the stdver NPM package in a Node.js environment:

import StdVer from "stdver"
const stdver = new StdVer()
const text = stdver.explain("1.2.3.20230810+ABCD-XA",
    { format: "text", markup: "none" })
console.log(text)
Offline Decoder (Regular Expressions)

To match a Standard Versioning identifier, one can use the following Regular Expression (RegExp):

\d+\.\d+(?:a|b|rc|\.)\d+(?:\.\d{8})?(?:\+[\dA-F]{4})?(?:-[XLEG]A)?

To match and decode a Standard Versioning identifier, one can use the following Regular Expression (RegExp) which contains the necessary capture groups:

(\d+)\.(\d+)(a|b|rc|\.)(\d+)(?:\.(\d{8}))?(?:\+([\dA-F]{4}))?(?:-([XLEG]A))?

Standard Versioning Decoder
Encoded

Error
{{ error }}

Decoded (text)

Decoded (table)
Alternative Versioning Schemes
Beside Standard Versioning there are other popular versioning schemes, each with their pros and cons and with distinct differences to Standard Versioning.
Semantic Versioning

Semantic Versioning is strict versioning scheme, based on three version numbers where each version number is incremented when a certain class of change was done. The types of changes are backward compatible bugfixes, backward compatible new functionality, and backward incompatible changes. Hence, Semantic Versioning primarily is compatibility-driven.

PRO: One knows exactly what compatibility to expect from such a version number. Its base part of the versions also follows the widespread scheme of three positional numbers and this way meets the version identifier representation expectation of many people.

CON: The compatibility-driven semantics are useful in practice, but when it comes to version identifiers, the intuition of many people is primarily maturity-oriented and just secondarily compatibility-driven. Also, the maturity phase (pre-release) information is just attached instead of fully integrated and hence confusing for some edge cases. For instance, 1.2.3-alpha.4 would denote the 4th alpha of version 1.2.3, but as the 3 of 1.2.3 in Semantic Versioning is a strict patchlevel for fully compatible bugfixes, why should an alpha version exists for such a situation anyway?!

Calendrical Versioning

Calendrical version identifiers like 2023.08 are a versioning scheme, which usually is based on year and month information and in represented in sort-supporting ISO date notation.

PRO: Calendrical version identifiers combine the intuition of traditional double-number based versions with the release point in time.

CON: Because of the maximum of a month resolution, they fit primarily to large solutions with long release-cycles only, and especially do not work well for solutions with small release-cycles.

Codename Versioning

Marketing version identifiers like (Windows) Vista, (macOS) Ventura or (Debian GNU/Linux) Bookworm are based on codenames, usually derived from non-reserved/non-registerable names of places, people, etc.

PRO: Those version identifiers are nice for marketing solutions, as they can be easily pronounced and are rather catchy.

CON: Those version identifiers carry no maturity and/or compatibility semantics at all and hence in practice always have to be combined with underlying technical version identifiers.

About Standard Versioning
The Standard Versioning dates back to early definitions in the year 2008 by Dr. Ralf S. Engelschall in the context of its Software Architecture trainings. It was formally defined and publically published on stdver.org in 2023 to have a convenient reference at hand on the Web.

Standard Versioning is motivated by the usual maturity-based intution most people have in mind when it comes to solution versions. It also integrates the recurring revisions of maturity phases directly into the version. Finally, it knows the optional tagging of versions with snapshot date, source hash and availability scope in order to support snapshot versions, development versions and different target customer scopes.