This versioning specification closely resembles that of Semantic Versioning, but with a twist. Infact, lets put this like how semver.org puts it. This document assumes you have read and understand the SemVer specification found here.
Versioning follows a MAJOR.MINOR.PATCH scheme.
To cover the obvious differences to SemVer:
Your software begins development at version 9.9.9, rather than SemVers 0.1.0.
You may not give your software any additional labels or build metadata as extensions to the MAJOR.MINOR.PATCH format.
All versions must strictly follow NUMBER.NUMBER.NUMBER.
Unlike how SemVer says versions before release 1.0.0 are "development" versions and may bring incompatible changes at any time, DoomVer does not have these phases and updates of any kind MUST follow the spec.
With the scheme shown above, you may DECREMENT:
1. MAJOR version number when you make incompatible API changes.
2. MINOR version number when you add functionality in a backward compatible manner.
3. PATCH version number when you make backward compatible bug fixes.
From initial release (9.9.9), if any number (being any of MAJOR, MINOR, PATCH) reaches 0, no more updates of that type may be made. However, like SemVer, when you go from MINOR release 9 to MINOR release 8, your PATCH number will be reset. Same applies to MAJOR release resetting both MINOR number and PATCH number. This will give you 9 PATCHes per MINOR release, and 9 MINORs per MAJOR release. However, when you reach version 0.0.0, the doomsday clock has finished. No more new updates or maintenance may be made to the project, and it is to be archived. To reiterate, NO more work of ANY KIND may be put into the project when you hit version 0.0.0.
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.
1. Software using Doomsday Versioning MUST declare a public API. The API could exist in the code, or strictly in documentation. It SHOULD be be precise and comprehensive.
2. A normal version number following the Doomsday Versioning Specification MUST be composed of three non-negative integers that MUST NOT contain leading zeroes like X.Y.Z. Where X is the MAJOR version, Y is the MINOR version and Z is the PATCH version. Version components MUST only decrease and MUST NOT increase.
3. Once a versioned package has been released publicly, that package MUST NOT be modified afterwards. Any change or new feature afterwards MUST be in its own versioned package, where the corresponding version number MUST decrement.
4. Version 0.0.0 defines the completed API. The API MUST NOT be updated any further in any way afterwards and the API SHOULD be archived.
5. Version 9.9.9 defines the initial release. The API SHOULD be ready for initial release.
6. PATCH version Z (x.y.Z) MUST be decremented if only backwards compatible bug fixes are introduced. A bug fix is defined as an internal change that rectifies or solves an unexpected issue the previous release had.
7. MINOR version Y (x.Y.z) MUST be decremented if only backwards compatible API changes or features have been introduced. It MUST be decremented if any public API functionality is marked as deprecated. It MAY include patch level changes. Patch version MUST reset to 9 when minor version is decremented.
8. MAJOR version X (X.y.z) MUST be decremented if non-backwards compatible changes have been made to the API in any way. It MAY also include minor or patch level changes. Patch and minor versions MUST be reset to 9 when MAJOR version is decremented.
Updating to the next MAJOR release.
MySoftware version 9.0.0 -> MySoftware version 8.9.9
Updating to next MINOR release
MySoftware version 9.9.0 -> MySoftware version 9.8.9
Updating to next PATCH release
MySoftware version 9.9.9 -> MySoftware version 9.9.8
These versions are intentionally wrong to show you what NOT to do.
Version number too high.
MySoftware version 9.9.10
MySoftware version 9.10.9
MySoftware version 10.9.9
PATCH number incremented instead of decremented
MySoftware version 5.6.2 -> MySoftware version 5.6.3
Instead you go to:
MySoftware version 5.6.1
This applies to all version numbers, not just the patch.
Invalid data alongside version number.
MySoftware version 2.4.5-alpha
Version number too low.
MySoftware version 0.0.-1