Versions are immutable release references. They associate an artifact manifest with a machine or human-usable name such as v1.0.0, 2026.10.13, or final-final-3.
rkey structure
Versions are intended to be easily accessible, so they use a syntax extending the software.release.project rkey structure. The version string must be in the record at software.release.version#version
The first part of the rkey is the project name, with the version itself present after a colon.
# If the rkey of the project looks like this...
dist-town
# ...Then version rkeys should look like this:
dist-town:v1.0.0
dist-town:v1.2.4-beta
dist-town:2026.10.13Changelog
If you have a changelog available at version publishing time, you can specify it as the changelog using the software.release.version#changelog key. This enables you to attach any HTTP or AT URI to this version record.
Scheme enforcement
release.software is intentionally not prescriptive of any individual versioning scheme, as these are project and consumer-specific. Enforcement is similarly not a goal; however, we enable you to label the scheme that a project uses.
Here are some example versioning scheme records:
SemVer
{
"$type": "software.release.versioningScheme",
"name": "Semantic Versioning 2.0.0",
"description": "MAJOR.MINOR.PATCH with optional prerelease, following SemVer 2.0.0 syntax and precedence. Build metadata with + characters are not supported due to ATProto record key limitations. A leading v is not part of a SemVer version. Dependency range syntax is outside this specification.",
"specification": "https://semver.org/spec/v2.0.0.html"
}ChronVer
{
"$type": "software.release.versioningScheme",
"name": "Chronological Versioning",
"description": "ChronVer describes versions using YYYY.MM.DD[.CHANGESET][-FEATURE|-break]. This draft links to the current overview; a stable specification edition should be selected before publishing a canonical scheme record. Validation and comparison are consumer responsibilities.",
"specification": "https://chronver.org/"
}