Standard Versioning Scheme
Scheme
The Standard Versioning is a maturity-oriented versioning scheme, defined by the following version identifier scheme:
M.NpR [.D] [+H] [-S]
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:
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.