Command reference
Every command is called as pyvolt <command>. DOMAIN is the app's domain
(e.g. myapp.on.pyvolt.com) or any fragment of it that matches exactly one
app, so pyvolt deploy myapp works fine - domains are unique across the
platform, so a domain always identifies exactly one app on exactly one
server.
Scripts and AI tools. Add the global --json flag before the command
(pyvolt --json apps, pyvolt --json status myapp) to get raw JSON instead of a
table - a stable, parseable contract for scripts, CI and LLM coding assistants.
For headless auth, set PYVOLT_TOKEN (and PYVOLT_API_URL if self-hosting)
instead of running pyvolt login.
Create an app
| Command |
Arguments |
Description |
apps create |
--server NAME --domain DOMAIN --repo OWNER/REPO [options] |
Creates an app on one of your servers - the headless twin of the dashboard's Add app form. Autodiscovery reads the repo and prefills the framework, serve and release commands; every flag overrides what it found. Exits non-zero if scaffolding on the server fails, and warns if the deploy key could not be pushed. Follow up with pyvolt deploy DOMAIN --follow. |
--domain does double duty: a bare word like myapp becomes the Pyvolt
subdomain myapp.preview.pyvolt.com; anything containing a dot is treated as
a full custom domain. Use --repo OWNER/REPO for a repository your GitHub
connection can access (this is what enables autodiscovery and the automatic
deploy key), or --repo-url with a raw git URL for anything outside it.
Options: --branch (default main), --path for the project directory in a
monorepo, --env KEY=VALUE (repeatable) for create-time variables, and
--serve-command / --release-command / --build-command / --python to
override detection. --dry-run prints the resolved plan - domain, repo,
detected framework and commands - without creating anything.
Deployments
| Command |
Arguments |
Description |
deploy |
DOMAIN [--follow] |
Redeploys the latest commit on the app's GitHub branch (same as the Deploy button - it does not push local code). Handy to redeploy after an env change or to retry; normally a git push deploys for you. --follow streams the log live and exits non-zero on failure, so it slots straight into scripts and CI. If a deployment is already in flight you get a clear message instead of a duplicate run. |
deployments |
DOMAIN |
Recent deployment history: commit sha, message, status, who triggered it, and how long it took. |
Environment variables
The domain comes first, then the operation: pyvolt env DOMAIN <op>.
| Command |
Arguments |
Description |
env DOMAIN list |
|
Shows the app's variables. Secret values are masked. |
env DOMAIN get |
KEY |
One variable's value, unmasked (it's your own secret) - handy in scripts. |
env DOMAIN set |
KEY=VALUE ... |
Upserts variables - the .env on the server is regenerated and the app restarted. Multiple pairs in one call are fine. |
env DOMAIN rm |
KEY |
Removes a variable - same regenerate + restart. |
Processes & logs
| Command |
Arguments |
Description |
ps |
DOMAIN |
Lists the app's background processes with their live systemd state. |
ps restart |
DOMAIN restart NAME |
Restarts one background process by name. |
logs |
DOMAIN [--process NAME] [-n LINES] |
Tails the app's journal - the last 100 lines by default, up to 500 with -n. --process reads a named background process instead of the web app. |
Inventory
| Command |
Arguments |
Description |
servers |
|
Your servers, with provider, status and connectivity. |
apps |
[--server NAME] |
Your apps, with status, repo and branch. --server filters to one server. To make a new one, see Create an app. |
status |
DOMAIN |
One app's details: status, live URL, dashboard URL, repo and branch. |
metrics |
SERVER |
Latest CPU / memory / disk / network snapshot for a server. |
open |
DOMAIN [--print] |
Opens the app's dashboard in your browser. --print prints the live + dashboard URLs to stdout instead (headless / agent use). |
SSH
| Command |
Arguments |
Description |
ssh |
SERVER [--app DOMAIN] |
Opens a shell on the server as the pyvolt app-user - resolves the host/port and execs your local ssh. --app cds into that app's directory on connect. Needs your key on the box; add it under Account → SSH Keys (see the SSH access guide). |
SSH protection (fail2ban)
Locked yourself out with a few failed SSH logins? These work even while your IP is banned - they go through Pyvolt's connection to the server, not yours.
| Command |
Arguments |
Description |
bans |
SERVER |
IPs currently banned by fail2ban, with your own IP flagged (“this is you”) so you can confirm a self-ban before acting. |
unban |
SERVER [IP] [--me] |
Lifts a ban. --me unbans your own public IP without you having to look it up. Bans also expire on their own after a few minutes. |
Account
| Command |
Arguments |
Description |
login |
|
Authorizes this machine via your browser - no password in the terminal. The flow is described on Installation & login. |
whoami |
|
Shows which account this machine is authorized as. |
logout |
|
Removes this machine's token. Revoking it fully happens under Account → API in the dashboard. |
View this page as markdown
- handy as context for your AI tools. Full index at /llms.txt.