
Firecracker simplifié. Déployez des microVM sécurisées en millisecondes, de l'installation au shell interactif en une seule commande.
🔥 Boîte à outils pour microVM Firecracker en mode bac à sable
Créez, gérez et connectez-vous à des microVM Firecracker isolées depuis la ligne de commande. Démarrez une VM en mode bac à sable en quelques millisecondes, exécutez des commandes, transférez des fichiers — pas besoin de SSH.
--from-imagebase, node22, node24, python3.13--json pour les scripts et l'automatisation--from-image)curl -fsSL https://vmsan.dev/install | bash
Cette commande télécharge et installe tout dans ~/.vmsan/ :
node22, node24, python3.13) téléchargées en tant qu'artefacts préconstruitsLes installations standard des versions téléchargent les environnements intégrés depuis https://artifacts.vmsan.dev/ et ne nécessitent pas Docker. Les installations depuis les sources construisent encore les environnements localement.
curl -fsSL https://vmsan.dev/install | bash -s -- --uninstall
Si vous voulez compiler depuis les sources :
# Installer les dépendances
bun install
# Compiler l'agent in-VM
cd agent && make install && cd ..
# Compiler la CLI
bun run build
# Lier la version locale
mkdir -p ~/.vmsan/bin
ln -sf "$(pwd)/dist/bin/cli.mjs" ~/.vmsan/bin/vmsan
# Créer et démarrer une VM
vmsan create --runtime node22 --memory 512 --cpus 2
# Créer une VM à partir d'une image Docker
vmsan create --from-image node:22-alpine
# Lister toutes les VM
vmsan list
# Exécuter une commande dans une VM
vmsan exec <vm-id> ls -la
# Exécution interactive avec PTY
vmsan exec -i <vm-id> bash
# Se connecter au shell d'une VM en cours d'exécution
vmsan connect <vm-id>
# Téléverser un fichier vers une VM
vmsan upload <vm-id> ./local-file.txt /remote/path/file.txt
# Télécharger un fichier depuis une VM
vmsan download <vm-id> /remote/path/file.txt ./local-file.txt
# Prendre un instantané d'une VM en cours d'exécution
vmsan snapshot create <vm-id>
# Lister les instantanés
vmsan snapshot list
# Restaurer une VM à partir d'un instantané
vmsan create --snapshot <snapshot-id>
# Arrêter une VM
vmsan stop <vm-id>
# Supprimer une VM
vmsan remove <vm-id>
| Drapeau | Description |
|---|---|
--json | Sortie JSON structurée |
--verbose | Afficher les informations de débogage détaillées |
vmsan.toml (prévu en 0.5.0)nftables avec application atomique des règles pour l'isolation réseau (depuis 0.2.0)# Compiler
bun run build
# Lier la version locale
ln -sf "$(pwd)/dist/bin/cli.mjs" ~/.vmsan/bin/vmsan
# Mode développement (surveillance)
bun run dev
# Exécuter les tests
bun run test
# Vérification de types
bun run typecheck
# Lint et formatage
bun run lint
bun run fmt
bin/ Point d'entrée de la CLI
src/
commands/ Sous-commandes de la CLI
services/ Client Firecracker, client agent, service VM
lib/ Utilitaires (jailer, réseau, shell, journalisation)
errors/ Système d'erreurs typé
generated/ Définitions de types de l'API Firecracker
agent/ Agent Go qui s'exécute à l'intérieur de la VM
docs/ Site de documentation (vmsan.dev)
/30 (198.19.{slot}.0/30)L'état est persistant dans ~/.vmsan/ :
~/.vmsan/
vms/ Fichiers d'état des VM (JSON)
jailer/ Répertoires chroot
bin/ Binaire de l'agent
kernels/ Images du noyau VM
rootfs/ Systèmes de fichiers racine de base
registry/ Cache rootfs des images Docker
snapshots/ Instantanés de VM
Pourquoi vmsan ? Docker partage le noyau hôte — une évasion de conteneur signifie la fin de la partie. gVisor intercepte les appels système dans l'espace utilisateur, réduisant la surface d'attaque mais sans l'éliminer. Kata Containers offre une isolation de VM réelle mais nécessite une orchestration complexe (containerd, shimv2, K8s). Vagrant démarre des VM complètes qui prennent 30 secondes et plus et des centaines de Mo.
vmsan vous offre une isolation au niveau matériel avec la surface d'attaque minimale de Firecracker (< 50 000 lignes de code), démarre en millisecondes et ne nécessite aucune configuration — installez et lancez-vous.
Publié sous licence APACHE-2.0.
Réalisé par @angelorc et la communauté 💛
🤗 mis à jour automatiquement avec automd
| Commande | Alias | Description |
|---|
create | Créer et démarrer une nouvelle microVM | |
list | ls | Lister toutes les VM |
start | Démarrer une VM arrêtée | |
stop | Arrêter une VM en cours d'exécution | |
remove | rm | Supprimer une VM |
exec | Exécuter une commande dans une VM en cours d'exécution | |
connect | Ouvrir un shell interactif sur une VM | |
upload | Téléverser des fichiers vers une VM | |
download | Télécharger des fichiers depuis une VM | |
network | Mettre à jour la politique réseau sur une VM en cours d'exécution | |
snapshot | Gérer les instantanés de VM (créer, lister, supprimer) | |
doctor | Vérifier les prérequis système et l'état de l'installation |
| vmsan | Docker | gVisor | Kata Containers | Vagrant |
|---|
| Niveau d'isolation | ✅ Matériel (KVM) | ❌ Noyau partagé | ⚠️ Noyau espace utilisateur | ✅ Matériel (QEMU/CH) | ✅ Matériel (VBox/VMware) |
| Temps de démarrage | ✅ ~125ms | ✅ ~50ms | ✅ ~5ms | ⚠️ ~200ms+ | ❌ 30-60s |
| Complexité de configuration | ✅ Une seule commande | ✅ Faible | ⚠️ Moyenne | ❌ Élevée | ⚠️ Moyenne |
| Modèle de sécurité | ✅ Jailer + seccomp + cgroups + noyau dédié | ⚠️ Espaces de noms + cgroups | ⚠️ Filtrage d'appels système | ✅ VM complète + conteneurs imbriqués | ✅ VM complète |
| Isolation réseau | ✅ Politiques intégrées (allow/deny/custom) | ❌ Manuel (iptables) | ⚠️ Hérite de Docker | ❌ Manuel | ⚠️ NAT/pont |
| Support des images Docker | ✅ --from-image | ✅ Natif | ✅ Via runsc | ✅ Via containerd | ❌ |
| Shell interactif | ✅ WebSocket PTY | ✅ exec | ✅ exec | ✅ exec | ✅ SSH |
| Transfert de fichiers | ✅ Téléversement/téléchargement intégré | ✅ cp | ✅ cp | ✅ cp | ⚠️ Dossiers partagés / SCP |
| Sortie JSON | ✅ Toutes les commandes | ⚠️ Partielle | ❌ | ⚠️ Partielle | ❌ |
| Empreinte mémoire | ✅ ~5 Mio par VM | ✅ ~1 Mio | ⚠️ ~15 Mio | ❌ ~30 Mio+ | ❌ 512 Mio+ |
| Meilleur pour | 🏆 Bac à sable IA, code non fiable, multi-locataire | Charges de travail générales | Renforcement K8s | Conformité K8s | Environnements de développement |