Skip to main content

Creating a VM

machine0 new my-vm
The default size is small (1 vCPU, 1 GB RAM, instant boot) in the eu region. Override with flags:
machine0 new my-vm --size large --region us --image ubuntu-24-04 --key my-key
FlagDescriptionDefault
--sizeVM size (small through xxxl, or GPU sizes)small
--regionus, uk, eu, or asiaeu
--imageImage slugubuntu-24-04 (auto-selects GPU image for GPU sizes)
--keySSH key nameYour default key
--enable-proxyHTTPS proxy at <vm>.mac0.iotrue
Creating a VM requires enough wallet balance for at least 10 hours of usage.

Listing VMs

machine0 ls
Shows a table of all your VMs with name, status, IP, size, and region.

VM details

machine0 get my-vm
Shows full details including hardware specs, pricing, IP, SSH key, and timestamps.

Lifecycle

Start a stopped VM:
machine0 start my-vm
Stop a running VM:
machine0 stop my-vm
Reboot a running VM:
machine0 reboot my-vm
Stopped VMs still incur charges because they reserve cloud resources. Destroy a VM to stop billing entirely.

SSH access

Connect interactively:
machine0 ssh my-vm
Run a command directly:
machine0 ssh my-vm "docker ps"
Use --username to connect as a different user (default is ubuntu):
machine0 ssh my-vm --username ubuntu
If the VM is still starting, the CLI waits for SSH to become available.

Updating a VM

Rename a VM or toggle its HTTPS proxy:
machine0 update my-vm --name new-name
machine0 update my-vm --enable-proxy false

Destroying VMs

Destroy a single VM:
machine0 rm my-vm
Destroy all VMs:
machine0 rm --all
Skip the confirmation prompt with --yes:
machine0 rm my-vm --yes

HTTPS proxy

Every VM gets an HTTPS endpoint at https://<vm-name>.mac0.io that proxies to port 80 on the VM. This is enabled by default and can be toggled with --enable-proxy.

Fixed IPs

Every VM gets a dedicated public IP for its lifetime. The IP is shown in machine0 get <vm> and machine0 ls output.

Ansible provisioning

Run an Ansible playbook against a VM:
machine0 provision my-vm playbook.yml
The CLI waits for SSH availability before running the playbook. This is how the base-24-04 system image is built — see the machine0 Ansible playbook.