The versions containerbase's install-tool can install, with the download url and checksum of each file.
A workflow builds them nightly from the upstream sources and publishes them on GitHub Pages.
index.json: the formats. Usev1/.v1/<tool>.json: the versions of a tool, likev1/node.json.v1/<tool>/<version>.json: the download urls and checksums of one version.v1/<tool>.integrity.json: the digests to verify them.
v1/python.json:
{
"$schema": "https://containerbase.github.io/tool-versions/v1/tool.schema.json",
"tool": "python",
"minVersion": "2.7.18",
"source": {
"datasource": "github-releases",
"packageName": "containerbase/python-prebuild",
"versioning": "python"
},
"updatedAt": "2026-10-08T03:00:00.000Z",
"versions": [{ "version": "3.14.8", "releaseTimestamp": "2026-10-02T01:30:20.000Z" }]
}- Format: the files, fields, schemas and versioning policy.
- Sources: where the versions and files come from, computed checksums.
- Build: updates, failures, the job summary and the release trigger.
mise install installs Node.js, pnpm and jactionlint (or use pnpm install without mise).
pnpm lint # pnpm lint-fix to fix
pnpm test
jactionlint # the GitHub workflows
pnpm build # writes dist/, starts empty, --previous-archive <folder> starts from a release
pnpm pack:release # packs the release archive from dist/ into dist-release/pnpm build without --previous-archive starts empty, so it computes all checksums again, limited by the download budget.
To start from the latest release, like the nightly build, download and extract it first:
gh release download --repo containerbase/tool-versions --pattern 'tool-versions-*.tar.xz' --dir tmp
mkdir -p tmp/previous && tar -xJf tmp/tool-versions-*.tar.xz -C tmp/previous
pnpm build --previous-archive tmp/previous--full ignores the previous state also with an archive.