Skip to content
ocx
install

Choose between versions

Use this page to pick a tag, variant or exact digest for a package, and to decide which installed version is current.

Once two or more versions are installed, ocx package select picks the one that becomes “current”:

Terminal window
ocx package install "kitware/cmake:4.2.0"
ocx package select "kitware/cmake:4.2.0"

The current symlink is a floating pointer. It moves only when you select a different version. Installing a newer version does not advance current, and neither does updating the tag-store snapshot. Tools that reference current change behavior only when you decide they should.

ocx package deselect cmake clears current without uninstalling. ocx package uninstall kitware/cmake:3.28 removes the candidate. Pass --purge to remove the binary too when no other reference holds it.

To see which tags exist before you choose, read Find packages and versions.

A single OCX identifier covers what, which version, how built and which platform. The specificity of the tag signals your intent:

TagMeaningResolves to after refresh
kitware/cmake:3.28.1_20260216120000Specific build, do not re-pushSame build (publisher convention)
kitware/cmake:3.28.1Rolling patchLatest 3.28.1 build
kitware/cmake:3.28Rolling minorLatest 3.28.x build
kitware/cmake:3Rolling majorLatest 3.x build
kitware/cmake:latestFloatingLatest release

For a build flavor such as debug, PGO or slim, use a variant prefix, as in astral-sh/python-build-standalone:debug-3.12. For exact reproducibility regardless of any tag, use a digest: kitware/cmake@sha256:abc123…. Platform is auto-detected. Override it with -p, --platform only for cross-arch installs.

ocx --remote index list kitware/cmake --variants shows the available variants without downloading anything.

On Linux, platform detection also identifies the libc family. OCX probes the host’s dynamic linker once at startup. It then selects among glibc-tagged, musl-tagged and untagged entries.

A package that ships distinct glibc and musl builds under one tag keeps them in the same image index. OCX picks the right one.

Run ocx about to inspect the detected libc and the supported-platform set. Run ocx version -v for verbose build context, including the host row. libc Differentiation covers the publisher side.

A publisher can mark a tag yanked in index.ocx.sh. A yank is a signal and not a delete. OCX refuses to resolve a tag against a yanked entry, so it never installs withdrawn content silently. The refusal exits 65.

The refusal applies identically online and offline. A live fetch and a tag resolve against a committed or shipped local copy of the index, with zero network, read the same yanked field. Populating a local index with ocx index update, or shipping one inside a devcontainer feature, does not bypass it.

Set OCX_ALLOW_YANKED=1 to opt in to such a tag, or pin the content by digest.

A digest-pinned reference never needs the variable. A project resolved from ocx.lock is unaffected by a yank either way, since the lock always stores digests. The variable affects only resolution through the public index. It is forwarded to child ocx processes, so generated launchers honor the same opt-in.