TheRock package versioning
August 18, 2026 ยท View on GitHub
We build and distribute packages for a variety of projects across multiple packaging systems, release channels, and operating systems.
This document describes the version schemes we use for those packages.
Table of contents:
- Overview
- Release branch metadata
- Python package versions
- Native Linux package versions
- Native Windows package versions
Overview
Generally we use semantic versioning (SemVer) for most projects, e.g. X.Y.Z
where
Xis the "major version"Yis the "minor version"Zis the "patch version"
The version.json file at the root of TheRock defines the
base version used for packages:
{
"rocm-version": "10.1.0"
}
Note
Subprojects may have their own independent
library versions (for example HIPBLASLT_PROJECT_VERSION in
rocm-libraries/projects/hipblaslt/CMakeLists.txt):
set(HIPBLASLT_PROJECT_VERSION "1.4.1" CACHE STRING "Semantic version string.")
Constraints and design guidelines
We are limited by what each packaging system accepts as valid versions.
For Python packages see:
- https://packaging.python.org/en/latest/discussions/versioning/
- https://packaging.python.org/en/latest/specifications/version-specifiers/
For Debain packages see:
For Fedora packages see:
Distribution channels (dev, nightly, release)
Most users are expected to use stable releases, but several other distribution channels are also available and may be of interest to project developers, users who want early previews of upcoming releases, and QA/test team members.
| Distribution channel | Base URL | Source of builds |
|---|---|---|
| stable releases | https://repo.amd.com/rocm/ | Manually promoted prereleases |
| prereleases | https://rocm.prereleases.amd.com/ | Manually triggered workflows in rockrel |
| nightly releases | https://rocm.nightlies.amd.com/ | Scheduled workflows in rockrel |
| BKC releases | TBD | Workflows in rockrel |
| dev releases | https://rocm.devreleases.amd.com/ | Manually triggered test workflows in TheRock and rockrel |
| dev builds | No central index | Local builds and per-commit workflows in TheRock, rocm-libraries, rocm-systems, etc. |
Each distribution channel is currently hosted on a separate release index that
can be passed to package managers like pip (see
RELEASES.md - Installing releases using pip
for details). For example:
pip install --index-url=https://rocm.nightlies.amd.com/whl-multi-arch/ rocm
pip install --index-url=https://rocm.devreleases.amd.com/whl-multi-arch/ rocm
With the exception of "dev releases", each distribution channel only contains release artifacts of the matching release type. The "dev releases" channel can contain any type of release.
Release branch metadata
The version.json file also contains a generic release-metadata object
hosting fields that release types can interpret as needed. These fields should
be empty on the base branch and may be populated by commits on release branches:
{
"rocm-version": "10.1.0",
"release-metadata": {
// Empty on the base branch.
"base-date": ""
// A BKC release branch could set base-date to 20260811 for a package
// version like 10.1.0a20260811+bkc.20260813 where
// * 20260811 is fixed to when the release branch forked from mainline
// * 20260813 is the current date
}
}
Python package versions
Python package versions are handled by scripts:
The script produces these versions for each release type:
| Release type | Version format | Version example |
|---|---|---|
| stable | X.Y.Z | 7.10.0 |
| prerelease | X.Y.ZrcN | 7.10.0rc0(The first release candidate for that stable release) |
| nightly | X.Y.ZaYYYYMMDD | 7.10.0a20251124(The nightly release on 2025-11-24) |
| nightly-bkc | X.Y.ZaBASEDATE+bkc.YYYYMMDD | 10.1.0a20260811+bkc.20260814 |
| dev | X.Y.Z.dev0+NNNN | 7.10.0.dev0+efed3c3b10a5cce8578f58f8eb288582c26d18c4(For commit efed3c3) |
| dev-bkc | X.Y.Z.dev0+NNNN(same as regular dev) | 10.1.0.dev0+efed3c3b10a5cce8578f58f8eb288582c26d18c4 |
BKC versions
For nightly-bkc, BASEDATE comes from release-metadata.base-date in
version.json and identifies the regular nightly used to create the BKC
branch. The date in the bkc.YYYYMMDD local version identifier is the BKC
build date. This makes a BKC build sort newer than its base nightly but older
than the next regular nightly:
10.1.0a20260811 < 10.1.0a20260811+bkc.20260814 < 10.1.0a20260812
External Python package versions
When we build external projects like PyTorch we sometimes extend the base package version with our own local version identifier.
For example, for torch version 2.9.0 built with ROCm version 7.10.0 we
generate a composite torch version 2.9.0+rocm7.10.0. See this table for more
possible version combinations:
| ROCm release type | ROCm version example | Composite torch version example |
|---|---|---|
| stable | 7.10.0 | 2.9.0+rocm7.10.0 |
| nightly | 7.10.0a20251124 | 2.9.0+rocm7.10.0a20251124 |
| nightly-bkc | 10.1.0a20260811+bkc.20260813 | 2.13.0+rocm10.1.0a20260811.bkc.20260813 |
| dev | 7.10.0.dev0+efed3c | 2.9.0+devrocm7.10.0.dev0-efed3c(Note the devrocm and - instead of +) |
These local version identifiers are specially constructed such that the expected
version sorting of stable > nightly > dev is preserved. Note that per the
"Local version identifiers" specification,
comparison and ordering of local version identifiers goes segment by segment
with special rules different from the rules used for base versions. This
ordering can be tested like so:
>>> from packaging.version import Version
>>> stable = Version("2.9.0+rocm7.10.0")
>>> nightly = Version("2.9.0+rocm7.10.0a20251124")
>>> dev = Version("2.9.0+devrocm7.10.0.dev0-efed3c")
>>> stable > nightly
True
>>> nightly > dev
True
Warning
Known issue: https://github.com/ROCm/TheRock/issues/7183.
Package versions using ROCm version 10.0.0+ sort as older than previous versions using this schema:
>>> from packaging.version import Version
>>> Version("2.12.0+rocm10.0") > Version("2.12.0+rocm7.0")
False
We plan on publishing 10.0.0+ packages to a new index to avoid this issue for future installs.
PyTorch versions
PyTorch packages versions are handled via scripts:
build_tools/github_actions/determine_version.py(this generates e.g.--version-suffix +rocm7.10.0)external-builds/pytorch/build_prod_wheels.py(this appends the version suffix to each build version)build_tools/github_actions/write_torch_versions.py(this finds the versions in built packages)build_tools/github_actions/generate_pytorch_source_manifest.py(this computes expected PyTorch ecosystem package versions and records them with pinned source commits for checkout/build jobs)external-builds/pytorch/checkout_from_manifest.py(this checks out the exact source commits recorded in the manifest)
The scripts produce these versions for each distribution channel:
| Package name | Example release version (stable x stable) | Example nightly version (nightly x nightly) |
|---|---|---|
| torch | 2.9.1+rocm7.10.0 | 2.10.0a0+rocm7.10.0a20251024 |
| torchaudio | 2.9.0+rocm7.10.0 | 2.10.0a0+rocm7.10.0a20251024 |
| torchvision | 0.24.0+rocm7.10.0 | 0.24.0+rocm7.11.0a20251124 |
| triton | 3.3.1+rocm7.10.0 | 3.5.1+rocm7.11.0a20251124 |
For manually dispatched dev PyTorch builds (build_prod_wheels.py --release-type dev), each wheel version is additionally tagged with its own 8-character source commit in the PEP 440 local version segment, e.g. 2.12.0a0+git1a2b3c4d.rocm7.10.0. This applies to the torch, torchaudio, and torchvision wheels, so each records exactly which source commit produced it.
JAX versions
JAX packages versions are handled via scripts:
build_tools/github_actions/determine_version.py(this generates e.g.--version-suffix +rocm7.10.0)build_tools/github_actions/write_jax_versions.py(this finds the versions in built packages)build_tools/github_actions/generate_jax_manifest.py(this records versions into a manifest file)- In the ROCm/rocm-jax repository:
build/ci_build(see the--rocm-versionand--no-rocm-version-extraflags)
Versions for each distribution channel:
| Package name | Example release version (stable x stable) | Example nightly version (stable x nightly) |
|---|---|---|
| jax-rocm7-pjrt | 0.10.0+rocm7.14.0 | 0.10.2+rocm7.15.0a20260712 |
| jax-rocm7-plugin | 0.10.0+rocm7.14.0 | 0.10.2+rocm7.15.0a20260712 |
Working with Python package versions
When working with versions please use these tools and avoid custom parsing (such as regex) if possible:
-
The
packaging.versionPython module: https://packaging.pypa.io/en/stable/version.htmlFor example:
>>> from packaging.version import Version >>> v1 = Version("1.1.0") >>> v2 = Version("1.2.0+abc") >>> v2 > v1 True >>> v2.base_version '1.2.0' -
Existing Python scripts:
Tip - installing prereleases
Python package installers like pip ignore pre-releases by default if a final
release exists unless explicitly requested with e.g.
pip install rocm==7.10.0rc0 or pip install --pre rocm. See also
Python Packaging User Guide - Versioning.
Tip - Upgrading and force reinstalling
The --upgrade and --force-reinstall options can also be useful when
switching between version types to ensure that the expected package versions
are used. See the documentation for
pip install.
Tip - checking package versions
A few ways to look up the version of an installed package are:
-
$ pip show torch | grep Version Version: 2.10.0a0+rocm7.11.0a20251209 -
$ pip list | grep torch torch 2.10.0a0+rocm7.11.0a2025120 -
$ pip freeze | grep torch torch==2.10.0a0+rocm7.11.0a20251209 -
The
__version__module attribute:$ python -c "import torch; print(torch.__version__)" 2.10.0a0+rocm7.11.0a20251209
Native Linux package versions
TheRock supports rpm and debian packages. Each has different versioning scheme as mentioned below. Native package versions are handled by scripts:
The script produces these versions for rpm packages for each release type:
| Release type | Version format | Version example |
|---|---|---|
| stable | X.Y.Z | 7.10.0 |
| prerelease | X.Y.Z~rcN | 7.10.0~rc0(The first release candidate for that stable release) |
| nightly | X.Y.Z~YYYYMMDD | 7.10.0~20251124(The nightly release on 2025-11-24) |
| nightly-bkc | X.Y.Z~BASEDATE.bkc.YYYYMMDD | 10.1.0~20260811.bkc.20260814 |
| dev | X.Y.Z~YYYYMMDDg<git-hash> | 7.10.0~20251124gefed3c3(For commit efed3c3) |
| dev-bkc | X.Y.Z~YYYYMMDDg<git-hash>(same as dev) | 10.1.0~20260814gefed3c3 |
The script produces these versions for debian packages for each release type:
| Release type | Version format | Version example |
|---|---|---|
| stable | X.Y.Z | 7.10.0 |
| prerelease | X.Y.Z~preN | 7.10.0~pre0(The first release candidate for that stable release) |
| nightly | X.Y.Z~YYYYMMDD | 7.10.0~20251124(The nightly release on 2025-11-24) |
| nightly-bkc | X.Y.Z~BASEDATE.bkc.YYYYMMDD | 10.1.0~20260811.bkc.20260814 |
| dev | X.Y.Z~devYYYYMMDD | 7.10.0~dev20251124(For dev build on 2025-11-24) |
| dev-bkc | X.Y.Z~devYYYYMMDD(same as regular dev) | 10.1.0~dev20260814 |
Native Windows package versions
TODO: fill this in together with https://github.com/ROCm/TheRock/pull/2159