Installation
One-Liner
Section titled “One-Liner”curl -fsSL https://raw.githubusercontent.com/tinylabscom/mvm/main/install.sh | shPin a Version
Section titled “Pin a Version”MVM_VERSION=v0.7.0 curl -fsSL https://raw.githubusercontent.com/tinylabscom/mvm/main/install.sh | shFrom Source
Section titled “From Source”git clone https://github.com/tinylabscom/mvm.gitcd mvmcargo build --releasecp target/release/mvmctl ~/.local/bin/Cargo Install
Section titled “Cargo Install”cargo install mvmctlSelf-Update
Section titled “Self-Update”mvmctl updatePrerequisites
Section titled “Prerequisites”- macOS Apple Silicon or Linux with
/dev/kvm(x86_64 or aarch64) - Homebrew (macOS only — mvmctl will install it if missing)
Backend Auto-Detection
Section titled “Backend Auto-Detection”mvmctl automatically detects your platform at startup and selects the best VM backend:
| Platform | Backend | What happens |
|---|---|---|
Linux with /dev/kvm | Firecracker | Runs directly on KVM. Smallest attack surface, fastest cold boot. |
| macOS 26+ Apple Silicon | Apple Container | Native Virtualization.framework. No Docker Desktop required. |
| macOS Apple Silicon | libkrun | Direct Hypervisor.framework backend. |
Linux without /dev/kvm | Docker | Tier 3 fallback when no microVM backend is available. |
| Docker available | Docker | Tier 3 container fallback. Used only if no hypervisor backend works. |
You don’t need Nix on the host. On first build, mvm bootstraps or reuses a Linux builder VM, runs Nix evaluation and nix build inside it, and extracts the rootfs back. You run mvmctl build from the host; you do not need to enter a dev shell first. See Builder VM for the full model.
First-Time Setup
Section titled “First-Time Setup”After installation, run the setup wizard:
mvmctl initThis walks through platform detection, dependency installation (Firecracker on Linux, direct libkrun on macOS), default network setup, and XDG directory creation. Use --non-interactive for scripted environments.
Running mvmctl dev or mvmctl bootstrap also handles setup automatically — they detect your platform, select the backend, and stage the builder microVM image on first use.
You can force a specific backend with --hypervisor:
mvmctl up --flake . --hypervisor libkrunmvmctl up --flake . --hypervisor firecrackermvmctl up --flake . --hypervisor dockermvmctl up --flake . --hypervisor qemu # microvm.nixUse mvmctl doctor to check which backends are available on your system.