Your first machine
Creating, starting and reaching a virtual machine, from the app and from the command line.
From the app
Open New Machine, pick a guest type and a hardware profile, and attach an installer if the guest needs one. Profiles are fitted to your Mac: the numbers are scaled against live host metrics, so the machine you create is one the host can actually run. A split meter shows what the guest gets and what macOS keeps.
The Installation Assistant offers four routes in, accepts a dragged ISO anywhere in the window, and states each guest's limits before you commit to the install rather than after it.
From the command line
1vm create dev --guest linux --iso ~/Downloads/ubuntu-arm64.iso
1vm start dev
start runs the machine in the foreground and owns it. Add --detach to hand
it to a helper process instead, which is what you want in a script.
The defaults for create are 4 CPUs, 4 GiB of memory and a 64 GiB sparse disk.
Override them:
1vm create big --cpu 8 --memory 16GiB --disk 256GiB
The disk figure is a ceiling, not an allocation — a 256 GiB disk consumes only what the guest actually writes.
Installer media
Installer media stays attached across reboots, because a Windows or Linux installer typically reboots midway and still needs its source. When the guest boots on its own, detach it:
1vm eject dev
Reaching the guest
1vm list # every machine, with state and address
1vm ip dev # just the address, for scripting
1vm console dev # open the guest display
1vm info dev # everything about one machine
For a Linux guest, 1vm ssh dev opens an interactive session and
1vm exec dev -- uname -a runs a single command. Windows guests route the same
exec through the guest agent instead of SSH.
To make SSH work without configuring anything by hand:
1vm ssh enable dev
1vm ssh config --install # adds an Include line to ~/.ssh/config
ssh dev
Stopping
1vm stop dev # ask the guest to shut down
1vm stop dev --force # pull the plug
1vm suspend dev # write memory to disk and power off
1vm start dev # resumes from that saved memory
suspend is not a snapshot. It saves the running state so the next start
picks up where you left off; add --discard-saved-state to cold-boot instead.
Next
Take a snapshot before you change anything — see Snapshots and rollback. It is the habit the whole product is built around.