Skip to main content
Buttons ships as a single static binary for macOS and Linux (amd64 + arm64). No runtime dependencies.

curl (macOS / Linux)

The fastest path for a single machine:
The script detects your OS and architecture, downloads the matching archive from GitHub Releases, verifies the SHA256 checksum, and installs to /usr/local/bin. Uses sudo only if the target directory isn’t writable.

Pin a version

Custom install directory

Docker (for deployed agents)

Multi-arch image on GitHub Container Registry:
Most agent deployments bake the binary into their own image via multi-stage copy:
The image is Alpine-based with /bin/sh, so shell buttons work out of the box. Bash is not included; add bash, python3, or nodejs via apk add in derived images when those runtimes are needed.
For one-off invocations with state persisted to the host:

Go

If you already have a Go toolchain:
Installs to $(go env GOPATH)/bin (usually ~/go/bin). Make sure that directory is on your $PATH.

Homebrew

The tap auto-publishes on every release, so brew upgrade buttons always gets you the newest version. Supports macOS and Linux on both Intel and Apple Silicon. Homebrew also installs shell completions automatically on install and upgrade, so tab completion works without a separate buttons completion ... setup step.

npm / pnpm / bun

The npm package is a thin JavaScript shim that resolves the right prebuilt binary for your platform through optional dependencies.

Verify

Updating

The fastest way to update is the built-in self-update command:
This checks GitHub Releases for the CLI and refreshes floating button dependencies from .buttons/buttons.json and .buttons/buttons-lock.json. Normal interactive commands can also update before they run. buttons-auto-update refreshes floating button dependencies and defaults on. cli-auto-update updates the CLI binary when the throttle allows and defaults off, so every command does not hit GitHub or Homebrew. You can also update through your original install channel:
If you installed via Homebrew, buttons update detects this and asks you to use brew upgrade by default. To let Buttons update the CLI through Homebrew, run buttons config set cli-auto-update true or set BUTTONS_CLI_AUTO_UPDATE=1.