Skip to main content

new

Create a VM.

order

Order a VM. If the size is available it’s created immediately (like new). 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.
Takes all of new’s flags, plus:
An 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 is UNAVAILABLE (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.
Stopped VMs still incur charges. Suspend or destroy to stop billing.

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.
Like 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.
Turning metrics off while idle detection is active is an error — disable idle detection first (--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.
See Provisioning for details.

sizes

Show available VM sizes and pricing.