Skip to content

Installation

The club CLI is a single native binary built for every major platform. There are four ways to get it:

  1. Install script — one-liner that fetches the right archive for your OS + CPU, verifies the checksum, and drops the binary on your PATH. install.sh for Linux/macOS, install.ps1 for Windows.
  2. Homebrew — on macOS (and Linux with Homebrew installed), tap this repo and brew install club. Upgrades and uninstall flow through brew like any other formula.
  3. 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.
  4. From source — activate the CLI via dart pub global activate from 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)

Terminal window
curl -fsSL https://club.birju.dev/install.sh | bash

The 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

FlagEnv varDescription
--version <x>CLUB_VERSIONInstall a specific release (e.g. 0.1.0) instead of the newest stable one.
--preCLUB_PREInclude pre-releases when resolving the newest version.
--install-dir <path>Install to a different directory. Default ~/.local/bin.
--repo <owner/name>CLUB_REPOPull from a fork or mirror. Default BirjuVachhani/club.

By default the script installs the newest stable release. Pass --pre to include pre-releases.

Examples:

Terminal window
# Pin to a specific version
curl -fsSL https://club.birju.dev/install.sh \
| bash -s -- --version 0.1.0
# Include pre-releases
curl -fsSL https://club.birju.dev/install.sh \
| bash -s -- --pre
# Install into /usr/local/bin instead of ~/.local/bin
curl -fsSL https://club.birju.dev/install.sh \
| sudo bash -s -- --install-dir /usr/local/bin

PATH

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:

Terminal window
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

Install script (Windows)

Terminal window
iwr -useb https://club.birju.dev/install.ps1 | iex

The script detects the architecture, downloads the matching .zip from the release, verifies its SHA-256 against SHA256SUMS.txt, and copies club.exe into %USERPROFILE%\.club\bin.

Options

ParameterEnv varDescription
-Version <x>CLUB_VERSIONInstall a specific release (e.g. 0.1.0) instead of the newest stable one.
-PreCLUB_PREInclude pre-releases when resolving the newest version.
-InstallDir <path>CLUB_INSTALL_DIRInstall to a different directory. Default %USERPROFILE%\.club\bin.
-Repo <owner/name>CLUB_REPOPull 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:

Terminal window
# 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:

Terminal window
[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:

Terminal window
brew tap birjuvachhani/club https://github.com/BirjuVachhani/club.git
brew install club

The formula pulls the prebuilt binary for your platform (macOS arm64/x64, Linux arm64/x64) from the matching GitHub release and verifies its SHA-256.

Upgrade and uninstall with the usual brew commands:

Terminal window
brew update && brew upgrade club
brew uninstall club
brew untap birjuvachhani/club # if you want to drop the tap too

Manual download

Every tagged release attaches one archive per supported target plus a single SHA256SUMS.txt:

TargetArchive
Linux x86_64club-cli-<version>-linux-x64.tar.gz
Linux arm64club-cli-<version>-linux-arm64.tar.gz
macOS Intelclub-cli-<version>-macos-x64.tar.gz
macOS Apple siliconclub-cli-<version>-macos-arm64.tar.gz
Windows x86_64club-cli-<version>-windows-x64.zip
  1. Grab the archive and the checksums file from the latest release:

    Terminal window
    VERSION=0.1.0
    TARGET=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"
  2. Verify the archive:

    Terminal window
    shasum -a 256 -c SHA256SUMS.txt --ignore-missing

    You should see club-cli-${VERSION}-${TARGET}.tar.gz: OK.

  3. 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

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.

Terminal window
git clone https://github.com/BirjuVachhani/club.git
cd club
dart pub get
dart pub global activate --source path packages/club_cli

Make sure $HOME/.pub-cache/bin is on your PATH:

Terminal window
export PATH="$PATH:$HOME/.pub-cache/bin"

Verifying the install

Terminal window
club --version

If you see the version printed, you’re done. Continue to Login & Setup to authenticate against your club server.

Upgrading

Use club upgrade:

Terminal window
club upgrade

It 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

FlagDescription
--checkReport 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.
--preConsider pre-release tags when resolving the newest version.
--forceReinstall when already current, and proceed on a local build.
--dry-runPrint what would be installed and where, then exit.
-y, --yesSkip the downgrade confirmation.
--install-dir <path>Override the auto-detected install directory.
--jsonMachine-readable output.

Exit codes

CodeMeaning
0Upgraded, already current, or --check found nothing newer.
65--check only: a newer version is available.
66A downgrade needed confirmation but the shell is not interactive. Pass --yes.
69GitHub was unreachable, or a pinned --version has no build for your platform.
70The installer ran and failed.
78This install cannot upgrade itself, 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:

Terminal window
club upgrade --check --json | jq -e .updateAvailable

Homebrew installs

club upgrade refuses when the binary came from Homebrew, because Homebrew owns its own files. Use brew upgrade instead:

Terminal window
brew update && brew upgrade club

The same applies to dart pub global activate installs and to running from a source checkout, both of which are 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:

Terminal window
curl -fsSL https://club.birju.dev/uninstall.sh | bash

This 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.

Options

FlagDescription
--purgeAlso delete ~/.config/club (credentials + config).
--install-dir <path>Look for the binary here instead of ~/.local/bin. Must match the value you passed to install.sh.
--dry-runPrint what would be removed without deleting anything.

Examples:

Terminal window
# Preview the removal
curl -fsSL https://club.birju.dev/uninstall.sh | bash -s -- --dry-run
# Remove binary + credentials
curl -fsSL https://club.birju.dev/uninstall.sh | bash -s -- --purge
# Uninstall from a custom location
curl -fsSL https://club.birju.dev/uninstall.sh \
| sudo bash -s -- --install-dir /usr/local/bin

Homebrew

If you installed via Homebrew, uninstall with brew instead — the script only knows about install.sh layouts:

Terminal window
brew uninstall club
brew untap birjuvachhani/club

Manual

If you’d rather do it by hand:

Terminal window
rm -f ~/.local/bin/club
rm -rf ~/.local/share/club # only if the bundle layout was used
rm -rf ~/.config/club # credentials — only if you want a clean slate