new
Create a VM.order
Order a VM. If the size is available it’s created immediately (likenew). If it’s out of stock — common for GPU sizes — a standing order is placed instead: the VM shows up in machine0 ls as ORDERED and is created automatically as soon as capacity appears (checked every minute). You get an email when it’s running.
new’s flags, plus:
ORDERED machine bills nothing. Cancel the order with machine0 rm <vm>, or try to fill it immediately with machine0 start <vm>. If the size doesn’t become available before the expiry, the order flips to ERRORED (“order expired”) and you get an email — retry it with machine0 start, or remove it with machine0 rm.
ls
List all VMs.get
Show VM details: specs, pricing, IP, SSH key, metrics on/off, the idle detection policy (On Idle row), timestamps. For an UNAVAILABLE, ERRORED, or ORDERED VM, a Status Info row explains what happened and how to recover; a standing order also shows an Order Expires row.
start
Start a stopped or suspended VM. Suspended VMs are recreated from their snapshot with the same name, size, region, and key. Requires sufficient wallet balance. Also retries a VM that isUNAVAILABLE (the provider was out of capacity) or ERRORED after a failed create or resume, and tries to fill an ORDERED standing order right away. If the size is still out of stock, the command fails immediately with a clear error instead of leaving the VM stuck. See Machines → Out-of-capacity.
stop
Stop a running VM.reboot
suspend
Snapshot the VM, delete the cloud instance, pay only image storage.
The VM moves to
SUSPENDED. Start again with machine0 start. Destroying a suspended VM also deletes its snapshot.
rm
Destroy a VM.ssh
SSH into a VM or run a remote command.ssh, flags go before the VM name — everything after it is the remote command, passed through verbatim (so remote flags like ls -t or bash -lc 'your-command' just work). If the VM is still starting, the CLI waits for SSH. If the VM has disk attachments that are still coming up, the CLI briefly waits for those too before opening the session. Commands run under the remote user’s default non-login shell; for login-shell initialization, use machine0 ssh my-vm bash -lc 'your-command'. Running a command doesn’t allocate a terminal by default — pass -t for interactive programs like htop, sudo prompts, or TUI apps. Forcing a terminal merges stderr into stdout and rewrites line endings, so don’t combine -t with output redirection.
update
Update a VM’s name, default SSH username, SSH client initial command, metrics collection, or idle detection.--on-idle none), then --metrics false.
The SSH client initial command is legacy: it was executed by the retired machine0 mobile app’s terminal, and no maintained client runs it (the web terminal and machine0 ssh never did; still-signed-in installs of the retired app may until their sessions expire). The value is still stored and shows in machine0 get under the SSH key; images created from the VM copy it onto the snapshot, and VMs created from that snapshot inherit it. It is stored and displayed in plain text — don’t embed secrets in it; use profile variables for secrets.
provision
Provision a VM with a Nix flake or Ansible playbook.<source> can be a local directory, flake.nix path, remote flake ref, or .yml playbook. Append #profile to pick a specific NixOS configuration.