System images
NixOS images are built with Nix Flakes and Ubuntu images with Ansible Playbooks
GPU sizes auto-select the appropriate GPU base image (
gpu-h100x1-base, gpu-h100x8-base, or gpu-amd-base). The GPU base images only work with GPU sizes.
For NixOS on GPUs, pass --image nixos-25-11-nvidia explicitly — GPU sizes still auto-select the Ubuntu-based gpu-*-base images by default. The image ships the NVIDIA driver stack, CUDA, and the container toolkit pre-installed (docker --gpus all works out of the box), and the SSH user is nix. It runs on the supported NVIDIA GPU sizes: gpu-4000ada-1, gpu-6000ada-1, and gpu-h100-1. AMD sizes (gpu-mi300x-*) are not supported. GPU sizes are region-limited — see Pricing. Like the other GPU base images, it is hidden from machine0 images ls by default — use machine0 images ls --all. Snapshots you take of it behave like other GPU snapshots (next paragraph): they stay GPU-compatible and can be parked on a CPU size with enough disk, but the NVIDIA stack boots degraded off GPU hardware, so treat CPU sizes as parking rather than a place to run the workload.
Snapshots you take of a GPU VM are regular images with the GPU drivers baked in — you can use them with any size that has enough disk (a 1x-GPU snapshot needs 5xl or 6xl), and snapshots of those VMs stay GPU-compatible, so you can move the work back to a GPU size later. This makes it cheap to park GPU work: snapshot the GPU VM, destroy it, and pay only for snapshot storage until you need it again.
GPU and standard VMs live in different datacenters within the same region. If a snapshot isn’t yet in the datacenter your chosen size needs, machine0 new starts the transfer automatically and asks you to retry — it usually takes a few minutes (check progress with machine0 images get <image>).
Custom images
Snapshot any VM into a reusable image:Versioning
Images support multiple versions. Snapshot the same image name again to create a new version. Promote any version to be the active one. See CLI reference and MCP reference.Environment variables and snapshots
SSH client initial command and snapshots
If the source VM has an SSH client initial command set, it is copied onto the snapshot and inherited by VMs created from that snapshot (override it any time withmachine0 update). Clearing the command on a machine does not remove it from snapshots taken earlier, and pre-existing snapshots are not retroactively updated. The value is stored and displayed in plain text — don’t embed secrets in it; use profile variables for secrets. System images never carry an initial command.