Free tools · Machines

Create a Linux virtual machine from the command line

Create and boot a Linux virtual machine on an Apple silicon Mac with a single 1vm command. Prepared environment recipes install Node.js, Python, Go or Rust and leave a clean snapshot behind, so a development box needs no ISO and no golden image.

macOS 26 or later · Apple silicon · free on both tiers

Step by step

  1. 1vm create dev --recipe node

    Downloads a Debian 13 ARM64 base image, installs and checks Node.js, then leaves the machine stopped on a clean snapshot.

  2. 1vm recipe list

    The catalog: clean Debian, Node.js, Python, Go and Rust, with the packages each one installs.

  3. 1vm start dev

    Boot it. Add --detach to hand it to a helper process and get your shell back.

  4. 1vm ssh dev

    An interactive shell in the guest. `1vm exec dev -- <cmd>` runs one command instead.

Worth knowing

  • A recipe machine is prepared once. `1vm recipe status dev --json` reports setup state and the installed tool versions, and `1vm recipe retry dev` re-runs a failed preparation.
  • `--no-start` downloads and seeds the machine without booting it, so preparation can run later.
  • Free keeps two machines in the library and runs one at a time. Recipes, guests and speed are identical on both tiers.

The long version

This page is the short path. For the whole area in prose — the options, the edge cases and what to do when it does not work — read Your first machine.

Related

Frequently asked questions

Do I need to download an ISO?

Not for a recipe. `1vm create <name> --recipe <id>` fetches a Debian 13 ARM64 base image itself. You only supply an ISO when you want a distribution the recipes do not cover, with `--iso <path>`.

Which Linux distributions run?

Anything with an ARM64 build. Apple's Virtualization.framework is the default Linux path and is the mature one; `1vm guide linux` prints what is supported and what is not before you commit.

How do I give it more CPU or memory?

At create time with `--cpu <n>`, `--memory 8GiB` and `--disk 64GiB`, or afterwards with `1vm set <vm> <key> <value>`, which applies live where the backend supports it.