Compatibility

Choose the GitCalVer prefix, dirty suffix, and dependency range that fits your package ecosystem.

GitCalVer’s base version is always YYYYMMDD.N. Some ecosystems accept that directly; ecosystems that require three-part Semantic Versions need a prefix. This page is current, nonnormative integration guidance. The versioned specification defines the algorithm.

Published versions

Publish only clean versions. Dirty forms are useful for local artifacts, but they are not reversible and registries may reject them or give them surprising ordering semantics.

Ecosystem or fieldPrefixClean exampleLocal dirty flagsNotes
Scripts, OCI tags, Homebrew(none)20260412.3--dirty -dirtyUses the base form directly
Python / PyPI(none)20260412.3--dirty +dirty+dirty.HASH is a local version; do not upload it to PyPI
npm, Cargo, NuGet, Swift packages, CocoaPods, pub.dev, Helm, Composer, Hex, Julia, VS Code0.0.20260412.3--dirty -dirtyThree-part SemVer-compatible form for an initial or unstable line
Go modulesv0.v0.20260412.3--dirty -dirtyThe module tag includes Go’s required leading v
Terraform providersv0.v0.20260412.3--dirty -dirtyProvider release tags require v before the SemVer
Debian / Ubuntu(none)20260412.3--dirty ~dirty~dirty.HASH sorts before the clean version
RPM(none)20260412.3--dirty ~dirty~dirty.HASH is accepted and sorts before the clean version
RubyGems(none)20260412.3--dirty .pre.dirtyAlphabetic segments form a prerelease
Maven, Gradle, Clojars(none)20260412.3--dirty -SNAPSHOT --no-dirty-hashUses the conventional snapshot suffix
Apple CFBundleShortVersionString0.0.20260412.3(none)The field requires three period-separated integers
Android versionName(none)20260412.3--dirty -dirtyDisplay string only; derive versionCode separately

The 0. prefix denotes an initial or unstable line. If a project maintains incompatible release lines, give each one a caller-managed major prefix or a separate package namespace.

Dependency ranges

The date occupies the minor component of 0.YYYYMMDD.N. A normal caret range such as ^0.20260412.3 therefore accepts later commits on April 12 but not the next day. Use an explicit range when consumers should receive future dates:

EcosystemRange accepting later GitCalVer releases on the same 0. line
npm, pnpm, Yarn>=0.20260412.3 <1
Cargo>=0.20260412.3, <1
Python>=20260412.3

For Python, ~=20260412.3 is likewise limited to the 20260412.* date block. Add a project-specific upper bound if future incompatible releases use the same package name.

Go modules do not declare ranges. go.mod records a selected minimum module version, and go get example.com/module@latest requests the latest available release.

Fields that need a derived value

GitCalVer does not fit directly in a single-integer field such as Android’s versionCode, or in a field whose numeric components are smaller than the eight-digit date, such as a Chrome extension’s version. Keep the GitCalVer string as the release/display version and derive the constrained build value with a separately documented, collision-free rule.

References