uncloud is a single binary over the same REST API the console uses. Anything the
dashboard can do, the CLI can do — apps, databases, droplets, volumes, buckets,
domains, pipelines, IAM — and anything it does not model yet is still one
uncloud api call away.
Install
Sign in
~/.uncloud/config. Nothing is copy-pasted: the token is handed back to a
one-shot server bound to 127.0.0.1 that the CLI started itself, and is only
accepted when it carries the state nonce generated for that attempt.
Self-hosted control plane
Self-hosted control plane
Point the CLI at your own API and it will send you to your own console,
where your session actually exists:
CI, cron, and agents (no browser)
CI, cron, and agents (no browser)
Set two environment variables and skip sign-in entirely. They override
Mint a token with
~/.uncloud/config when present:uncloud tokens create name=ci.The shape of a command
The daily loop
deploy, status, logs, env, scale, domain, db — the commands
you run from a project directory, which need no ids.Resources
Every control-plane resource, each with
list, get, create, update,
delete and its own verbs.Raw API
uncloud api METHOD PATH for anything the other two layers do not cover.Context: what a bare command means
Most commands need to know which project and which app you mean. Rather than making you type ids, the CLI resolves them in order and stops at the first answer: Project — the-project flag, then .uncloud/config.json in the current
directory, then the project cached in ~/.uncloud/config, then your account’s
default (fetched once, then cached).
App — the -app flag, then .uncloud/config.json in the current directory.
-app accepts a name or a slug, not just an app_ id:
uncloud deploy in a directory writes .uncloud/config.json with the
app id, project id, and name. Commit it or do not — it only records which app
this directory ships to.
Global flags
These work on every command and can be written anywhere in the line:Deleting anything asks first. When stdin is not a terminal — CI, a cron job, an
agent — there is nobody to ask, so the command refuses rather than assuming yes.
Pass
-y to mean it.Output
Lists render as tables, with empty columns dropped so you are not reading a wall of blanks. Everything else prints as indented JSON.-json for anything you intend to parse:
Configuration files
Environment variables
UNCLOUD_API_URL and UNCLOUD_API_TOKEN override the
stored config when set.