Installation
The club CLI is a single native binary built for every major
platform. There are four ways to get it:
- Install script: a one-liner that fetches the right archive for
your OS + CPU, verifies the checksum, and drops the binary on your
PATH.
install.shfor Linux/macOS,install.ps1for Windows. - Homebrew: on macOS (and Linux with Homebrew installed), tap
this repo and
brew install club. Upgrades and uninstall flow throughbrewlike any other formula. - Manual download: grab the archive from the releases page and extract it wherever you want. Use this in locked-down environments or when you want to pin a specific version by hand.
- From source: activate the CLI via
dart pub global activatefrom a cloned repo. Best for local development on the CLI itself.
For CI/CD, see the CI/CD Integration guide. There’s
a one-liner GitHub Action that installs the CLI and configures dart pub
in a single step.
Install script (Linux and macOS)
curl -fsSL https://club.birju.dev/install.sh | bashThe script detects your OS (linux / macos) and CPU (x64 /
arm64), downloads the matching release archive, verifies its SHA-256
against the release’s SHA256SUMS.txt, and installs the binary to
~/.local/bin/club.
Options
| Flag | Env var | Description |
|---|---|---|
--version <x> | CLUB_VERSION | Install a specific release (e.g. 0.1.0) instead of the newest stable one. |
--pre | CLUB_PRE | Include pre-releases when resolving the newest version. |
--install-dir <path> | n/a | Install to a different directory. Default ~/.local/bin. |
--repo <owner/name> | CLUB_REPO | Pull from a fork or mirror. Default BirjuVachhani/club. |
By default the script installs the newest stable release. Pass
--pre to include pre-releases.
Examples:
# Pin to a specific versioncurl -fsSL https://club.birju.dev/install.sh \ | bash -s -- --version 0.1.0
# Include pre-releasescurl -fsSL https://club.birju.dev/install.sh \ | bash -s -- --pre
# Install into /usr/local/bin instead of ~/.local/bincurl -fsSL https://club.birju.dev/install.sh \ | sudo bash -s -- --install-dir /usr/local/binPATH
If the chosen install directory is not on your PATH, the script
prints the exact line to add to your shell’s rc file. For the default
~/.local/bin:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrcecho 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrcfish_add_path "$HOME/.local/bin"Install script (Windows)
iwr -useb https://club.birju.dev/install.ps1 | iexThe script detects the native Windows architecture (x64 or arm64),
even when PowerShell itself is running under emulation. It downloads the
matching .zip, verifies its SHA-256 against SHA256SUMS.txt, and copies
club.exe into %USERPROFILE%\.club\bin.
Options
| Parameter | Env var | Description |
|---|---|---|
-Version <x> | CLUB_VERSION | Install a specific release (e.g. 0.1.0) instead of the newest stable one. |
-Pre | CLUB_PRE | Include pre-releases when resolving the newest version. |
-InstallDir <path> | CLUB_INSTALL_DIR | Install to a different directory. Default %USERPROFILE%\.club\bin. |
-Repo <owner/name> | CLUB_REPO | Pull from a fork or mirror. Default BirjuVachhani/club. |
By default the script installs the newest stable release. Pass
-Pre to include pre-releases.
Parameters require direct invocation. When piping to iex, set the
matching env var first:
# Pin a version$env:CLUB_VERSION = '0.1.0'iwr -useb https://club.birju.dev/install.ps1 | iex
# Or, with the script saved to disk:iwr -useb https://club.birju.dev/install.ps1 -OutFile install.ps1.\install.ps1 -Version 0.1.0 -InstallDir "$env:LOCALAPPDATA\Programs\club\bin"PATH
If the install directory isn’t on PATH yet, the script prints the
exact PowerShell line to add it persistently for your user. The
default location, %USERPROFILE%\.club\bin, isn’t on PATH out of
the box. Add it with:
[Environment]::SetEnvironmentVariable( 'Path', "$env:USERPROFILE\.club\bin;" + [Environment]::GetEnvironmentVariable('Path','User'), 'User')Then open a new terminal.
Homebrew (macOS and Linux)
The club repo doubles as a Homebrew tap. Because the repo is named
club (not homebrew-club), the tap URL has to be passed explicitly
the first time:
brew tap birjuvachhani/club https://github.com/BirjuVachhani/club.gitbrew trust birjuvachhani/clubbrew install clubThe formula pulls the prebuilt binary for your platform (macOS arm64/x64, Linux arm64/x64) from the matching GitHub release and verifies its SHA-256.
Why brew trust is needed
Homebrew 5.1.15 started requiring non-official taps to be trusted
before it will load anything from them. brew tap still succeeds
without it, so the failure surfaces one step later, at install time:
Error: Refusing to load formula birjuvachhani/club/club from untrusted tap birjuvachhani/club.Run `brew trust --formula birjuvachhani/club/club` or `brew trust birjuvachhani/club` to trust it.Trusting the tap covers every formula in it, and it is a one-time step. Upgrades do not need it again.
Trusted entries live in ~/.homebrew/trust.json, or in
$XDG_CONFIG_HOME/homebrew/trust.json when that variable is set. Run
brew trust with no arguments to list them.
Older Homebrew versions have no brew trust command and need no such
step. If yours predates it, skip straight to brew install club.
Upgrade and uninstall with the usual brew commands:
brew update && brew upgrade clubbrew uninstall clubbrew untap birjuvachhani/club # if you want to drop the tap tooManual download
Every tagged release attaches one archive per supported target plus a
single SHA256SUMS.txt:
| Target | Archive |
|---|---|
| Linux x86_64 | club-cli-<version>-linux-x64.tar.gz |
| Linux arm64 | club-cli-<version>-linux-arm64.tar.gz |
| macOS Intel | club-cli-<version>-macos-x64.tar.gz |
| macOS Apple silicon | club-cli-<version>-macos-arm64.tar.gz |
| Windows x86_64 | club-cli-<version>-windows-x64.zip |
| Windows ARM64 | club-cli-<version>-windows-arm64.zip |
-
Grab the archive and the checksums file from the latest release:
Terminal window VERSION=0.1.0TARGET=linux-x64 # or macos-arm64, etc.curl -fLO "https://github.com/BirjuVachhani/club/releases/download/${VERSION}/club-cli-${VERSION}-${TARGET}.tar.gz"curl -fLO "https://github.com/BirjuVachhani/club/releases/download/${VERSION}/SHA256SUMS.txt" -
Verify the archive:
Terminal window shasum -a 256 -c SHA256SUMS.txt --ignore-missingYou should see
club-cli-${VERSION}-${TARGET}.tar.gz: OK. -
Extract and install:
Terminal window tar -xzf "club-cli-${VERSION}-${TARGET}.tar.gz"install -m 0755 "club-cli-${VERSION}-${TARGET}/bin/club" ~/.local/bin/club
-
Download the
.zipandSHA256SUMS.txtfrom the latest release page. -
Verify the archive in PowerShell:
Terminal window $Version = '0.7.1'$Target = 'windows-arm64' # Use windows-x64 on an x64 machineGet-FileHash ".\club-cli-$Version-$Target.zip" -Algorithm SHA256Compare the hash against the line for your file in
SHA256SUMS.txt. -
Extract the zip. Move
club-cli-<version>-<target>\bin\club.exesomewhere on yourPATH(for example,%USERPROFILE%\bin), or add the extractedbindirectory toPATHdirectly.
From source
Useful when you’re hacking on the CLI itself or want to run an unreleased build. Requires the Dart SDK 3.11 or newer.
git clone https://github.com/BirjuVachhani/club.gitcd clubdart pub getdart pub global activate --source path packages/club_cliMake sure $HOME/.pub-cache/bin is on your PATH:
export PATH="$PATH:$HOME/.pub-cache/bin"Verifying the install
club --versionIf you see the version printed, you’re done. Continue to Login & Setup to authenticate against your club server.
Upgrading
Use club upgrade:
club upgradeIt resolves the newest stable release, then hands off to the same install script that put the binary there, so the result is identical to re-running the one-liner. Replacing the running binary is safe on every platform.
Options
| Flag | Description |
|---|---|
--check | Report whether a newer release exists, then exit without installing. |
--version <x> | Install this exact version. Accepts 0.4.2 or v0.4.2. Downgrades are allowed and prompt for confirmation. |
--pre | Consider pre-release tags when resolving the newest version. |
--force | Reinstall when already current, and proceed on a local build. |
--dry-run | Print what would be installed and where, then exit. |
-y, --yes | Skip the downgrade confirmation. |
--install-dir <path> | Override the auto-detected install directory. |
--json | Machine-readable output. |
Exit codes
| Code | Meaning |
|---|---|
0 | Upgraded, already current, or --check found nothing newer. |
65 | --check only: a newer version is available. |
66 | A downgrade needed confirmation but the shell is not interactive. Pass --yes. |
69 | GitHub was unreachable, a pinned build is unavailable, or Homebrew could not be started. |
70 | The install script or a Homebrew command ran and failed. |
78 | The install cannot be upgraded as requested, an option is unsupported for Homebrew, or the target directory is not writable. |
--check returning 65 follows the git diff --exit-code convention, which
trips up CI steps that treat any non-zero code as failure. Prefer --json
there:
club upgrade --check --json | jq -e .updateAvailableHomebrew installs
When the binary came from Homebrew, club upgrade delegates to Homebrew
instead of replacing files in the Cellar itself. It runs the equivalent of:
brew update && brew upgrade clubHomebrew installations use package-manager-specific option behavior:
--checkupdates tap metadata, then queriesbrew outdatedwithout installing.--dry-runprints the Homebrew commands without running them.--forceusesbrew reinstall club.--yesis forwarded to Homebrew.--version,--pre, and--install-dirare rejected because the stable formula owns the available version and destination.
A missing brew executable returns 69. A Homebrew command that starts but
fails returns 70 with the command to retry. --json captures Homebrew output
so stdout remains one machine-readable JSON document.
dart pub global activate installs and source checkouts are still detected
and refused with the right command to run instead.
Pre-releases
club upgrade and both install scripts default to the newest stable
release. Pass --pre to any of them to include pre-releases.
Newly published releases
A release is only offered once its build artifacts have finished uploading.
Releases are published manually and the build runs afterwards, so a tag can
be visible on GitHub for a few minutes before it is installable. During that
window club upgrade reports that you are up to date rather than sending
you into an installer that would fail. --json reports the pending version
as pendingVersion so the state is still visible.
Update notifications
After a command runs, club may print a one-line hint when a newer release
exists. It checks at most once every 24 hours and caches the result in
~/.config/club/update_check.json. Set NO_UPDATE_CHECK to turn it off; it
is already skipped in CI.
Manual installs
For manual installs, repeat the download step with the new version.
Uninstalling
Use the uninstall script that matches how you installed.
curl -fsSL https://club.birju.dev/uninstall.sh | bashThis removes the binary at ~/.local/bin/club and, if present, the
bundle directory at ~/.local/share/club. Stored credentials at
~/.config/club are kept by default. Pass --purge to delete them
too.
| Flag | Description |
|---|---|
--purge | Also delete ~/.config/club and unregister club’s dart pub tokens. |
--install-dir <path> | Look for the binary here instead of ~/.local/bin. Must match the value you passed to install.sh. |
--dry-run | Print what would be removed without deleting anything. |
# Preview the removalcurl -fsSL https://club.birju.dev/uninstall.sh | bash -s -- --dry-run
# Remove binary, credentials, and registered pub tokenscurl -fsSL https://club.birju.dev/uninstall.sh | bash -s -- --purge
# Uninstall from a custom locationcurl -fsSL https://club.birju.dev/uninstall.sh \ | sudo bash -s -- --install-dir /usr/local/biniwr -useb https://club.birju.dev/uninstall.ps1 | iexThis removes club.exe (and the club.cmd shim, if the bundle
layout was used) from %USERPROFILE%\.club\bin, along with the
sibling club-bundle directory. Credentials at %APPDATA%\club
are kept unless you pass -Purge.
If you followed the installer’s PATH instructions, the install
directory is also removed from your user PATH. Pass -KeepPath to
leave it alone.
| Parameter | Env var | Description |
|---|---|---|
-Purge | CLUB_PURGE | Also delete %APPDATA%\club and unregister club’s dart pub tokens. |
-InstallDir <path> | CLUB_INSTALL_DIR | Look here instead of %USERPROFILE%\.club\bin. Must match what you passed to install.ps1. |
-DryRun | CLUB_DRY_RUN | Print what would be removed without deleting anything. |
-KeepPath | n/a | Leave the install directory in your user PATH. |
Parameters require direct invocation. When piping to iex, set the
matching env var first:
# Preview the removal$env:CLUB_DRY_RUN = '1'iwr -useb https://club.birju.dev/uninstall.ps1 | iex
# Or, with the script saved to disk:iwr -useb https://club.birju.dev/uninstall.ps1 -OutFile uninstall.ps1.\uninstall.ps1 -PurgeWhat --purge covers
club login and club setup register your token with dart pub token add, which writes it into dart’s own config rather than club’s:
~/.config/dart/pub-tokens.jsonon Linux and macOS%APPDATA%\dart\pub-tokens.jsonon Windows
Deleting club’s config directory would leave that token behind, still
pointing at your server. --purge (-Purge on Windows) reads the
servers out of credentials.json before deleting it and runs dart pub token remove for each one.
If dart isn’t on PATH, the script prints the exact commands to
finish the job rather than failing.
Homebrew
If you installed via Homebrew, uninstall with brew instead, since the script only knows about install.sh layouts:
brew uninstall clubbrew untap birjuvachhani/club # if you want to drop the tap toobrew untrust birjuvachhani/club # and its trust entrybrew untrust matches the stored entry literally, so pass it the same
form you trusted with. If you trusted the clone URL, untrust the clone
URL. Run brew trust with no arguments to see what is actually stored.
Manual
If you’d rather do it by hand:
rm -f ~/.local/bin/clubrm -rf ~/.local/share/club # only if the bundle layout was usedrm -rf ~/.config/club # credentials, only for a clean slate
# One per server you logged intodart pub token remove https://pub.example.comRemove-Item "$env:USERPROFILE\.club\bin\club.exe" -ForceRemove-Item "$env:USERPROFILE\.club\bin\club.cmd" -Force # bundle layout onlyRemove-Item "$env:USERPROFILE\.club\club-bundle" -Recurse -ForceRemove-Item "$env:APPDATA\club" -Recurse -Force # credentials
# One per server you logged intodart pub token remove https://pub.example.comTo list the servers you logged into before deleting anything, run club config show or read the servers keys out of credentials.json.