Skip to content

Installation

Terminal window
curl -fsSL https://raw.githubusercontent.com/tinylabscom/mvm/main/install.sh | sh
Terminal window
MVM_VERSION=v0.7.0 curl -fsSL https://raw.githubusercontent.com/tinylabscom/mvm/main/install.sh | sh
Terminal window
git clone https://github.com/tinylabscom/mvm.git
cd mvm
cargo build --release
cp target/release/mvmctl ~/.local/bin/
Terminal window
cargo install mvmctl
Terminal window
mvmctl update
  • macOS Apple Silicon or Linux with /dev/kvm (x86_64 or aarch64)
  • Homebrew (macOS only — mvmctl will install it if missing)

mvmctl automatically detects your platform at startup and selects the best VM backend:

PlatformBackendWhat happens
Linux with /dev/kvmFirecrackerRuns directly on KVM. Smallest attack surface, fastest cold boot.
macOS 26+ Apple SiliconApple ContainerNative Virtualization.framework. No Docker Desktop required.
macOS Apple SiliconlibkrunDirect Hypervisor.framework backend.
Linux without /dev/kvmDockerTier 3 fallback when no microVM backend is available.
Docker availableDockerTier 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.

After installation, run the setup wizard:

Terminal window
mvmctl init

This 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:

Terminal window
mvmctl up --flake . --hypervisor libkrun
mvmctl up --flake . --hypervisor firecracker
mvmctl up --flake . --hypervisor docker
mvmctl up --flake . --hypervisor qemu # microvm.nix

Use mvmctl doctor to check which backends are available on your system.