Smolvm
Tool to build & run portable, lightweight, self-contained virtual machines.
Install / Use
/learn @smol-machines/SmolvmREADME
smolvm
A local tool to build and run portable, lightweight, self-contained virtual machines.
Each workload runs in its own Linux microVM with a separate kernel. The host filesystem, network, and credentials are isolated unless explicitly shared.
Install
curl -sSL https://smolmachines.com/install.sh | bash
Or download from GitHub Releases.
Quick Start
# Run a command in an ephemeral VM (cleaned up after exit)
smolvm machine run --image alpine -- echo "hello from a microVM"
# Interactive shell
smolvm machine run -it --image alpine
# Persistent machine (survives stop/start)
smolvm machine create --net myvm
smolvm machine start --name myvm
smolvm machine exec --name myvm -- apk add sl
smolvm machine exec --name myvm -it -- /bin/sh
# try: sl, ls, uname -a — type 'exit' to leave
smolvm machine stop --name myvm
# Pack into a portable executable
smolvm pack create --image python:3.12-alpine -o ./my-pythonvm
./my-pythonvm python3 -c "print('hello from a packed VM')"
How It Works
libkrun VMM with Hypervisor.framework (macOS) or KVM (Linux). No daemon — the VMM is a library linked into the binary. Custom kernel: libkrunfw.
- <200ms boot
- Single binary, no runtime dependencies
- Runs OCI container images inside microVMs
- Packs workloads into portable
.smolmachineexecutables - Embeddable via Node.js and Python SDKs
Comparison
| | smolvm | Containers | Colima | QEMU | Firecracker | Kata |
|---------------------|--------|------------|--------|------|-------------|------|
| Isolation | VM per workload | Namespace (shared kernel) | Namespace (1 VM) | Separate VM | Separate VM | VM per container |
| Boot time | <200ms | ~100ms | ~seconds | ~15-30s | <125ms | ~500ms |
| Architecture | Library (libkrun) | Daemon | Daemon (in VM) | Process | Process | Runtime stack |
| Per-workload VMs | Yes | No | No (shared) | Yes | Yes | Yes |
| macOS native | Yes | Via Docker VM | Yes (krunkit) | Yes | No | No |
| Embeddable SDK | Yes | No | No | No | No | No |
| Portable artifacts | .smolmachine | Images (need daemon) | No | No | No | No |
Sources: container isolation · containerd benchmark · QEMU boot time · Firecracker · Kata Containers · Kata boot time · Firecracker requires KVM · Kata macOS support
Platform Support
| Host | Guest | Requirements |
|------|-------|-------------|
| macOS Apple Silicon | arm64 Linux | macOS 11+ |
| macOS Intel | x86_64 Linux | macOS 11+ (untested) |
| Linux x86_64 | x86_64 Linux | KVM (/dev/kvm) |
| Linux aarch64 | aarch64 Linux | KVM (/dev/kvm) |
Known Limitations
- Network is opt-in (
--netonmachine create). The default machine has networking enabled. TCP/UDP only, no ICMP. - Volume mounts: directories only (no single files).
- macOS: binary must be signed with Hypervisor.framework entitlements.
Development
See docs/DEVELOPMENT.md.
Alpha — APIs may change.
License
Apache-2.0
Related Skills
node-connect
346.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
346.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
346.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
