# Manage your apps from a terminal with the blitz command

> The blitz command lists your apps, puts new ones online from the App Store, a Docker image or GitHub, restarts and pauses them, runs a command inside one, shows their logs and changes their settings. One file, Node.js 18 or newer, an API key.

Web page: https://blitz.cloud/docs/cli/
Updated: 2026-10-15

`blitz` is a small command for your terminal. It does the everyday things you would otherwise click in the dashboard: list your apps, put a new one online, restart it, read its logs, change a setting. It is one file and needs Node.js 18 or newer, nothing else.

It talks to the same server AI assistants use, with an API key, so it can do what they can do and has the same limits. See [connect an AI assistant](https://blitz.cloud/docs/ai-assistants/) for how keys work.

## Install

On macOS and Linux:

```
curl -fsSL https://blitz.cloud/cli/blitz.js -o ~/.local/bin/blitz
chmod +x ~/.local/bin/blitz
```

`~/.local/bin` must be on your `PATH`; any folder that is works too. On Windows, save the file and run it with `node blitz.js`.

## Sign in

Make a key on the [AI tools](https://dashboard.blitz.cloud/ai) page, then:

```
blitz login
```

Paste the key when asked. `blitz` tries it once and saves it in `~/.config/blitz/config.json`, readable only by you. On a server or in CI, set `BLITZ_API_KEY` instead. `blitz logout` removes the saved key from this computer; revoke it on the AI tools page to stop it working everywhere.

## Commands

```
blitz apps                                 your apps, their status and address
blitz app blog                             everything about one app
blitz deploy store uptime-kuma --address status
blitz deploy image nginx --tag 1.29 --port 8080 --address web
blitz deploy github lena/blog --branch main --address blog
blitz rebuild blog                         build it again from the newest commit
blitz builds blog                          its builds and why one failed
blitz logs blog --lines 200                the last lines it printed
blitz logs blog --previous                 what it printed before its last restart
blitz run blog -- ls -la /data             run one command inside the app
blitz restart blog
blitz pause blog
blitz resume blog
blitz env blog                             its settings, values hidden
blitz env set blog SMTP_HOST=mail.example.com
blitz env unset blog SMTP_HOST
blitz usage                                your plan and how much of it is used
blitz status                               whether blitz.cloud itself has a problem
```

An app can be named by its name, its address label or its id. `blitz help` lists every command and option.

Restart, pause, `run` and `env unset` ask before they do anything. Add `--yes` to skip the question in scripts. `--json` prints the server's answer as JSON, for `jq` and the like.

Everything the AI tools page lists is reachable too: `blitz tools` shows the tools, and `blitz call` runs one with JSON arguments, for example databases:

```
blitz call dbs_list
blitz call dbs_create '{"engine": "postgresql", "name": "blog-db"}'
```

## Good to know

- Every change `blitz` makes shows up in your account's history with the name of the key it used.
- A command that is refused says why in one sentence and exits with code 1, so a script can stop there.
- There is no live log stream yet. `blitz logs` shows the last lines, up to 500.
- `blitz run` sends each word after `--` to the app exactly as you typed it. For a pipe or anything a shell would need to read as one piece, wrap it in quotes: `blitz run blog -- sh -c 'ls | wc -l'`.
- A run has no input after it starts, stops listening after 60 seconds, keeps up to 64 KB of output, and allows 20 commands a minute. An image with no `sh` cannot run one. The command text stays in your history with passwords masked.
