Command Reference
Every deplo command, in the order the CLI defines them — purpose, flags, and the exact output you should expect. All commands exit 0 on success and 1 on any failure.
Conventions in the output samples: ✓ success, ✗ failure, → progress step, ● live. Output is colored (green = live, red = failed, cyan = URLs and actions, violet = AI content); set NO_COLOR to disable. deplo --help and deplo <command> --help print usage; deplo --version prints 0.1.0.
deplo#
Bare deplo with no arguments is the same as deplo deploy: deploy the repository in the current directory and follow the live log. See deplo deploy below for flags and output.
deplodeplo login#
Sign in with GitHub in the browser. Starts a loopback listener, opens the authorization page, and stores the resulting token at ~/.config/deplo/config.json (mode 0600). Full mechanics in Authentication.
deplo login [--token [token]]| Flag | Description |
|---|---|
| --token [token] | Paste a CLI token from deplo.in → Settings instead of using the browser. Without a value, opens a masked prompt (recommended — keeps the token out of shell history). |
$ deplo login
→ opening https://www.deplo.in/cli-auth?port=52814&state=9f2c…&host=mbp.local
(no browser? run `deplo login --token` and paste one instead)
✓ signed in patrickdev · token saved to /Users/patrick/.config/deplo/config.jsondeplo logout#
Remove the stored token from this machine. The token itself stays valid until revoked at deplo.in → Settings → CLI tokens. Running it while signed out just prints → not signed in.
deplo logout$ deplo logout
✓ signed out — token removed from this machine
revoke it fully at deplo.in → Settings → CLI tokensdeplo connect vercel#
Authorize the deplo Vercel integration in the browser. The CLI opens the authorization URL and polls every few seconds until the connection appears (up to 5 minutes). If Vercel is already connected, it says so and exits.
deplo connect vercel [--print-url]| Flag | Description |
|---|---|
| --print-url | Print the authorization URL instead of opening a browser — for SSH sessions and headless machines. |
$ deplo connect vercel
→ opening Vercel authorization… waiting
(no browser here? deplo connect vercel --print-url)
✓ connected vercel: patrickdevWith --print-url, open the printed link in any browser, authorize, then re-run deplo whoami to confirm. If nothing arrives within five minutes the CLI prints ✗ timed out waiting for the connection (5 minutes) and exits 1.
deplo connect render#
Connect Render with a Personal API key. Render has no third-party OAuth, so the CLI asks for a key (starts with rnd_) in a masked prompt and the platform validates it live against the Render API before storing it encrypted — an invalid key is never saved.
deplo connect render [--key <key>]| Flag | Description |
|---|---|
| --key <key> | Provide the key non-interactively (scripts). Also the way to rotate the key when Render is already connected. |
$ deplo connect render
create one at https://dashboard.render.com/settings#api-keys
? Render API key (rnd_…) › ********
✓ connected render: patrickdevIf Render is already connected and no --key is given, the CLI prints ✓ render already connected (patrickdev) and hints pass --key to rotate the API key.
deplo whoami#
Show the signed-in account and the provider connection checklist — the fastest way to see what is missing.
deplo whoami$ deplo whoami
✓ account patrickdev
✓ vercel patrickdev
✗ render not connected → deplo connect renderdeplo deploy#
Deploy the repository in the current directory and follow the live log. This is the full dashboard deploy loop: the CLI resolves your origin git remote to a repo the platform knows (syncing your repo list from GitHub on first sight), confirms, starts the deployment, and polls the log every 2.5 seconds until it reaches a terminal state.
deplo deploy [-y|--yes]| Flag | Description |
|---|---|
| -y, --yes | Skip confirmation prompts. Also switches the run to non-interactive mode: missing login or provider connections become errors instead of inline prompts. Prompts are likewise skipped automatically when stdout is not a TTY (CI). |
Interactive niceties, in order:
- Not signed in? It asks “You're not signed in. Sign in now?” and runs login inline. Same for providers: “Vercel isn't connected yet. Connect now?”
- Only the providers your repository actually needs are requested — Vercel when a frontend was detected, Render when a backend was. A backend-only repository is never blocked on a Vercel connection. When both are already connected the CLI skips detection entirely and goes straight to deploying.
- If the deployment pauses on
WAITING_FOR_ENV, the CLI prompts for each required environment variable (input masked), sends them, and the deployment resumes. See Environment Variables. - Log lines containing errors are shown in red; AI diagnosis lines in violet — the same content as the dashboard log.
$ deplo deploy
→ repo detected github.com/patrickdev/my-app (main)
? Deploy patrickdev/my-app? … yes
Analyzing repository…
Detected: frontend=Next.js (client/) · backend=Express (server/)
Deploying backend to Render…
Backend live: https://deplo-my-app-api.onrender.com
Injecting NEXT_PUBLIC_API_URL into frontend build
Deploying frontend to Vercel…
Frontend live: https://deplo-my-app-web.vercel.app
Deployment completed
✓ backend live https://deplo-my-app-api.onrender.com
✓ frontend live https://deplo-my-app-web.vercel.app
● Deployed in 2:41 — code went in, production URLs came out.→ this deployment needs 2 environment variables:
? DATABASE_URL › ********
? JWT_SECRET › ********
✓ env variables sent — resuming deploymentOn failure the CLI prints ✗ Deployment failed — <error>, points at deplo.in/dashboard/deployments/<id> for the full log and AI diagnosis, and exits 1 — see Troubleshooting.
deplo status#
Latest deployment state for the repository in the current directory. Run outside a repo with a GitHub remote, it falls back to your most recent deployment overall.
deplo status [--all]| Flag | Description |
|---|---|
| --all | Show the latest deployment for every project, not just this repo. |
$ deplo status
● live patrickdev/my-app (main) Next.js + Express
frontend https://deplo-my-app-web.vercel.app
backend https://deplo-my-app-api.onrender.comStatus labels: ● live, ✗ failed, ○ cancelled, ◐ waiting for env, and ◌ deploying backend-style labels for in-flight states — see Deployment Lifecycle. If the repo has never been deployed: → no deployments yet for patrickdev/my-app — run deplo deploy.
deplo list#
All projects with status, stack, and URLs — the latest deployment per repository, newest first.
deplo list$ deplo list
● live patrickdev/my-app (main) Next.js + Express
frontend https://deplo-my-app-web.vercel.app
backend https://deplo-my-app-api.onrender.com
✗ failed patrickdev/side-project (main) Vite + FastAPI
◐ waiting for env patrickdev/api-service (develop) Expressdeplo logs#
Print a deployment log. With no argument, uses the latest deployment for the current repo. For a finished deployment the log prints and exits; while a deployment is active, logs follows it live exactly like deplo deploy does — including env prompts and the final URL summary.
deplo logs [id]| Argument | Description |
|---|---|
| [id] | A deployment id (shown in the dashboard URL). Defaults to the current repo's latest deployment. |
$ deplo logs
Analyzing repository…
Detected: frontend=Next.js (client/) · backend=Express (server/)
Deploying backend to Render…
Backend live: https://deplo-my-app-api.onrender.com
Deploying frontend to Vercel…
Frontend live: https://deplo-my-app-web.vercel.app
Deployment completeddeplo open#
Open the deployed frontend URL in your browser — or the backend, or the monitoring dashboard.
deplo open [--api] [--dash]| Flag | Description |
|---|---|
| --api | Open the backend URL instead of the frontend. |
| --dash | Open the deplo monitoring dashboard for this project. |
$ deplo open
→ opening https://deplo-my-app-web.vercel.app--api and the default need a completed deployment; without one the CLI prints ✗ nothing to open yet — run deplo deploy first and exits 1.
deplo env set / deplo env ls, deplo monitor, deplo analytics, and a --json output mode are on the roadmap — they do not exist in v0.1.