---
title: Installation
sort: 1
---

# Installation

## Get the CLI

The CLI is a single Go binary, signed and notarised on macOS, signed via Authenticode on Windows.

```bash
# macOS — Homebrew
brew install zephyrcart/tap/zephyr

# Linux — apt
curl -fsSL https://pkg.zephyrcart.io/apt/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/zephyr.gpg
echo "deb [signed-by=/usr/share/keyrings/zephyr.gpg] https://pkg.zephyrcart.io/apt stable main" \
  | sudo tee /etc/apt/sources.list.d/zephyr.list
sudo apt update && sudo apt install -y zephyr-cli

# Windows — Scoop
scoop bucket add zephyr https://github.com/zephyrcart/scoop-bucket
scoop install zephyr
```

Confirm:

```bash
zephyr --version
# zephyr 1.18.3 (build 7c2a91f, 2026-05-19)
```

## Authenticate

```bash
zephyr login
```

The CLI opens your browser, you sign into the dashboard, and the OAuth dance writes a token to
`~/.config/zephyr/credentials.toml`. The token is scoped to a single tenant and a single role.

For CI use a project-level API key instead — see [API keys](../api-reference/index.md#api-keys).

## Pick a region

ZephyrCart runs in four regions. Pick the closest to your customers; latency from anywhere else is
the latency budget you spend forever.

| Region key       | Location           | Status |
|------------------|--------------------|--------|
| `eu-frankfurt`   | Frankfurt, Germany | GA     |
| `eu-dublin`      | Dublin, Ireland    | GA     |
| `us-east`        | Virginia, USA      | GA     |
| `ap-singapore`   | Singapore          | GA     |

Set the default:

```bash
zephyr config set region eu-frankfurt
```

Now jump to [Creating your first product](first-product.md).
