Documentation Index
Fetch the complete documentation index at: https://docs.celesto.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
VMConfig is a Pydantic model that defines the configuration for creating a microVM. It specifies CPU, memory, kernel, rootfs, and other runtime settings.
Model Definition
Fields
Unique identifier for the VM. Must be lowercase alphanumeric with hyphens or underscores, matching the pattern
^[a-z0-9][a-z0-9_-]{0,62}[a-z0-9]$ or a single character ^[a-z0-9]$.If omitted or explicitly set to None, SmolVM auto-generates an ID in the format vm-<8-char-hex> (for example, vm-a1b2c3d4).Number of virtual CPUs. Valid range: 1-32.
Memory size in MiB (mebibytes). Valid range: 128-16384.
The operating system running inside the VM. Used by SmolVM to pick the right
QEMU machine type, firmware, and device topology.Valid values:
GuestOS.ALPINE— Alpine Linux (default).GuestOS.UBUNTU— Ubuntu Linux.GuestOS.WINDOWS— Windows 11. Requiresboot_mode="firmware"andbackend="qemu", and only runs on Linux hosts. See Windows guests.
How the VM boots:
"direct_kernel"— Boot a Linux kernel directly. Requireskernel_path. Used by every Linux sandbox."firmware"— Boot through UEFI firmware reading the disk’s own boot manager. Required for Windows guests.kernel_pathmust beNone.
Path to the kernel image file. The path must exist and point to a valid file. Set to
None (and omitted) when boot_mode="firmware".Path to the root filesystem image. The path must exist and point to a valid file.
Kernel boot arguments. For SSH-capable VMs built with ImageBuilder, include
init=/init.Runtime backend override. Valid options:
"firecracker": Use Firecracker VMM"qemu": Use QEMUNoneor"auto": Auto-detect based on host capabilities
How the QEMU backend connects the guest to the network. Ignored when
backend="firecracker" (Firecracker always uses a host TAP device)."slirp"— Userspace NAT with host port forwards. Works without root or host network setup, which makes it the right choice for local macOS development. This is the default."tap"— Attach the guest to a host TAP device on Linux, so the sandbox gets a real routable IP and falls under the same nftables NAT and isolation rules as Firecracker (egress masquerade, cross-sandbox drop, and IMDS block). Use this for multi-tenant or production Linux hosts where you need the same network isolation guarantees as Firecracker. Requires the same Linux network setup as Firecracker (ip,nft, sudo) — see network configuration.
Disk lifecycle mode:
"isolated": Clone rootfs per VM for sandbox isolation. Each VM gets its own copy."shared": Boot directly fromrootfs_path. Multiple VMs can share the same disk image.
Whether to keep the isolated VM disk after deletion. When
True, a later create operation with the same VM ID can reuse prior disk state.Only applies when disk_mode="isolated".Environment variables to inject into the guest after boot via SSH. Keys must be valid shell identifiers (matching
^[a-zA-Z_][a-zA-Z0-9_]*$).Variables are persisted in /etc/profile.d/smolvm_env.sh and affect new SSH sessions/login shells.Requires an SSH-capable image (boot args must contain init=/init).Optional network bandwidth limit in megabits per second. When set, SmolVM caps the guest’s outbound traffic to this rate. Must be at least 1.
Host-to-guest TCP port forwards configured at VM launch. Each entry maps a
host_port to a guest_port. Host and guest ports must be unique within the list.Additional block-device image paths to attach at boot. Each path must exist and point to a valid file.
Validation Rules
Path Validation
Bothkernel_path and rootfs_path are validated to ensure:
- The path exists on the filesystem
- The path points to a file (not a directory)
Environment Variable Validation
All keys inenv_vars must be valid shell identifiers:
- Start with a letter or underscore
- Contain only letters, numbers, and underscores
- Pattern:
^[a-zA-Z_][a-zA-Z0-9_]*$
ValidationError during model instantiation.
VM ID Validation
Thevm_id must:
- Be lowercase
- Start and end with alphanumeric characters
- Contain only lowercase letters, numbers, and hyphens
- Be 1-64 characters long
Usage Examples
Basic Configuration
Custom VM ID and Resources
SSH-Capable VM with Environment Variables
Shared Disk Mode
Persistent Isolated Disk
Windows guest
Boot a pre-installed Windows 11 image. Requiresboot_mode="firmware" and the QEMU backend; SmolVM enforces both invariants.
SmolVM(os="windows", image=...) — it constructs this config for you.
QEMU Backend
Immutability
VMConfig instances are frozen and cannot be modified after creation:Integration with SmolVM
Pass VMConfig to the SmolVM constructor:Building Images for VMConfig
UseImageBuilder to create kernel and rootfs images:
Field Summary
| Field | Type | Default | Range/Validation |
|---|---|---|---|
vm_id | str | Auto-generated | ^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$ |
vcpu_count | int | 2 | 1-32 |
memory | int | 512 | 128-16384 |
guest_os | GuestOS | GuestOS.ALPINE | alpine, ubuntu, windows |
boot_mode | Literal | "direct_kernel" | "direct_kernel", "firmware" |
kernel_path | Path | None | Required for direct_kernel | Must exist as file |
rootfs_path | Path | Required | Must exist as file |
extra_drives | list[Path] | [] | Each must exist as file |
boot_args | str | "console=ttyS0 reboot=k panic=1 pci=off" | Any string |
backend | str | None | None | "firecracker", "qemu", None |
qemu_network | Literal | "slirp" | "slirp", "tap" |
disk_mode | Literal | "isolated" | "isolated", "shared" |
retain_disk_on_delete | bool | False | True, False |
env_vars | dict[str, str] | {} | Keys must be valid shell identifiers |
network_rate_limit_mbps | int | None | None | >= 1 when set |
port_forwards | list[PortForwardConfig] | [] | No duplicate host or guest ports |
