
Firecracker reso semplice. Avvia microVM sicuri in millisecondi, dall'installazione alla shell interattiva con un unico comando.
🔥 Kit di strumenti sandbox per microVM Firecracker
Crea, gestisci e connettiti a microVM Firecracker isolate dalla riga di comando. Avvia una VM sandbox in millisecondi, esegui comandi, trasferisci file — nessun SSH necessario.
--from-imagebase, node22, node24, python3.13--json per scripting e automazione--from-image)curl -fsSL https://vmsan.dev/install | bash
Questo scarica e installa tutto in ~/.vmsan/:
node22, node24, python3.13) scaricate come artefatti precompilatiLe installazioni di release standard scaricano i runtime integrati da https://artifacts.vmsan.dev/ e non richiedono Docker. Le installazioni da sorgente costruiscono ancora i runtime localmente.
curl -fsSL https://vmsan.dev/install | bash -s -- --uninstall
If you want to build from source:
# Install dependencies
bun install
# Build the in-VM agent
cd agent && make install && cd ..
# Build the CLI
bun run build
# Link local build
mkdir -p ~/.vmsan/bin
ln -sf "$(pwd)/dist/bin/cli.mjs" ~/.vmsan/bin/vmsan
# Create and start a VM
vmsan create --runtime node22 --memory 512 --cpus 2
# Create a VM from a Docker image
vmsan create --from-image node:22-alpine
# List all VMs
vmsan list
# Execute a command inside a VM
vmsan exec <vm-id> ls -la
# Interactive exec with PTY
vmsan exec -i <vm-id> bash
# Connect to a running VM shell
vmsan connect <vm-id>
# Upload a file to a VM
vmsan upload <vm-id> ./local-file.txt /remote/path/file.txt
# Download a file from a VM
vmsan download <vm-id> /remote/path/file.txt ./local-file.txt
# Snapshot a running VM
vmsan snapshot create <vm-id>
# List snapshots
vmsan snapshot list
# Restore a VM from a snapshot
vmsan create --snapshot <snapshot-id>
# Stop a VM
vmsan stop <vm-id>
# Remove a VM
vmsan remove <vm-id>
| Flag | Descrizione |
|---|---|
--json | Output JSON strutturato |
--verbose | Mostra output di debug dettagliato |
vmsan.toml (pianificato per 0.5.0)nftables con applicazione atomica delle regole per l'isolamento di rete (dalla 0.2.0)# Build
bun run build
# Link local build
ln -sf "$(pwd)/dist/bin/cli.mjs" ~/.vmsan/bin/vmsan
# Dev mode (watch)
bun run dev
# Run tests
bun run test
# Type check
bun run typecheck
# Lint & format
bun run lint
bun run fmt
bin/ CLI entry point
src/
commands/ CLI subcommands
services/ Firecracker client, agent client, VM service
lib/ Utilities (jailer, networking, shell, logging)
errors/ Typed error system
generated/ Firecracker API type definitions
agent/ Go agent that runs inside the VM
docs/ Documentation site (vmsan.dev)
/30 (198.19.{slot}.0/30)Lo stato è persistito in ~/.vmsan/:
~/.vmsan/
vms/ VM state files (JSON)
jailer/ Chroot directories
bin/ Agent binary
kernels/ VM kernel images
rootfs/ Base root filesystems
registry/ Docker image rootfs cache
snapshots/ VM snapshots
Perché vmsan? Docker condivide il kernel host — una fuga dal contenitore significa game over. gVisor intercetta le syscall nello spazio utente, riducendo la superficie di attacco ma non eliminandola. Kata Containers fornisce un vero isolamento VM ma richiede un' orchestrazione complessa (containerd, shimv2, K8s). Vagrant avvia VM complete che impiegano 30+ secondi e centinaia di MB.
vmsan ti offre isolamento a livello hardware con la superficie di attacco minima di Firecracker (< 50k righe di codice), si avvia in millisecondi e richiede configurazione zero — installa e via.
Pubblicato sotto licenza APACHE-2.0. Realizzato da @angelorc e community 💛
🤖 aggiornato automaticamente con automd
| Comando | Alias | Descrizione |
|---|
create | Crea e avvia una nuova microVM | |
list | ls | Elenca tutte le VM |
start | Avvia una VM ferma | |
stop | Ferma una VM in esecuzione | |
remove | rm | Rimuovi una VM |
exec | Esegui un comando all'interno di una VM in esecuzione | |
connect | Apre una shell interattiva su una VM | |
upload | Carica file su una VM | |
download | Scarica file da una VM | |
network | Aggiorna la policy di rete su una VM in esecuzione | |
snapshot | Gestisci snapshot VM (crea, elenca, elimina) | |
doctor | Verifica prerequisiti di sistema e stato dell'installazione |
| vmsan | Docker | gVisor | Kata Containers | Vagrant |
|---|
| Livello di isolamento | ✅ Hardware (KVM) | ❌ Kernel condiviso | ⚠️ Kernel spazio utente | ✅ Hardware (QEMU/CH) | ✅ Hardware (VBox/VMware) |
| Tempo di avvio | ✅ ~125ms | ✅ ~50ms | ✅ ~5ms | ⚠️ ~200ms+ | ❌ 30-60s |
| Complessità setup | ✅ Un comando | ✅ Bassa | ⚠️ Media | ❌ Alta | ⚠️ Media |
| Modello di sicurezza | ✅ Jailer + seccomp + cgroups + kernel dedicato | ⚠️ Namespace + cgroups | ⚠️ Filtraggio syscall | ✅ VM completa + contenitori nidificati | ✅ VM completa |
| Isolamento di rete | ✅ Policy integrate (allow/deny/custom) | ❌ Manuale (iptables) | ⚠️ Eredita da Docker | ❌ Manuale | ⚠️ NAT/bridge |
| Supporto immagini Docker | ✅ --from-image | ✅ Native | ✅ Via runsc | ✅ Via containerd | ❌ |
| Shell interattiva | ✅ WebSocket PTY | ✅ exec | ✅ exec | ✅ exec | ✅ SSH |
| Trasferimento file | ✅ Caricamento/scaricamento integrati | ✅ cp | ✅ cp | ✅ cp | ⚠️ Cartelle condivise / SCP |
| Output JSON | ✅ Tutti i comandi | ⚠️ Parziale | ❌ | ⚠️ Parziale | ❌ |
| Overhead di memoria | ✅ ~5 MiB per VM | ✅ ~1 MiB | ⚠️ ~15 MiB | ❌ ~30 MiB+ | ❌ 512 MiB+ |
| Ideale per | 🏆 Sandbox AI, codice non fidato, multi-tenancy | Carichi di lavoro generali | Rafforzamento K8s | Conformità K8s | Ambienti di sviluppo |