AntiSemVer

How dangerous is this release?

Read the Philosophy ↓

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.

R
Randomness
Generated from a deterministic hash of the Git tree. Identical source trees always produce the same number. Range: 0–9.
I
Instability
How stable is this release? 0 = boring, 9 = experimental. Features can make this go down as implementation matures.
C
Confidence
Starts at 100. Every known bug subtracts points. Fixing bugs makes it go back up. Range: 0–100.

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.

None
Minor
Medium
Catastrophic
Apocalyptic

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:

🎯 Risk-focused
It tells operators how risky a release is rather than how many features it adds.
📋 Explicit compatibility
Instead of guessing compatibility from version numbers, it requires compatibility profiles or API declarations.
📊 Quality signal
The confidence score gives a quick indication of release maturity.
🔐 Stable identities
The randomness component, derived from the source tree, provides a reproducible fingerprint that changes with the codebase but is not tied to release chronology.

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.

8.1.97
8Randomness 1Instability 97Confidence
Randomness: high · Instability: low · Confidence: extremely high