Skip to content
DocsGetting StartedInstalling the CLI

Installing the CLI

Everything on PocketBase Cloud can be done two ways: in the portal, or from your terminal with the pb CLI. The portal is the fastest way to see what you have; the CLI is the fastest way to change it, and the only one that works in CI.

Every guide in these docs shows both paths, so you can pick per task — they act on the same account and the same resources.

Portal CLI
Sign up, subscribe, pay — (pb cloud upgrade links you there)
Create projects and deployments
Deploy code from a directory Upload a ZIP pb cloud <kind> deploy
Environment variables
Logs ✓ (-f to follow)
Collections, records, API rules Admin panel ✓ (pb collections, pb records, pb rules)
Local PocketBase for development ✓ (pb init)
Scripting / CI ✓ (--json, --no-input, PB_TOKEN)

Install

Pick whichever fits your setup. The npm and curl | sh channels are fully independent.

npm (global)

npm i -g @pocketbasecloud/cli
pb --help

npx (no install)

npx @pocketbasecloud/cli --help

curl | sh (macOS/Linux, no Node required)

curl -fsSL https://raw.githubusercontent.com/pocketbasecloud/cli/main/scripts/install.sh | sh

Downloads the binary from the latest GitHub release, verifies its SHA-256, and installs it to /usr/local/bin (or ~/.local/bin). Override the destination with PB_INSTALL_DIR.

From source (Deno) — for platforms with no prebuilt binary:

git clone https://github.com/pocketbasecloud/cli
cd cli
deno install -g -A -c deno.json -n pb ./main.ts

Prebuilt binaries cover macOS (arm64, x64), Linux (arm64, x64), and Windows (x64; Windows-on-ARM runs the x64 build under emulation).

Log in

pb cloud login    # opens your browser
pb cloud whoami   # [email protected] — plan: Pro

login opens the portal, waits for you to authorize, and stores the token in ~/.config/pb/config.json (or $XDG_CONFIG_HOME/pb/config.json). Nothing else needs configuring — the CLI always talks to PocketBase Cloud’s own hosts.

If you don’t have an account yet, see Creating a Project — signup and choosing a plan happen in the portal.

Your first deployment

pb cloud project create my-app   # create a project
pb cloud project use my-app      # make it the default for this machine
cd db && pb cloud pb deploy --name my-app-db

deploy packages the directory, ships it, waits for the resource to come up, and prints the URL and the generated superuser login. It also records the resource in a pb.json file in that directory, so from then on a bare pb cloud pb deploy in the same place redeploys it.

Linking a directory to a resource

Give each PocketBase, frontend, or backend its own directory and link it once. Afterwards deploy, info, rm, logs, and env need no --name/--id when run there:

cd frontend
pb cloud link frontend web   # bind ./ to the frontend named "web"
pb cloud frontend deploy     # no flags — redeploys the bound frontend
pb cloud frontend info
pb cloud unlink              # detach; the cloud resource is untouched

pb cloud link never creates or changes anything in the cloud — it only writes the binding. Deploying records it too, so the first deploy of a new resource links the directory for you.

The binding lives in pb.json next to your code. Each file carries its own projectId, so directories stay independent, and any pb cloud … command run underneath one resolves to that project automatically:

// frontend/pb.json
{
  "projectId": "dhs4xnprgplurvo",
  "kind": "frontends",
  "defaultEnvironment": "production",
  "environments": {
    "production": { "id": "…", "name": "web" }
  },
  "build": { "command": "npm run build", "outputDir": "dist" }
}

Commit pb.json — it is how your teammates and your CI deploy the same resource without passing flags.

Multiple environments

One directory can deploy to several environments — staging and production, say. Each is a separate cloud resource in the same project:

{
  "projectId": "dhs4xnprgplurvo",
  "kind": "frontends",
  "build": { "command": "npm run build", "outputDir": "dist" },
  "defaultEnvironment": "production",
  "environments": {
    "production": { "id": "…", "name": "web" },
    "staging": {
      "id": "…",
      "name": "web-staging",
      "build": { "command": "npm run build:staging" }
    }
  }
}

Pick one with --env; without it, commands use defaultEnvironment:

pb cloud frontend deploy                                   # production
pb cloud frontend deploy --env staging                     # staging
pb cloud frontend deploy --env staging --name web-staging  # creates it
PB_ENV=staging pb cloud frontend deploy                    # for a whole shell

--env works the same on info, rm, logs, and env. pb cloud environments lists what the directory targets, and pb cloud unlink --env staging forgets one (--all forgets them all).

Global flags

Flag What it does
--json Machine-readable output on stdout (build output goes to stderr)
--yes, -y Skip confirmation prompts
--no-input Fail instead of prompting
--interactive, -i Prompt for missing values instead of erroring
--project <id> Which project a cloud … command targets
--profile <name> Which saved instance login a non-cloud command targets
--version, -v / --help, -h Version / help

Run pb --help for the full command list, or pb <command> --help for one command. pb --help --json prints the whole command manifest — useful when driving the CLI from a script or an AI agent.

Running in CI

Authenticate with a token instead of a browser login, and make every command fail rather than ask:

export PB_TOKEN=# a PocketBase Cloud user token

pb cloud whoami --json                       # preflight
pb cloud frontend deploy --no-input --json   # never prompts

PB_TOKEN is all a CI job needs to set. Errors are printed as {"error":"…"} on stderr with a non-zero exit code:

Code Meaning
2 Usage error
3 Not permitted (plan or slot limit)
4 Not authenticated
5 Timed out
6 The resource finished in a failed state
7 Your build command failed

Working with any PocketBase instance

Beyond the cloud commands, pb administers any PocketBase — cloud-hosted, self-hosted, or the one running on your laptop:

pb use https://my-instance.pocketbasecloud.com   # select an instance
pb login                                         # log in as superuser
pb collections ls
pb records ls posts
pb settings backup create

See Managing Your Instance for the full set.

Next steps