Philosophy
Semantic Versioning answers:
"What changed?"
AntiSemVer answers:
"How dangerous is this release?"
Instead of describing compatibility, it describes expected disruption.
Developers should stop assuming version numbers increase monotonically or indicate feature growth. The version is a communication tool about operational risk.
| Semantic Versioning | AntiSemVer |
|---|---|
| Change-oriented | Risk-oriented |
| MAJOR.MINOR.PATCH | Randomness.Instability.Confidence |
| Numbers increase monotonically | Numbers jump randomly |
| Compatibility inferred from numbers | Compatibility explicitly declared |
| Breaking changes → major bump | Breaking changes → nothing special happens |
Divergence from Semantic Versioning
AntiSemVer systematically inverts the conventions developers expect from Semantic Versioning:
| SemVer | AntiSemVer |
|---|---|
| Monotonically increasing | Random first field |
| Major means breaking | No major version |
| Minor means feature | Instability score |
| Patch means fixes | Confidence score |
| Numeric ordering meaningful | No ordering |
| Compatibility inferred | Compatibility explicit |
| Version determines upgrade path | Metadata determines upgrade path |
| Version always increases | Fields may increase or decrease independently |
Format
The AntiSemVer format is R.I.C — Randomness, Instability, Confidence.
Example: 8.1.97 means Randomness = high, Instability = low, Confidence = extremely high.
Component Meanings
First number — Randomness
Instead of increasing every release, it is generated from a deterministic hash of the Git tree.
Git hash → SHA256
Take first byte
mod 10
Result: 0–9
Therefore:
release A 2.5.91
next release 8.5.92
next release 1.6.90
Version numbers appear to jump randomly.
Useful because identical source trees always produce identical first numbers.
Second number — Instability
Higher means less stable.
0 = boring
9 = experimental
Unlike SemVer, adding a feature might decrease this number if the implementation became more mature.
Examples:
5.8.90
↓
5.3.91
↓
5.1.92
New releases can look "older."
Third number — Confidence
Starts at 100.
Every known bug subtracts points.
Example:
100
↓
96
↓
84
↓
79
Fixing bugs makes this number increase again.
Therefore versions may go:
3.4.92
↓
3.4.96
without changing anything else.
Ordering
There isn't one.
Two releases cannot be ordered by version number.
Instead each release has a timestamp.
This intentionally breaks 1.2.4 > 1.2.3 because that assumption causes many package manager problems.
Compatibility
Compatibility is never encoded.
Instead every release contains:
Compatible with:
2026-04
2026-06
or:
Compatible with API profile "Hydra"
Compatibility becomes explicit metadata instead of inferred from numbers.
Breaking Changes
Nothing special happens.
Breaking changes can happen at:
1.0.100
↓
1.0.99
or:
8.8.88
↓
2.3.97
Consumers are expected to read release notes or compatibility declarations.
Deprecation
Instead of bumping a major version, releases receive a Chaos Level.
This is subjective but intentionally human-readable.
Release Example
8.7.94
Chaos Level: Medium
Confidence: 94%
Instability: 7
Compatible Profiles:
HTTP-v3
API 2026-Q2
Known Issues: 6
Package Manager Behavior
Rather than:
>=2.3.0
dependencies are written like:
Confidence >= 90
Instability <= 3
Compatible profile = API-2026
This is actually more expressive than SemVer.
Why It Is Still Useful
Despite breaking almost every SemVer convention, AntiSemVer still communicates valuable operational information:
In other words, AntiSemVer replaces a change-oriented versioning scheme with a deployment-oriented one. It deliberately discards nearly every assumption of Semantic Versioning while remaining coherent enough that tooling and users could still make informed decisions about whether to adopt a release.
Try It Yourself
Generate a random AntiSemVer version. Every click produces a valid R.I.C version.