3
Manage microVMs with one focused CLI
mvmctl is the modern way to run microVMs — get the startup speed of containers with the security and isolation of traditional VMs. Built for developers who need lightweight, fast-booting virtual machines without the overhead.
18
Linux
Terminal
# interactive host setup
mvm init
mvm kernel pull --type firecracker
mvm image pull ubuntu --version 24.04
mvm vm create myvm --image ubuntu:24.04
mvm exec myvmWhat mvmctl gives you
Container speed with VM isolation — one CLI to create, connect, snapshot, and tear down Firecracker microVMs. Single binary, zero runtime deps, all the ergonomics you expect from a modern tool.
Fast as containers, isolated as VMs
2-4 second boot with a dedicated kernel per VM. Rootfs is loop-mounted in-place — no extraction, no kernel sharing. Firecracker at the core, KVM isolation at the edges. Container-like ergonomics, real VM isolation.
- 2-4s boot with dedicated kernel per VM
- Loop-mount provisioner — mount, don't extract
- mvm vm create && mvm ssh — works like docker run, but with KVM
Everything you need, nothing you don't
One statically-linked Go binary, no runtime dependencies. One command for the kernel, one for the image. mvmctl pulls every piece of the Firecracker stack so you don't have to hunt for matching versions.
- Single binary — zero runtime deps, just drop it in your PATH
- mvm kernel pull — tuned kernels on demand
- mvm image pull — ready-to-boot images, or import from a running VM
- mvm init — idempotent host setup: KVM, bridges, firewall, sudoers
No SSH required
Commands, file transfer, and console access all work over vsock — no SSH daemon, no exposed ports, no guest networking needed.
- mvm exec — run commands via embedded vsock agent
- mvm cp — file transfer over vsock, no tar-over-SSH
- mvm console — serial console relay via PTY + Unix socket
Environment as code
Define complete VM environments in a single YAML spec. One command to apply, one to destroy. Batch creation with atomic rollback.
- Declarative YAML with dependency ordering
- Atomic batch — all succeed or all roll back
- mvm env apply / mvm env destroy
Real host integration
Run mvm init once and the host is ready — KVM, bridge networking, firewall, sudoers. Day-to-day commands never need sudo.
- Idempotent mvm init — KVM, bridges, firewall, sudoers
- Named bridge networks with NAT via nftables or iptables
- Persistent volumes — attach, resize, detach, survive VM teardown
Custom kernels & snapshots
Pre-built Firecracker kernels or custom official builds with extra features. Snapshot a running VM and restore it later, state intact.
- Firecracker CI kernels or custom builds with --features
- Kernel config overlays for advanced use cases
- Snapshot running VMs and restore later
SSH that just works
Import or generate keys with mvm key, set defaults — every VM picks them up automatically. No cloud-init edits, no post-bake injection.
- mvm key import — add existing host keys to the cache
- mvm key create — generate keypairs, set as default
- Defaults auto-inject on mvm vm create, no --ssh-key flag needed
- mvm ssh <vm> — full shell, private key auto-detected
Install it your way
Use tabs to switch install paths. Binary is the fastest route to first boot.
Prebuilt binary
Recommended · no Go toolchain needed
Terminal
# See https://github.com/AlanD20/mvmctl/releases for all versions
mkdir -p ~/.local/bin
curl -L -o ~/.local/bin/mvm https://github.com/AlanD20/mvmctl/releases/latest/download/mvm
chmod +x ~/.local/bin/mvm
mvm --helpAUR (Arch Linux)
Available as mvmctl-bin
Terminal
yay -S mvmctl-bin
mvm --helpFrom source
For development and contribution
Terminal
git clone https://github.com/AlanD20/mvmctl
cd mvmctl
./scripts/build.sh release --output ~/.local/bin/mvm
mvm --helpInstallation + first-boot docs
Follow a concise path from Linux prerequisites to host initialization and your first running VM.