Runsite CLI
runsite is the command-line version of the dashboard. It talks to the same
Public API, signs in with an API key, and behaves
the same on your laptop as it does in a CI job.
runsite deploy my-apirunsite logs my-api --tail 200runsite env set my-api LOG_LEVEL=debugInstall
Section titled “Install”Linux and macOS
curl -fsSL https://raw.githubusercontent.com/runsite-platform/runsite-cli/main/install/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/runsite-platform/runsite-cli/main/install/install.ps1 | iexThe installer picks the build for your operating system and CPU, checks it against
SHA256SUMS.txt from the release, and puts the binary in ~/.local/bin/runsite
(%LOCALAPPDATA%\runsite\bin on Windows). Builds exist for Linux (x86_64 and
arm64), macOS (Intel and Apple silicon) and Windows.
Two variables change what it does: RUNSITE_VERSION=v0.1.0 pins a version, and
RUNSITE_INSTALL_DIR chooses where the binary lands.
Check it worked:
runsite --versionLog in
Section titled “Log in”runsite login # email and passwordrunsite login --token ak_live_... # an API key from the dashboardrunsite whoami # who am I signed in as?runsite login creates an API key for this machine and saves it in
~/.config/runsite/config.toml.
If you signed up with Google or GitHub you have no password to type. Create a key
in the dashboard under Settings → API keys and pass it with --token.
runsite logout deletes the local copy of the key. The key itself keeps working
until you revoke it in the dashboard, so revoke it there if a laptop is lost.
Services
Section titled “Services”runsite service list # services in the current projectrunsite service list --all # services in every projectrunsite service status my-apirunsite service start my-apirunsite service stop my-apirunsite service restart my-apiThe service name is optional. If you have only one service, or one service in the
project you picked with runsite project use, the CLI works out which one you
mean. A UUID works anywhere a name does.
Start, restart and deploy do different things:
| Command | What happens |
|---|---|
runsite service start | Runs the image that was already built |
runsite service restart | Restarts the running container, no rebuild |
runsite deploy | Builds the current commit and releases it |
Deploy and read logs
Section titled “Deploy and read logs”runsite deploy my-api # build and release the current commitrunsite logs my-api # last 100 linesrunsite logs my-api --tail 200runsite deploy queues the build and returns. Watch the build itself in the
dashboard, or check on it later with runsite service status.
Environment variables
Section titled “Environment variables”runsite env list my-apirunsite env set my-api DATABASE_URL=postgres://... LOG_LEVEL=debugrunsite env delete my-api LOG_LEVELNames must be uppercase and start with a letter (^[A-Z][A-Z0-9_]*$). Setting a
name that already exists overwrites it. A change reaches the container on the
next deploy or restart, not immediately.
Projects and profiles
Section titled “Projects and profiles”runsite project listrunsite project use my-project # look up names inside this project only
runsite context show # active profile, API URL, project, userrunsite context set-url https://api.runsite.appProfiles keep separate accounts or environments apart. Each one has its own key, project and API URL:
runsite --profile staging loginrunsite --profile staging service listSet RUNSITE_PROFILE=staging instead of typing --profile every time.
Put an API key in RUNSITE_API_TOKEN and skip runsite login entirely:
- name: Deploy env: RUNSITE_API_TOKEN: ${{ secrets.RUNSITE_API_TOKEN }} run: | curl -fsSL https://raw.githubusercontent.com/runsite-platform/runsite-cli/main/install/install.sh | sh ~/.local/bin/runsite deploy my-apiGive the CI key the write scope. It never needs admin.
JSON output
Section titled “JSON output”Every command that prints something takes --output json, so you can pipe it:
runsite service list --output json | jq '.[] | select(.status != "running") | .name'Shell completions
Section titled “Shell completions”runsite completions bash > /etc/bash_completion.d/runsiterunsite completions zsh > ~/.zfunc/_runsiterunsite completions fish > ~/.config/fish/completions/runsite.fishNot available yet
Section titled “Not available yet”runsite shell, runsite run and runsite deploy --watch need a live WebSocket
connection, which the Public API does not yet open to API keys. Until it does,
use the dashboard for an interactive shell and for streaming build logs.
Common problems
Section titled “Common problems”| What you see | What to do |
|---|---|
401 Invalid access token | The key was revoked, rotated or expired. Run runsite login again, or pass a fresh --token |
403 on deploy or env set | The key is read-only. Create one with the write scope |
| ”service not found” | The name belongs to another project. Run runsite project use, or add --all to service list |
runsite: command not found | ~/.local/bin is not on your PATH. Add it to your shell profile |
| Your change did not take effect | Environment variables apply on the next deploy or restart |
Questions people ask
Section titled “Questions people ask”Do I need a password to use the CLI?
No. If you signed in with Google or GitHub, create an API key in the dashboard
and use runsite login --token ak_live_....
Where is the API key stored?
In ~/.config/runsite/config.toml on Linux and macOS. runsite logout removes
it locally; revoke it in the dashboard to kill it everywhere.
Can one machine hold two accounts?
Yes, that is what profiles are for. runsite --profile staging login keeps a
second key, project and API URL side by side with your default.
Does runsite deploy wait for the build?
No. It queues the deployment and returns. Follow the build in the dashboard, or
let an AI assistant watch it through the MCP server.
See also
Section titled “See also”- MCP server — the same actions, driven by an AI assistant
- API keys — create, scope, rotate and revoke keys
- Public API — what the CLI calls underneath
- runsite-cli on GitHub — source and releases