vmlab turns a single vmlab.wcl into a running fleet of VMs — machines, networks, and provisioning, wired automatically. Boot, snapshot, and tear down complex topologies with one command.
Describe machines, networks, and provisioning in one file. vmlab up does the rest.
Runs x86_64, aarch64, and riscv guests — all emulated on an x86_64 host.
Virtual switches, NAT, DNS, and DHCP are provisioned per lab on private subnets — no manual wiring.
Capture a single VM or the whole lab, then roll back to any snapshot in seconds.
Share files and run commands inside guests over the QEMU agent — no network connectivity to the VM required.
Distribute templates through any OCI container registry like GitHub — or pull defaults from templates.vmlab.io.
Drive keyboard, mouse, and OCR-based screen reads over VNC or QEMU sockets — script GUI flows headlessly.
Script setup with wscript — handle sysprep, wait for the OS to be ready, then gate the next steps on it.
Spin up machines as qcow2 linked clones of a base image — labs share backing files and stay small on the host.
Define a template block in your vmlab.wcl and vmlab builds a reusable image — no extra tooling.
Linux, or Windows 11 via WSL 2 or Docker · QEMU/KVM