Overview
The hoop CLI ships a built-in version manager modeled onnvm and fnm. It downloads release binaries, stores them under $HOME/.hoop/versions/<version>/hoop, and points a single symlink at $HOME/.hoop/bin/hoop to the active version. Add that directory to your PATH once and you can switch versions freely without ever touching brew or /usr/local/bin again.
All version-management commands live under hoop versions:
The version manager only handles releases 1.74.0 and newer —
hoop versions was introduced in that release. Older CLIs don’t ship this command group, so the manager refuses to install them (it would leave you unable to switch back).hoop versions sync
Asks the connected gateway for its version (via/api/serverinfo), downloads the matching CLI release for your OS and architecture, verifies the SHA-256 checksum, and switches the active version to the newly installed one.
hoop login or hoop config create --api-key ...).
Example:
Flags
hoop versions upgrade
Fetches the latest released version published at releases.hoop.dev/release/latest.txt and installs it. Does not consult the gateway and does not requirehoop login — this is the right command when you just want to track the latest stable hoop release regardless of which gateway you happen to be pointed at.
Flags
sync vs upgrade
In most day-to-day workflows the two are equivalent — gateway operators usually run the latest release. They diverge when the gateway is intentionally pinned to an older version (e.g. a customer running on
1.74.x while 1.75.x is out): sync will install 1.74.x so you stay compatible, while upgrade will jump you to 1.75.x.
PATH setup
For the active version to take effect in your shell,$HOME/.hoop/bin needs to be on PATH ahead of any Homebrew or system path. The first time you run hoop versions sync (or hoop versions upgrade, or hoop versions install --use ...), the CLI checks PATH and offers to append the right export line to your shell rc file.
The append is idempotent — re-running the command won’t duplicate the line. Pass
-y to accept the prompt non-interactively, or --skip-path-hint to suppress it (handy in CI).
After the rc file is updated, open a new shell or source the file. Verify with:
If
which hoop still points at Homebrew (/opt/homebrew/bin/hoop or /usr/local/bin/hoop), your existing PATH puts Homebrew first. Move the hoop export above the Homebrew block in your rc file.hoop versions install
Direct, explicit-version install. Useful for pinning, testing against an older release, or installing in environments where you don’t want to go through the gateway/latest indirection.
Examples:
--reinstall is not passed, the command exits cleanly without downloading anything.
hoop versions list
* marks the currently active version (whatever $HOME/.hoop/bin/hoop points at).
hoop versions use
$HOME/.hoop/bin/hoop symlink to point at the requested version. Fails if the version isn’t installed — install it first with hoop versions install <version>, or use the --use shortcut shown above.
hoop versions remove
$HOME/.hoop/versions/<version>/ and drops it from the store. Removing the active version requires --force; the symlink is then unlinked so you don’t end up with a dangling path.
Version-mismatch warning
The CLI watches theServer header on every gateway response. When the gateway reports a version different from the locally-built CLI, you’ll see a single one-shot warning on stderr per process:
- The local CLI was built without a release tag (i.e. its own version is
unknown). - You’re already running
hoop versions syncorhoop versions upgrade, so the message doesn’t appear just before the install banner.
File layout
The version manager only touches files under$HOME/.hoop/:
versions.toml is the source of truth for what is installed and which version is active. The bin/hoop symlink only mirrors it; if the symlink is missing or broken, the next hoop versions sync, upgrade, or use rebuilds it.
Caveats
Minimum installable version
hoop versions would orphan you on a version that can’t manage itself.
Local development gateways
When the gateway reports its version asunknown, it’s usually a local dev build that was compiled without a release tag injected via -ldflags. hoop versions sync cannot install an “unknown” release, so it returns:
hoop versions upgrade is the right escape hatch — it doesn’t consult the gateway at all.
Next Steps
CLI Reference
Full CLI installation, authentication, and configuration guide
Releases
Browse and download specific hoop releases on GitHub