> This page is for Developer.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bigcommerce.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bigcommerce.com/_mcp/server.

# Catalyst CLI

> Reference for every Catalyst CLI command and flag, including create, deploy, env, logs, projects, channels, domains, auth, and upgrade.

This page documents every Catalyst CLI command and its parameters. The CLI requires Node.js `22` or `24`. To understand what the CLI is for and how its configuration variables work, see the Native Hosting [Overview](/developer/docs/storefront/catalyst/deployment/native-hosting/overview).

> **Warning**
>
> The Catalyst CLI is generally available, but Native Hosting is currently in
> closed beta. There may be breaking changes to the Native Hosting APIs as we
> finalize them. To express interest in gaining access, fill out the [Native Hosting Closed Beta Interest Form](https://docs.google.com/forms/d/e/1FAIpQLSfDepq3qRtEtavb1wQvSvdK21pwr_kNsYQbH2B7JjWYyptUSA/viewform?usp=header).

Configuration values are resolved in this priority order: flags > environment variables > `.bigcommerce/project.json`. If `CATALYST_STORE_HASH` is unset, the CLI falls back to `BIGCOMMERCE_STORE_HASH`.

Commands that manage a resource are named in the plural — `projects`, `channels`, `domains`, and `logs`. Each one also accepts its singular form as an alias, so `catalyst project list` and `catalyst projects list` do the same thing. The plural form is canonical; use it in new scripts.

---

## version

Display detailed version information (CLI version, Node version, and platform).

### Parameters

This command does not accept any parameters.

### Example

```shell
pnpm catalyst version
```

---

## create

Scaffold a new Catalyst storefront and connect it to your BigCommerce store. The CLI will prompt for any required values not passed as flags.

> **Info**
>
> You won't typically run `catalyst create` directly, since `pnpm catalyst create` only works where the CLI is already installed. To scaffold a new project from scratch, run `pnpm create @bigcommerce/catalyst@latest` instead (see [CLI Installation](/developer/docs/storefront/catalyst/getting-started/cli-installation)). It runs `catalyst create` for you and passes through the same flags documented below.

### Parameters

| Parameter                    | Required | Description                                                                                                                                                                                                                                             |
| :--------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--project-name <name>`      | No       | Name of your Catalyst project. Used as the directory name and display name.                                                                                                                                                                             |
| `--project-dir <dir>`        | No       | Directory in which to create the project. Defaults to the current working directory.                                                                                                                                                                    |
| `--store-hash <hash>`        | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via `CATALYST_STORE_HASH`.                                                                                                                                 |
| `--access-token <token>`     | No       | Your BigCommerce access token. Can also be set via `CATALYST_ACCESS_TOKEN`.                                                                                                                                                                             |
| `--channel-id <id>`          | No       | BigCommerce channel ID to connect the storefront to.                                                                                                                                                                                                    |
| `--storefront-token <token>` | No       | BigCommerce Storefront API token.                                                                                                                                                                                                                       |
| `--hosting <mode>`           | No       | Hosting mode: `self-hosted` or `commerce`. Use `commerce` to set up the project for Native Hosting at create time. When omitted, the project is scaffolded without hosting-specific setup, and `catalyst deploy` offers to set up Native Hosting later. |
| `--use-existing`             | No       | When used with `--hosting commerce` and `--project-name`, reuses an existing infrastructure project instead of prompting to create one.                                                                                                                 |
| `--gh-ref <ref>`             | No       | Extract a specific Git ref (tag, branch, or commit) from the source repository. Defaults to `@bigcommerce/catalyst-core@latest`.                                                                                                                        |
| `--repository <repo>`        | No       | GitHub repository to extract from. Defaults to `bigcommerce/catalyst`.                                                                                                                                                                                  |
| `--env <KEY=VALUE>`          | No       | Set an arbitrary environment variable in `.env.local`. Can be repeated to set multiple variables.                                                                                                                                                       |

> **Info**
>
> The default `--gh-ref` (`@bigcommerce/catalyst-core@latest`) does not include Makeswift. Pass `--gh-ref @bigcommerce/catalyst-makeswift@latest` for a Makeswift-connected project. See [Makeswift](/developer/docs/storefront/catalyst/makeswift/overview).

### Example

```shell
# Interactive setup (prompts for all required values)
pnpm create @bigcommerce/catalyst@latest
```

```shell
# Self-hosted setup with explicit credentials
pnpm create @bigcommerce/catalyst@latest --project-name my-store --store-hash <STORE_HASH> --access-token <ACCESS_TOKEN>
```

```shell
# Native Hosting setup
pnpm create @bigcommerce/catalyst@latest --project-name my-store --hosting commerce --store-hash <STORE_HASH> --access-token <ACCESS_TOKEN>
```

---

## auth login

Authenticate with BigCommerce via your browser. Uses an OAuth device code flow. The CLI displays a one-time code, opens your browser to the BigCommerce login page, and waits for you to authorize. After logging in, your credentials are stored in `.bigcommerce/project.json`. Falls back to an interactive store hash + access token prompt if the browser flow is unavailable.

**Passing credentials as flags.** If you pass both `--store-hash` and `--access-token` on the command line, the CLI logs in with them instead of opening the browser: it verifies them against your store and saves them to `.bigcommerce/project.json`, replacing any stored credentials.

* If BigCommerce rejects them, the command exits with an error and nothing is saved.
* If they can't be verified (for example, the API is unreachable), the CLI warns and saves them anyway.

Values that come only from the `CATALYST_STORE_HASH` and `CATALYST_ACCESS_TOKEN` environment variables don't trigger this; the CLI treats them as already-resolved credentials, described next.

**When credentials are already stored.** If a store hash and access token are already resolved, from environment variables or from a previous login, the CLI checks them first:

* **Still valid:** it shows the store you're logged in to and exits. Run `catalyst auth logout` first, or pass `--force`, to log in again.
* **Expired or revoked:** it warns and starts the login flow to re-authenticate.
* **Can't be verified** (for example, the API is unreachable): it keeps them and exits. Re-run once the API is reachable, or pass `--force`.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                                                 |
| :----------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--store-hash <hash>`    | No       | The BigCommerce store hash. When passed along with `--access-token`, the CLI verifies and stores those credentials instead of running the browser login flow. Can also be set via `CATALYST_STORE_HASH`.    |
| `--access-token <token>` | No       | Your BigCommerce access token. When passed along with `--store-hash`, the CLI verifies and stores those credentials instead of running the browser login flow. Can also be set via `CATALYST_ACCESS_TOKEN`. |
| `--force`                | No       | Skip the check on already-stored credentials and re-authenticate regardless. When combined with `--store-hash` and `--access-token`, stores those credentials without verifying them.                       |

### Example

```shell
# Login via browser (recommended)
pnpm catalyst auth login
```

```shell
# Log in with existing credentials (verifies and stores them)
pnpm catalyst auth login --store-hash <STORE_HASH> --access-token <ACCESS_TOKEN>
```

```shell
# Re-authenticate even if credentials are already stored
pnpm catalyst auth login --force
```

---

## auth logout

Remove stored credentials for the current project.

### Parameters

This command does not accept any parameters.

### Example

```shell
pnpm catalyst auth logout
```

---

## auth whoami

Verify your stored credentials and display information about the authenticated store and linked project.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                     |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--store-hash <hash>`    | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`. |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                             |

### Example

```shell
pnpm catalyst auth whoami
```

Example output:

```text showLineNumbers={false}
Logged in to My Store (abc123), connected to project my-project (43eba682-0c48-11f1-9bd5-827a48b0ce1e)
```

If no credentials are found, the command exits with a "not logged in" message.

---

## start

Start a local preview of your Catalyst storefront. For projects set up for Commerce Hosting, this previews the OpenNext/Cloudflare build via Wrangler and requires a successful `catalyst build` first. For self-hosted projects, it falls back to `next start` instead.

Before the Commerce Hosting preview, the CLI symlinks `.bigcommerce/.dev.vars` to your `.env.local` (so Wrangler picks up the same variables) unless `.dev.vars` already exists as something else, in which case it warns and leaves it alone. If `.env.local` doesn't exist, it warns that the preview may fail without environment variables.

### Parameters

This command does not accept any parameters.

### Example

```shell
pnpm catalyst start
```

---

## build

Build your Catalyst project. If the project is configured for Native Hosting (Commerce Hosting), this runs the OpenNext/Cloudflare pipeline and a Wrangler dry-run to generate deployment artifacts. Otherwise, it falls back to `next build`.

### Parameters

| Parameter                      | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| :----------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--project-uuid <uuid>`        | No       | The UUID of the project to include in the deployment configuration. Required for Native Hosting builds but can also be set via `CATALYST_PROJECT_UUID` or the `.bigcommerce/project.json` file.                                                                                                                                                                                                                                                                                                   |
| `--wrangler-version <version>` | No       | The Wrangler version or dist-tag to build with. When omitted, the CLI's pinned default is used (`4.128.0` as of CLI 1.4.2). Must look like a version or dist-tag (for example, `4.128.0` or `latest`).                                                                                                                                                                                                                                                                                            |
| `--env-path <path>`            | No       | Path to an environment file to load for the build (resolved relative to the current working directory). When omitted, `.env.local` and `.env` are auto-loaded from the current directory instead (`.env.local` takes precedence, and neither overrides variables already set in your shell). If the file does not exist or cannot be parsed, the command exits with an error. Env files supply storefront build variables only — the CLI's own `CATALYST_*` credentials are never read from them. |

### Example

```shell
pnpm catalyst build
```

```shell
# Build with a specific Wrangler version
pnpm catalyst build --wrangler-version latest
```

```shell
# Build using an explicit env file instead of the auto-loaded .env.local/.env
pnpm catalyst build --env-path .env.prod
```

---

## deploy

Deploy your application to Cloudflare. By default, this also runs a build before deploying which can be skipped with the `--prebuilt` flag. Generates a bundle from `.bigcommerce/dist`, uploads it to BigCommerce, and creates a deployment. If no project is linked and `--project-uuid` isn't passed, the CLI prompts you to select or create one and links it automatically before continuing. If the linked project no longer exists on the store (for example, it was deleted), the CLI warns and prompts you to select or create another one.

If the project isn't set up for Native Hosting yet, `deploy` asks whether to run Commerce Hosting setup now (default Yes). Accepting transforms the project for Native Hosting and reinstalls dependencies before continuing; declining exits without deploying. See [Set up with an existing project](/developer/docs/storefront/catalyst/deployment/native-hosting/getting-started#set-up-with-an-existing-project) for what setup changes.

Runtime secrets can be persisted with [`env add`](#env-add) — they are sent automatically on every deploy — or passed per run with `--secret`. A `--secret` value overrides any stored value for the same key.

Without `--update-site-url` or `--update-checkout-url`, an interactive deploy offers to point the storefront's channel (its `BIGCOMMERCE_CHANNEL_ID`) at the deployment, and to move its checkout onto the storefront's domain. Both offers default to No, and declining either is saved for that channel in `.bigcommerce/project.json`. Nothing is offered when the terminal isn't interactive or `CI` is set. See [Checkout domains](/developer/docs/storefront/catalyst/deployment/native-hosting/checkout-domains#set-it-during-a-deploy).

### Parameters

| Parameter                      | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| :----------------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--store-hash <hash>`          | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.                                                                                                                                                                                                                                                                                                                                                                             |
| `--access-token <token>`       | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `--project-uuid <uuid>`        | No       | The UUID of the project to deploy to. Can also be set via the `CATALYST_PROJECT_UUID` environment variable or `.bigcommerce/project.json`.                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `--secret <KEY=VALUE>`         | No       | A runtime secret for this deployment. Can be passed multiple times. Overrides any value stored for the same key with `catalyst env add`. Supply all required runtime secrets either with `--secret`, with `catalyst env add`, or as environment variables.                                                                                                                                                                                                                                                                                                  |
| `--prebuilt`                   | No       | Skips the build step. Requires `.bigcommerce/dist/` to already contain build output.                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `--update-site-url`            | No       | After a successful deploy, prompt to update a channel's site URL to the new deployment hostname. See [`channels update`](#channels-update).                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `--update-checkout-url`        | No       | After a successful deploy, update a channel's checkout URL. On an auto-generated hostname it sets the storefront's `c.` checkout hostname and waits for its certificate; on a custom domain it prompts for the URL. Passing this together with `--update-site-url` asks which channel only once.                                                                                                                                                                                                                                                            |
| `--dry-run`                    | No       | Generate the bundle without uploading or deploying.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `--wrangler-version <version>` | No       | The Wrangler version or dist-tag to build with. Ignored when `--prebuilt` is passed, since no build runs. When omitted, the CLI's pinned default is used (`4.128.0` as of CLI 1.4.2). Must look like a version or dist-tag (for example, `4.128.0` or `latest`).                                                                                                                                                                                                                                                                                            |
| `--env-path <path>`            | No       | Path to an environment file to load for the build (resolved relative to the current working directory). Ignored when `--prebuilt` is passed, since no build runs. When omitted, `.env.local` and `.env` are auto-loaded from the current directory instead (`.env.local` takes precedence, and neither overrides variables already set in your shell). If the file does not exist or cannot be parsed, the command exits with an error. Env files supply storefront build variables only — the CLI's own `CATALYST_*` credentials are never read from them. |

### Example

```shell
pnpm catalyst deploy --secret BIGCOMMERCE_STORE_HASH=<YOUR_STORE_HASH> --secret BIGCOMMERCE_STOREFRONT_TOKEN=<YOUR_STOREFRONT_TOKEN>
```

```shell
# Deploy using an explicit env file instead of the auto-loaded .env.local/.env
pnpm catalyst deploy --env-path .env.prod
```

---

## env add

Add or update one or more deployment environment variables. Stored in `.bigcommerce/project.json` and sent as secrets on every `catalyst deploy`, so you no longer need to pass `--secret` for each one. Run a value through `--secret` on `deploy` only when you want to override a stored value for a single run.

### Parameters

| Parameter   | Required | Description                                              |
| :---------- | :------- | :------------------------------------------------------- |
| `<vars...>` | Yes      | One or more environment variables in `KEY=VALUE` format. |

### Example

```shell
pnpm catalyst env add BIGCOMMERCE_STORE_HASH=<YOUR_STORE_HASH> BIGCOMMERCE_STOREFRONT_TOKEN=<YOUR_STOREFRONT_TOKEN>
```

---

## env remove

Remove one or more stored deployment environment variables.

### Parameters

| Parameter   | Required | Description                                       |
| :---------- | :------- | :------------------------------------------------ |
| `<keys...>` | Yes      | One or more environment variable names to remove. |

### Example

```shell
pnpm catalyst env remove BIGCOMMERCE_STOREFRONT_TOKEN
```

---

## env list

List stored deployment environment variables. Values are masked.

### Parameters

This command does not accept any parameters.

### Example

```shell
pnpm catalyst env list
```

---

## logs tail

Tail live logs from your deployed application. Streams log output in real time using Server-Sent Events (SSE). The stream automatically reconnects on transient errors (up to 5 retries). Authentication errors (401) and other 4xx responses are treated as fatal instead — the command exits immediately rather than retrying, since reconnecting won't resolve them.

`tail` is the default `logs` subcommand, so `pnpm catalyst logs` on its own runs `pnpm catalyst logs tail`.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                     |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--store-hash <hash>`    | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`. |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                             |
| `--project-uuid <uuid>`  | No       | The project UUID. Can also be set via an environment variable named `CATALYST_PROJECT_UUID` or the `.bigcommerce/project.json` file.                                            |
| `--format <format>`      | No       | Output format for log events. Choices: `json`, `pretty`, `default`, `short`, `request`. Defaults to `default`.                                                                  |

The available formats are:

* `default` — `[timestamp] [LEVEL] message`
* `short` — message only
* `request` — `[timestamp] METHOD URL (status_code) [LEVEL] message`. Requests that logged no messages are printed too, without the level and message.
* `json` — raw JSON, one event per line
* `pretty` — indented JSON of the whole event

The `default` and `short` formats only print requests that produced a log message. Use `request`, `json`, or `pretty` to see every request.

### Example

```shell
pnpm catalyst logs tail
```

```shell
# Tail logs with request format
pnpm catalyst logs tail --format request
```

```shell
# Tail logs as raw JSON (useful for piping to other tools)
pnpm catalyst logs tail --format json
```

---

## logs query

Query historical logs from your deployed application. Specify a time window with `--since` (relative to now) or with `--start`/`--end` (absolute timestamps), and optionally filter by HTTP method, status code, URL, and log level. The window may not exceed 7 days. Entries print oldest-first, with timestamps in UTC.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                     |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--store-hash <hash>`    | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`. |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                             |
| `--project-uuid <uuid>`  | No       | The project UUID. Can also be set via an environment variable named `CATALYST_PROJECT_UUID` or the `.bigcommerce/project.json` file.                                            |
| `--since <duration>`     | No       | Relative window ending at `--end` (default: now), for example `30m`, `6h`, or `2d` (units: `s`, `m`, `h`, `d`). Cannot be combined with `--start`.                              |
| `--start <time>`         | No       | Window start: ISO-8601 timestamp or Unix epoch (seconds), UTC.                                                                                                                  |
| `--end <time>`           | No       | Window end: ISO-8601 timestamp or Unix epoch (seconds), UTC. Defaults to now. The window must not exceed 7 days.                                                                |
| `--method <method>`      | No       | Filter by request HTTP method (case-insensitive).                                                                                                                               |
| `--status-code <code>`   | No       | Filter by response status code (100–599).                                                                                                                                       |
| `--url-like <substring>` | No       | Filter by URL substring (case-sensitive).                                                                                                                                       |
| `--level-min <level>`    | No       | Minimum log level. Choices: `debug`, `info`, `warn`, `error`.                                                                                                                   |
| `--limit <count>`        | No       | Maximum entries per page (1–500). Defaults to `100`.                                                                                                                            |
| `--after <cursor>`       | No       | Return the page after (older than) this cursor, taken from a previous page's `end_cursor`. Cannot be combined with `--before`.                                                  |
| `--before <cursor>`      | No       | Return the page before (newer than) this cursor, taken from a previous page's `start_cursor`.                                                                                   |
| `--format <format>`      | No       | Output format for log entries. Choices: `json`, `pretty`, `default`, `short`, `request`. Defaults to `default`.                                                                 |

The available formats are the same as [`logs tail`](#logs-tail). For `logs query`, the `default` and `short` formats show only application log output and exclude Cloudflare's auto-generated per-request rows; use `request`, `json`, or `pretty` to include them.

> **Info**
>
> This command paginates with cursors. When more entries exist than `--limit`
> allows, the CLI prints a ready-to-run command with `--after <cursor>` for
> the next (older) page, or `--before <cursor>` for the previous (newer) page
> — follow the printed hint to keep paging. Cursors are only valid together
> with the exact window and filters they came from, so re-run with the same
> `--start`/`--end`, `--method`, `--status-code`, `--url-like`, `--level-min`,
> and `--format` flags. With `--format json`, the cursors are emitted as a
> trailing `{"meta": ...}` line instead of a printed hint.

### Example

```shell
# Last hour of logs
pnpm catalyst logs query --since 1h
```

```shell
# Newest 20 errors in the window (follow the printed --after hint for more)
pnpm catalyst logs query --since 24h --level-min error --limit 20
```

```shell
# Everything from a given start time (UTC)
pnpm catalyst logs query --start 2026-06-11T00:00:00Z
```

```shell
# Errors only for a specific path
pnpm catalyst logs query --since 24h --level-min error --url-like /cart
```

```shell
# Errors with request details (method, URL, status)
pnpm catalyst logs query --since 1h --level-min error --format request
```

```shell
# Raw JSON (NDJSON) for piping to other tools
pnpm catalyst logs query --since 2d --format json
```

---

## projects create

Create a new BigCommerce infrastructure project and link it to your local Catalyst project. The project UUID is written to `.bigcommerce/project.json`. Walks you through logging in via the browser device-code flow (the same flow as [`auth login`](#auth-login)) if you aren't authenticated yet.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                     |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--store-hash <hash>`    | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`. |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                             |

### Example

```shell
# Create a project (prompts for project name)
pnpm catalyst projects create
```

```shell
# Create a project and pass store hash and access token
pnpm catalyst projects create --store-hash <STORE_HASH> --access-token <ACCESS_TOKEN>
```

---

## projects link

Link your local Catalyst project to a BigCommerce infrastructure project. You can provide a project UUID directly, or use store credentials to fetch and select from available projects (or create a new one). The linked project UUID is written to `.bigcommerce/project.json`.

After linking, if the project isn't already set up for Commerce Hosting, the CLI asks whether to run that setup now (transforming the project and installing dependencies). If the project is already set up, this step is skipped, though the CLI still cleans up any Cloudflare-incompatible artifacts left over from before. In a non-interactive environment it skips removing a leftover `instrumentation.ts` and prints a warning instead, so delete or gate that file yourself.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                                                                                                                                                                                                                                       |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--store-hash <hash>`    | No       | BigCommerce store hash (found in the URL of your store Control Panel). If not passing `--project-uuid`, can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.                                                                                                                                                                                        |
| `--access-token <token>` | No       | BigCommerce access token (from a store-level API account). If not passing `--project-uuid`, can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                                                                                                                                                                                  |
| `--project-uuid <uuid>`  | No       | BigCommerce infrastructure project UUID. Use this to link directly without fetching projects. Can also be set via the `CATALYST_PROJECT_UUID` environment variable; when it's set, the CLI links that project without prompting. Without a project UUID, the CLI needs store credentials, passed as flags, set as environment variables, or stored from a previous login, to fetch your projects. |

### Example

```shell
# Link using a project UUID directly
pnpm catalyst projects link --project-uuid <UUID>
```

```shell
# Link by fetching projects (prompts to select or create)
pnpm catalyst projects link --store-hash <STORE_HASH> --access-token <ACCESS_TOKEN>
```

---

## projects list

List BigCommerce infrastructure projects for your store. The currently linked project is highlighted.

### Parameters

| Parameter                | Required | Description                                                                                                                                                               |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--store-hash <hash>`    | No       | BigCommerce store hash (found in the URL of your store Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`. |
| `--access-token <token>` | No       | BigCommerce access token (from a store-level API account). Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.           |

### Example

```shell
pnpm catalyst projects list
```

```shell
# List projects by passing store hash and access token
pnpm catalyst projects list --store-hash <STORE_HASH> --access-token <ACCESS_TOKEN>
```

---

## projects delete

Permanently delete a BigCommerce infrastructure project. **This action is irreversible.** If `--project-uuid` is not provided, the CLI fetches available projects and prompts you to select one. A confirmation prompt is shown before deletion unless `--force` is passed.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                            |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--store-hash <hash>`    | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.        |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                                    |
| `--project-uuid <uuid>`  | No       | UUID of the project to delete. If omitted, the CLI prompts you to select from available projects. Can also be set via `CATALYST_PROJECT_UUID` or the `.bigcommerce/project.json` file. |
| `--force`                | No       | Skip the confirmation prompt before deleting. Use with caution.                                                                                                                        |

### Example

```shell
# Delete a project (prompts for selection and confirmation)
pnpm catalyst projects delete
```

```shell
# Delete a specific project by UUID
pnpm catalyst projects delete --project-uuid <UUID>
```

```shell
# Delete without confirmation prompt
pnpm catalyst projects delete --project-uuid <UUID> --force
```

---

## channels create

Create a new Catalyst storefront channel on your BigCommerce store. This is the same channel-creation flow offered by [`create`](#create) during scaffolding, exposed as a standalone command so you can add channels to an existing project without scaffolding a new one.

Like [`channels link`](#channels-link), this is an onboarding command: if you are not already authenticated, it logs you in via the browser device-code flow (the same flow as [`auth login`](#auth-login)) before continuing. It then checks whether your store is eligible to create a Catalyst channel and exits with the store's message if it is not.

By default it prompts for the channel name, a default language, optional additional languages (up to 4), and whether to install sample data. Pass the corresponding flags to skip any prompt. Passing more than 4 values to `--additional-locales` fails immediately with an error, before any network call.

After the channel is created, the CLI asks whether to link it to your project — writing the channel's credentials (store hash, storefront token, channel ID, and so on) to `.env.local` in the current working directory, the same as [`channels link`](#channels-link). Pass `--link` to write the credentials without prompting.

### Parameters

| Parameter                           | Required | Description                                                                                                                                                                     |
| :---------------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--name <name>`                     | No       | Name for the new channel. Skips the name prompt.                                                                                                                                |
| `--locale <locale>`                 | No       | Default storefront locale (for example, `en`). Skips the default-language prompt.                                                                                               |
| `--additional-locales <locales...>` | No       | Additional storefront locales, up to 4 (for example, `--additional-locales es fr`). Skips the additional-languages prompt.                                                      |
| `--sample-data`                     | No       | Install sample data on the new channel. Skips the sample-data prompt.                                                                                                           |
| `--no-sample-data`                  | No       | Create the channel without sample data. Skips the sample-data prompt.                                                                                                           |
| `--link`                            | No       | Link the new channel to this project — write its credentials to `.env.local` without prompting.                                                                                 |
| `--store-hash <hash>`               | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`. |
| `--access-token <token>`            | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                             |

### Example

```shell
# Create a channel interactively (logs you in if needed)
pnpm catalyst channels create
```

```shell
# Create a channel non-interactively and link it to this project
pnpm catalyst channels create --name "My Store" --locale en --no-sample-data --link
```

```shell
# Add additional storefront languages
pnpm catalyst channels create --name "My Store" --additional-locales es fr
```

---

## channels link

Link this Catalyst project to a BigCommerce channel and write its credentials to `.env.local`. This is an onboarding command: if you are not already authenticated, it logs you in via the browser device-code flow (the same flow as [`auth login`](#auth-login)) before continuing. By default it prompts you to pick from the storefront channels on your store; pass `--channel-id` to skip the picker.

The channel's environment variables (store hash, storefront token, channel ID, and so on) are written to `.env.local` in the current working directory — run this from your project root (the directory containing your storefront's `package.json`), the same place you run `dev`, `build`, and `deploy`. In a legacy monorepo-structure project, that's the `core/` directory.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                     |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--store-hash <hash>`    | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`. |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                             |
| `--channel-id <id>`      | No       | Link this channel directly, skipping the channel picker.                                                                                                                        |
| `--env <KEY=VALUE>`      | No       | Set an additional environment variable in `.env.local`. Can be repeated. Inline values override the channel-provided value for the same key.                                    |

### Example

```shell
# Pick a channel interactively (logs you in if needed)
pnpm catalyst channels link
```

```shell
# Link a specific channel non-interactively
pnpm catalyst channels link --store-hash <STORE_HASH> --access-token <ACCESS_TOKEN> --channel-id 123
```

```shell
# Append extra environment variables to .env.local
pnpm catalyst channels link --channel-id 123 --env MY_FLAG=1
```

---

## channels info

Show a channel's site URLs — storefront, canonical, and checkout — and report whether the channel has a checkout URL of its own. Running `catalyst channels` with no subcommand does the same thing; `info` is the default.

When checkout is on a different domain than the storefront it warns, and in an interactive terminal offers to set one. See [Checkout domains](/developer/docs/storefront/catalyst/deployment/native-hosting/checkout-domains) for why that matters.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                     |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--store-hash <hash>`    | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`. |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                             |
| `--channel-id <id>`      | No       | Skip the channel prompt and target this channel directly.                                                                                                                       |

### Example

```shell
# Pick a channel interactively
pnpm catalyst channels info
```

```shell
# The same thing — `info` is the default subcommand
pnpm catalyst channels
```

---

## channels update

Update a BigCommerce channel's storefront and checkout URLs.

With no flags, this updates the storefront URL — prompting you to select a channel and a deployment hostname. Run [`projects list`](#projects-list) to see the available hostnames. If no project is linked, the CLI prints guidance to run [`projects create`](#projects-create) instead of failing.

Pass a checkout flag on its own to change only the checkout URL, leaving the storefront URL alone. BigCommerce requires the checkout URL to share a main domain with the channel's storefront URL and rejects anything else — see [Checkout domains](/developer/docs/storefront/catalyst/deployment/native-hosting/checkout-domains). For a storefront on an auto-generated hostname, that's its `c.` checkout hostname, for example `c.my-project.catalyst-sandbox.store`.

When this points a channel at an auto-generated hostname in an interactive terminal, it then offers to move checkout onto that hostname's `c.` name.

### Parameters

| Parameter                | Required | Description                                                                                                                                                                           |
| :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--store-hash <hash>`    | No       | The BigCommerce store hash (found in the URL of your store's Control Panel). Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.       |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`.                                                   |
| `--project-uuid <uuid>`  | No       | The project UUID. Can also be set via the `CATALYST_PROJECT_UUID` environment variable or `.bigcommerce/project.json`.                                                                |
| `--channel-id <id>`      | No       | Skip the channel prompt and target this channel directly.                                                                                                                             |
| `--hostname <hostname>`  | No       | Skip the hostname prompt and use this hostname directly. Must be one of the project's deployment hostnames.                                                                           |
| `--checkout-url <url>`   | No       | Set the channel's checkout URL. A bare hostname is accepted and `https://` is added; any path or query is dropped. Must use `https`. Cannot be combined with `--remove-checkout-url`. |
| `--remove-checkout-url`  | No       | Remove the channel's own checkout URL so checkout falls back to the shared checkout domain, then report where it landed. Cannot be combined with `--checkout-url`.                    |

### Example

```shell
# Pick a channel and hostname interactively
pnpm catalyst channels update
```

```shell
# Point the storefront at a deployment hostname
pnpm catalyst channels update --channel-id 123 --hostname my-storefront.example.com
```

```shell
# Set both URLs at once
pnpm catalyst channels update --channel-id 123 --hostname my-storefront.example.com --checkout-url checkout.example.com
```

```shell
# Change only the checkout URL
pnpm catalyst channels update --channel-id 123 --checkout-url checkout.example.com
```

```shell
# Fall back to the shared checkout domain
pnpm catalyst channels update --channel-id 123 --remove-checkout-url
```

---

## domains add

Add a custom domain to the current Native Hosting project. Newly added domains start in a `pending` verification state; pass `--wait` to poll until verification completes or times out (5 minutes).

After the domain is added, the CLI prints the DNS records to publish at your DNS provider: the `CNAME` record for a subdomain, or the `A` record for an apex domain. Save them right away. Only `domains add` returns them, and other `domains` commands don't show them again.

### Parameters

| Parameter                | Required | Description                                                                                                                         |
| :----------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------- |
| `<domain>`               | Yes      | The custom domain to add (for example, `www.example.com`).                                                                          |
| `--store-hash <hash>`    | No       | The BigCommerce store hash. Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.      |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`. |
| `--project-uuid <uuid>`  | No       | The project UUID. Can also be set via the `CATALYST_PROJECT_UUID` environment variable or `.bigcommerce/project.json`.              |
| `--wait`                 | No       | Poll until domain verification completes or times out.                                                                              |

### Example

```shell
pnpm catalyst domains add www.example.com
```

```shell
# Wait until the domain leaves pending verification
pnpm catalyst domains add www.example.com --wait
```

---

## domains list

List custom domains for the current Native Hosting project, along with each domain's verification status.

### Parameters

| Parameter                | Required | Description                                                                                                                         |
| :----------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------- |
| `--store-hash <hash>`    | No       | The BigCommerce store hash. Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.      |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`. |
| `--project-uuid <uuid>`  | No       | The project UUID. Can also be set via the `CATALYST_PROJECT_UUID` environment variable or `.bigcommerce/project.json`.              |
| `--domain <domain>`      | No       | Only show a specific domain.                                                                                                        |
| `--status <status>`      | No       | Filter by verification status. Choices: `pending`, `verified`, `failed`.                                                            |

### Example

```shell
pnpm catalyst domains list
```

```shell
# Show pending domains only
pnpm catalyst domains list --status pending
```

---

## domains status

Show the verification status of a custom domain on the current Native Hosting project. Pass `--wait` to poll until a `pending` domain finishes verifying.

### Parameters

| Parameter                | Required | Description                                                                                                                         |
| :----------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------- |
| `<domain>`               | Yes      | The custom domain to check.                                                                                                         |
| `--store-hash <hash>`    | No       | The BigCommerce store hash. Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.      |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`. |
| `--project-uuid <uuid>`  | No       | The project UUID. Can also be set via the `CATALYST_PROJECT_UUID` environment variable or `.bigcommerce/project.json`.              |
| `--wait`                 | No       | Poll until domain verification completes or times out.                                                                              |

### Example

```shell
pnpm catalyst domains status www.example.com
```

```shell
# Wait until the domain leaves pending verification
pnpm catalyst domains status www.example.com --wait
```

---

## domains claim

Claim ownership of a custom domain that is currently in use on another store. When you try to add a domain that is already bound to a different store, `catalyst domains add` prints an ownership-verification TXT record. Publish that record with your DNS provider, then run this command to release the domain from the other store and bind it to your project. If ownership has not yet been verified, the command prints the TXT record again so you can publish it and retry. Pass `--wait` to poll until the claimed domain finishes verifying.

### Parameters

| Parameter                | Required | Description                                                                                                                         |
| :----------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------- |
| `<domain>`               | Yes      | The custom domain to claim.                                                                                                         |
| `--store-hash <hash>`    | No       | The BigCommerce store hash. Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.      |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`. |
| `--project-uuid <uuid>`  | No       | The project UUID. Can also be set via the `CATALYST_PROJECT_UUID` environment variable or `.bigcommerce/project.json`.              |
| `--wait`                 | No       | Poll until domain verification completes or times out.                                                                              |

### Example

```shell
pnpm catalyst domains claim www.example.com
```

```shell
# Wait until the claimed domain leaves pending verification
pnpm catalyst domains claim www.example.com --wait
```

---

## domains transfer

Transfer a custom domain from its current project to another project in the **same store**. This is the same-store counterpart to `catalyst domains claim` (which handles domains in use on a *different* store): when you try to add a domain already bound to another project in your store, `catalyst domains add` tells you to transfer it. The source is the current (linked) project; the destination is the project you transfer to. Omit `--to-project-uuid` to pick the destination interactively from your store's projects. Pass `--wait` to poll until the transferred domain finishes verifying.

If the domain isn't found on the current (linked) project, the CLI scans the store's other projects to find which one actually owns it, then prints the exact `domains transfer` command to re-run from there — it won't guess and transfer from the wrong project.

### Parameters

| Parameter                  | Required | Description                                                                                                                         |
| :------------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------- |
| `<domain>`                 | Yes      | The custom domain to transfer.                                                                                                      |
| `--to-project-uuid <uuid>` | No       | The destination project UUID. If omitted, the CLI prompts you to choose a project.                                                  |
| `--store-hash <hash>`      | No       | The BigCommerce store hash. Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.      |
| `--access-token <token>`   | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`. |
| `--project-uuid <uuid>`    | No       | The source project UUID. Can also be set via the `CATALYST_PROJECT_UUID` environment variable or `.bigcommerce/project.json`.       |
| `--wait`                   | No       | Poll until domain verification completes or times out.                                                                              |

### Example

```shell
# Pick the destination project interactively
pnpm catalyst domains transfer www.example.com
```

```shell
# Transfer to a specific project
pnpm catalyst domains transfer www.example.com --to-project-uuid <PROJECT_UUID>
```

---

## domains remove

Remove a custom domain from the current Native Hosting project. If the domain is active (verified), the CLI prompts for confirmation before removing it, since traffic may stop routing to the project. Pass `--force` to skip the prompt.

### Parameters

| Parameter                | Required | Description                                                                                                                         |
| :----------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------- |
| `<domain>`               | Yes      | The custom domain to remove.                                                                                                        |
| `--store-hash <hash>`    | No       | The BigCommerce store hash. Can also be set via the `CATALYST_STORE_HASH` environment variable or `.bigcommerce/project.json`.      |
| `--access-token <token>` | No       | Your BigCommerce access token. Can also be set via the `CATALYST_ACCESS_TOKEN` environment variable or `.bigcommerce/project.json`. |
| `--project-uuid <uuid>`  | No       | The project UUID. Can also be set via the `CATALYST_PROJECT_UUID` environment variable or `.bigcommerce/project.json`.              |
| `--force`                | No       | Skip the confirmation prompt before removing an active domain.                                                                      |

### Example

```shell
pnpm catalyst domains remove www.example.com
```

```shell
# Skip confirmation for an active domain
pnpm catalyst domains remove www.example.com --force
```

---

## upgrade

Upgrade your Catalyst project to a newer version by applying a 3-way merge between your project's base version, your local changes, and the target version. Conflicts are written as standard `<<<ours/===/theirs>>>` markers — the upgrade never aborts. Run this from inside a Catalyst git repository with a clean working tree (commit or stash local changes first).

Catalyst versions are git tags on the [`bigcommerce/catalyst`](https://github.com/bigcommerce/catalyst) repository, not npm packages. Set the `GITHUB_TOKEN` environment variable to raise the GitHub API rate limit. The command has the aliases `up`.

If your project's `package.json` has no `catalyst.ref` field and `--from` isn't passed, the CLI infers a base version from the package name and version, asks you to confirm it (unless `--yes` is passed), and — after downloading — warns if the inferred base looks unreliable (less than 50% of its files match your project), suggesting you re-run with `--from <correct-version>`.

### Parameters

| Parameter                   | Required | Description                                                                                                                        |
| :-------------------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------- |
| `[version]`                 | No       | Target version to upgrade to. Defaults to `latest`.                                                                                |
| `--ref <ref>`               | No       | Full Git tag to upgrade to, for example an integration family like `@bigcommerce/catalyst-makeswift@1.7.0`. Overrides `[version]`. |
| `--from <ref>`              | No       | Base ref to upgrade from. Used when the project's `package.json` has no `catalyst.ref` field to infer the base from.               |
| `--dry-run`                 | No       | Generate and display the diff without applying it.                                                                                 |
| `--yes`                     | No       | Skip confirmation prompts (for example, accepting an inferred base ref).                                                           |
| `--repository <owner/repo>` | No       | GitHub repository to pull versions from. Defaults to `bigcommerce/catalyst`.                                                       |

### Example

```shell
# Upgrade to the latest Catalyst version
pnpm catalyst upgrade
```

```shell
# Upgrade to a specific version
pnpm catalyst upgrade 1.8.0
```

```shell
# Preview what would change without applying
pnpm catalyst upgrade --dry-run
```

```shell
# Upgrade to an integration family (makeswift, b2b-makeswift, ...)
pnpm catalyst upgrade --ref @bigcommerce/catalyst-makeswift@1.7.0
```

---

## telemetry

View or change CLI telemetry collection status (enable, disable, or show current status). Enabling telemetry helps BigCommerce support diagnose and troubleshoot errors.

### Parameters

| Parameter   | Required | Description                                                                             |
| :---------- | :------- | :-------------------------------------------------------------------------------------- |
| `[arg]`     | No       | Subcommand. Choices: `disable`, `enable`, `status`. Can also be omitted to show status. |
| `--enable`  | No       | Enables CLI telemetry collection. Conflicts with `--disable`.                           |
| `--disable` | No       | Disables CLI telemetry collection.                                                      |

### Example

```shell
# Show telemetry status
pnpm catalyst telemetry
```

```shell
# Enable telemetry collection
pnpm catalyst telemetry enable
```

```shell
# Disable telemetry collection
pnpm catalyst telemetry --disable
```

---

## debug

Print a diagnostic report — CLI version, runtime, project state, resolved config, telemetry status, and the presence of key project files — to include when filing a bug report. Credentials, stored environment variables, and CLI/build environment variables are always reported by presence and source only; secret values are never printed.

### Parameters

| Parameter | Required | Description                                                                                    |
| :-------- | :------- | :--------------------------------------------------------------------------------------------- |
| `--json`  | No       | Output the report as JSON instead of a human-readable report. Useful for copy/paste or piping. |

### Example

```shell
# Human-readable report
pnpm catalyst debug
```

```shell
# Machine-readable JSON
pnpm catalyst debug --json
```