SmolVM can boot a Windows 11 sandbox alongside its Linux sandboxes. You bring a pre-installed Windows disk image (aDocumentation Index
Fetch the complete documentation index at: https://docs.celesto.ai/llms.txt
Use this file to discover all available pages before exploring further.
.qcow2 file), and SmolVM handles the firmware, virtual TPM, and QEMU wiring for you.
This guide explains when to use Windows guests, what you need before you start, and how to launch one.
Windows guest support is the first phase of a larger effort. Today it boots an existing Windows 11 image on Linux hosts. Building the image from an ISO, SSH-into-Windows automation, host mounts, network controls, and snapshots are not yet supported — see Current limitations.
What this is
A Windows sandbox is a virtual machine that runs the real Windows 11 operating system instead of Linux. You’d reach for it when:- You’re testing software that only ships for Windows.
- You’re building an agent that needs to drive a Windows desktop or Windows-only application.
- You want a disposable Windows environment that won’t touch your host machine.
SmolVM(...) in Python — and is isolated from your host using KVM hardware virtualization.
Before you start
You need three things on the host:- A Linux host with KVM. Windows guests use QEMU + KVM. macOS hosts are not supported yet.
- A pre-installed Windows 11
qcow2disk image. SmolVM does not build one for you in this release. You can install Windows 11 once into aqcow2using QEMU directly, then point SmolVM at that file. - OVMF (UEFI firmware) and
swtpm(software TPM). Windows 11 requires UEFI Secure Boot and TPM 2.0. SmolVM looks for OVMF in the standard distro install paths and will tell you exactly which package to install if it’s missing.
- Debian / Ubuntu
- Fedora
- Arch
Launch a Windows sandbox
PointSmolVM at your Windows qcow2 file and pass os="windows":
- SmolVM copies the OVMF UEFI variable store to a per-VM location so the firmware can persist boot order independently.
- It starts a per-VM
swtpmsoftware TPM 2.0 process. - It launches QEMU with the right machine type (
q35), Hyper-V enlightenments for performance, and avirtio-scsiroot disk. - On
stop()ordelete(), theswtpmsidecar and per-VM firmware state are cleaned up.
Accepted image paths
image= accepts any of these for Windows guests:
- An absolute path:
image="/var/lib/vms/win11.qcow2" - A tilde-relative path:
image="~/win11-vm/disk.qcow2" - A
file://URI:image="file:///var/lib/vms/win11.qcow2"
Memory defaults
Windows 11 defaults to 4096 MiB of RAM in SmolVM. The minimum that boots is 2 GiB, but Edge and Defender want more. Override withmemory=:
How os= and image= work together
SmolVM uses two slightly different rules depending on where the image comes from:
| Image source | Pass os=? | Why |
|---|---|---|
Local file (path or file://) | Yes | The file alone doesn’t tell SmolVM which OS is inside. |
| Published S3 image | No | The image manifest already records the OS — passing os= errors. |
os="windows".
Current limitations
The first release of Windows guest support is deliberately narrow. The following raise a clear error rather than silently misbehaving:- Linux hosts only. macOS support comes in a later phase.
- No
mounts=. Host directory mounts (virtio-9p) are Linux-guest only for now. - No
internet_settings=. Domain allowlists and egress controls are not yet wired into the Windows network stack. - No snapshots.
vm.snapshot()andSmolVM.from_snapshot()are rejected for Windows VMs — Windows guests use multiple state artifacts (qcow2 + UEFI vars + TPM state) that can’t be checkpointed atomically yet. - No SSH
vm.run(...). Command execution over SSH is a Linux-guest feature; on Windows you interact with the VM through its desktop. - You bring the image. SmolVM does not build a Windows
qcow2from an ISO for you in this release.
ValueError with a plain-English message naming the feature and the workaround.
Troubleshooting
OVMF not found
OVMF not found
SmolVM probes the four standard install paths (Debian, Fedora, Arch, Homebrew). If none match, it raises a
ValueError naming the package to install. Re-run after installing the ovmf / edk2-ovmf package from the table above.`swtpm` not found
`swtpm` not found
Install the
swtpm package from your distro. The error message includes the install hint.Local image not found
Local image not found
image= must point at an existing .qcow2 file. Tilde and relative paths are expanded against your current working directory.Windows guests need a pre-installed disk image
Windows guests need a pre-installed disk image
You passed
os="windows" without image=. SmolVM does not build a Windows image for you yet — point at a qcow2 you’ve already installed Windows into.Next steps
Backends
Why Windows guests run on QEMU
VMConfig
The full configuration model, including
guest_osSmolVM API
All constructor arguments, including
os= and image=VM lifecycle
Start, stop, and delete sandboxes
