Skip to main content

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. 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:
Set a custom image as default:

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

Environment variables injected via --profile (profile variables) are written to disk files (/etc/environment and /etc/profile.d/machine0-env.sh). When you snapshot a VM with images new, these files are captured in the image. Any secrets stored in profile variables will persist in the resulting snapshot. Rotate secrets after saving an image if they should not be reused.The same applies to credentials injected by --profile: ~/.config/gh/hosts.yml, ~/.codex/auth.json, ~/.codex/config.toml, ~/.claude/.credentials.json, ~/.claude/settings.json, ~/.claude.json, and ~/.machine0/auth-token are on-disk files and travel with snapshots. A codex account credential in particular self-refreshes, so an image baked from a codex-authenticated VM stays signed in on every VM created from it — log out of codex on the VM before snapshotting if that’s not what you want. Integrations connected with an API key bake that key into the snapshot too, and the key stays valid until you revoke it in the provider’s console — treat images made from API-key-authenticated VMs as carrying the key.

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 with machine0 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.

Billing

$0.078/GB/month based on disk size, billed hourly at the actual prorated cost (no minimum). See Pricing.