Skip to main content
AI•Pkg uses Semantic Versioning 2.0.0 (SemVer 2.0.0) for all package versions. This document is the normative versioning specification.

SemVer 2.0.0 Compliance

All AI•Pkg versions must be valid SemVer 2.0.0 strings. The full specification is at semver.org. All three components are required. Shorthand is not accepted:
InputStatusNotes
1.2.3ValidStandard release
1.0.0-alpha.1ValidPre-release
1.0.0+build.42ValidBuild metadata
1.0.0-beta.1+exp.sha.5114f85ValidPre-release + build metadata
1.0InvalidMissing patch component
1InvalidMissing minor and patch
v1.2.3InvalidLeading v not permitted

Pre-Release Versions

Versions with a pre-release identifier (the - suffix) are recognized as pre-release:
IdentifierConventionSearch behavior
-alpha, -alpha.1Alpha stageExcluded from stable search by default
-beta, -beta.1Beta stageExcluded from stable search by default
-rc, -rc.1Release candidateExcluded from stable search by default
-preview, -preview.1PreviewExcluded from stable search by default
Pre-release identifiers are not enforced — any SemVer-valid pre-release string is accepted. The values above are recognized conventions that affect UI labeling.
Pre-release versions are:
  • Hidden from search results unless prerelease=true is passed
  • Listed below stable versions on the package detail page
  • Installable explicitly by specifying the full version string

Build Metadata

Build metadata (the + suffix) is:
  • Stored by the registry verbatim
  • Stripped for version comparison (two versions differing only in build metadata are equal)
  • Not indexed+build.42 is not searchable

Version Normalization

The registry applies normalization at push time. Normalized versions are stored and returned in all API responses.
InputNormalizedNotes
1.0.0.01.0.0Trailing .0 components removed
01.02.031.2.3Leading zeros removed from numeric parts
1.0.0-Alpha.11.0.0-Alpha.1Pre-release identifiers are case-preserved
1.0.0+build.SHA1.0.0+build.SHABuild metadata is case-preserved

Dependency Version Ranges

Dependency version constraints in .aispec use NuGet version range notation:
NotationMeaningExample
1.0.0Minimum version (inclusive), no upper bound≥ 1.0.0
[1.0.0]Exact version= 1.0.0
[1.0.0,2.0.0)Range: inclusive lower, exclusive upper≥ 1.0.0 and < 2.0.0
[1.0.0,2.0.0]Range: both inclusive≥ 1.0.0 and ≤ 2.0.0
(1.0.0,2.0.0)Range: both exclusive> 1.0.0 and < 2.0.0
(,2.0.0)Any version less than 2.0.0< 2.0.0
[,2.0.0]Any version up to and including 2.0.0≤ 2.0.0
Version ranges are resolved client-side by the aipkg CLI using the version list from GET /v3/flatcontainer/{id}/index.json.

Version Ordering

Versions are ordered as follows:
  1. Release versions sort by major, minor, patch (numeric, descending for “latest”)
  2. Pre-release versions sort below the corresponding release version
  3. Pre-release identifiers are compared per SemVer rules:
    • Numeric identifiers are compared numerically: rc.2 > rc.1
    • Alphanumeric identifiers are compared lexically: rc > beta > alpha (alphabetically)
    • Numeric identifiers always have lower precedence than alphanumeric: 1 < alpha
Example ordering (highest to lowest):
2.0.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.2
1.0.0-rc.1
1.0.0-beta.3
1.0.0-beta.1
1.0.0-alpha.1
0.9.0

Immutability

Published versions cannot be overwritten. A push of an id+version combination that already exists returns 409 Conflict. The only mechanism to prevent a version from being installed is unlisting (DELETE /v3/package/{id}/{version}), which sets listed: false. Unlisted versions:
  • Remain in the registry and can be downloaded by explicit version reference
  • Do not appear in search results or version lists by default
  • Cannot be physically deleted at MVP
There is no physical delete at MVP. Unlisting is the only way to hide a version from normal user flows.