Skip to main content

Install

Requires macOS 26 or later.

Homebrew​

brew install mcclowes/turnstile/turnstile # CLI only
brew install mcclowes/turnstile/turnstile mcclowes/turnstile/turnstile-app # CLI and menu bar app
turnstile init

Name the formula alongside the app. Homebrew only trusts third-party formulae you name, so brew install --cask mcclowes/turnstile/turnstile-app on its own refuses to load the CLI it depends on, unless you've run brew trust mcclowes/turnstile.

Release binary​

Download the universal turnstile-<version>-macos.tar.gz from releases, then run:

tar -xzf turnstile-*-macos.tar.gz
./turnstile init

From source​

You'll need Xcode 26 or later:

git clone https://github.com/mcclowes/turnstile && cd turnstile
swift build -c release
.build/release/turnstile init

For a local menu bar app, run ./scripts/package.sh --dev. It creates .build/Turnstile.app with an ad-hoc signature, skips notarization, and keeps any existing release ZIP. Packaging stages the replacement so a failed build, copy, or signing step keeps the previous app.

Release maintainers can use ./scripts/dist.sh to assemble the CLI tarball, app ZIP, and checksums under .build/dist, with configured signing and notarization credentials. Failed assembly before publication keeps the previous distribution.

What init does​

init installs the binary in ~/.turnstile/bin (linked, for Homebrew, so brew upgrade carries over), creates the shims, and adds them to the front of PATH in your shell's startup files (zsh, bash, or fish).

Open a new shell, then check everything's wired up:

turnstile doctor

Managing PATH yourself​

Use turnstile init --no-rc and put this wherever suits:

eval "$(turnstile env)"

Terminal managers can do the same for the shells they spawn.

Uninstall​

turnstile uninstall removes the shims and PATH setup. History is kept. To turn gating off without uninstalling, use turnstile disable.