
Firecracker simplificado. Inicie microVMs seguras em milissegundos, da instalação ao shell interativo em um único comando.
🔥 Conjunto de ferramentas para sandbox microVM Firecracker
Crie, gerencie e conecte-se a microVMs Firecracker isoladas a partir da linha de comando. Inicie uma VM em sandbox em milissegundos, execute comandos, transfira arquivos — sem necessidade de SSH.
--from-imagebase, node22, node24, python3.13--json para scripts e automação--from-image)curl -fsSL https://vmsan.dev/install | bash
Isso baixa e instala tudo em ~/.vmsan/:
node22, node24, python3.13) baixadas como artefatos pré-construídosAs instalações de versão padrão baixam runtimes integrados de https://artifacts.vmsan.dev/ e não exigem Docker. Instalações a partir da fonte ainda constroem runtimes localmente.
curl -fsSL https://vmsan.dev/install | bash -s -- --uninstall
Se você quiser compilar a partir da fonte:
# Instalar dependências
bun install
# Compilar o agente in-VM
cd agent && make install && cd ..
# Compilar a CLI
bun run build
# Vincular compilação local
mkdir -p ~/.vmsan/bin
ln -sf "$(pwd)/dist/bin/cli.mjs" ~/.vmsan/bin/vmsan
# Criar e iniciar uma VM
vmsan create --runtime node22 --memory 512 --cpus 2
# Criar uma VM a partir de uma imagem Docker
vmsan create --from-image node:22-alpine
# Listar todas as VMs
vmsan list
# Executar um comando dentro de uma VM
vmsan exec <vm-id> ls -la
# Execução interativa com PTY
vmsan exec -i <vm-id> bash
# Conectar ao shell de uma VM em execução
vmsan connect <vm-id>
# Fazer upload de um arquivo para uma VM
vmsan upload <vm-id> ./local-file.txt /remote/path/file.txt
# Fazer download de um arquivo de uma VM
vmsan download <vm-id> /remote/path/file.txt ./local-file.txt
# Criar snapshot de uma VM em execução
vmsan snapshot create <vm-id>
# Listar snapshots
vmsan snapshot list
# Restaurar uma VM a partir de um snapshot
vmsan create --snapshot <snapshot-id>
# Parar uma VM
vmsan stop <vm-id>
# Remover uma VM
vmsan remove <vm-id>
| Flag | Descrição |
|---|---|
--json | Saída estruturada em JSON |
--verbose | Exibir saída detalhada de debug |
vmsan.toml (planejado para 0.5.0)nftables com aplicação atômica de regras para isolamento de rede (desde 0.2.0)# Compilar
bun run build
# Vincular compilação local
ln -sf "$(pwd)/dist/bin/cli.mjs" ~/.vmsan/bin/vmsan
# Modo de desenvolvimento (watch)
bun run dev
# Executar testes
bun run test
# Verificação de tipos
bun run typecheck
# Lint e formatação
bun run lint
bun run fmt
bin/ Ponto de entrada da CLI
src/
commands/ Subcomandos da CLI
services/ Cliente Firecracker, cliente agente, serviço de VM
lib/ Utilitários (jailer, rede, shell, logging)
errors/ Sistema de erros tipados
generated/ Definições de tipos da API do Firecracker
agent/ Agente Go que executa dentro da VM
docs/ Site de documentação (vmsan.dev)
/30 (198.19.{slot}.0/30)O estado é persistido em ~/.vmsan/:
~/.vmsan/
vms/ Arquivos de estado da VM (JSON)
jailer/ Diretórios chroot
bin/ Binário do agente
kernels/ Imagens do kernel da VM
rootfs/ Sistemas de arquivos raiz base
registry/ Cache de rootfs de imagens Docker
snapshots/ Snapshots da VM
Por que vmsan? O Docker compartilha o kernel do host — uma fuga de contêiner significa game over. O gVisor intercepta chamadas de sistema no espaço do usuário, reduzindo a superfície de ataque, mas não a eliminando. O Kata Containers fornece isolamento real de VM, mas requer orquestração complexa (containerd, shimv2, K8s). O Vagrant inicia VMs completas que levam mais de 30 segundos e centenas de MBs.
O vmsan oferece isolamento em nível de hardware com a superfície de ataque mínima do Firecracker (< 50k linhas de código), inicializa em milissegundos e requer configuração zero — instale e use.
Publicado sob a licença APACHE-2.0.
Feito por @angelorc e comunidade 💛
🤖 atualizado automaticamente com automd
| Comando | Alias | Descrição |
|---|
create | Criar e iniciar uma nova microVM | |
list | ls | Listar todas as VMs |
start | Iniciar uma VM parada | |
stop | Parar uma VM em execução | |
remove | rm | Remover uma VM |
exec | Executar um comando dentro de uma VM em execução | |
connect | Abrir um shell interativo para uma VM | |
upload | Fazer upload de arquivos para uma VM | |
download | Fazer download de arquivos de uma VM | |
network | Atualizar política de rede em uma VM em execução | |
snapshot | Gerenciar snapshots da VM (criar, listar, excluir) | |
doctor | Verificar pré-requisitos do sistema e saúde da instalação |
| vmsan | Docker | gVisor | Kata Containers | Vagrant |
|---|
| Nível de isolamento | ✅ Hardware (KVM) | ❌ Kernel compartilhado | ⚠️ Kernel em espaço de usuário | ✅ Hardware (QEMU/CH) | ✅ Hardware (VBox/VMware) |
| Tempo de inicialização | ✅ ~125ms | ✅ ~50ms | ✅ ~5ms | ⚠️ ~200ms+ | ❌ 30-60s |
| Complexidade de configuração | ✅ Um comando | ✅ Baixa | ⚠️ Média | ❌ Alta | ⚠️ Média |
| Modelo de segurança | ✅ Jailer + seccomp + cgroups + kernel dedicado | ⚠️ Namespaces + cgroups | ⚠️ Filtragem de syscalls | ✅ VM completa + contêineres aninhados | ✅ VM completa |
| Isolamento de rede | ✅ Políticas integradas (allow/deny/custom) | ❌ Manual (iptables) | ⚠️ Herdado do Docker | ❌ Manual | ⚠️ NAT/ponte |
| Suporte a imagens Docker | ✅ --from-image | ✅ Nativo | ✅ Via runsc | ✅ Via containerd | ❌ |
| Shell interativo | ✅ WebSocket PTY | ✅ exec | ✅ exec | ✅ exec | ✅ SSH |
| Transferência de arquivos | ✅ Upload/download integrados | ✅ cp | ✅ cp | ✅ cp | ⚠️ Pastas compartilhadas / SCP |
| Saída JSON | ✅ Todos os comandos | ⚠️ Parcial | ❌ | ⚠️ Parcial | ❌ |
| Sobrecarga de memória | ✅ ~5 MiB por VM | ✅ ~1 MiB | ⚠️ ~15 MiB | ❌ ~30 MiB+ | ❌ 512 MiB+ |
| Melhor para | 🏆 Sandbox de IA, código não confiável, multi-inquilino | Cargas de trabalho gerais | Hardening de K8s | Conformidade em K8s | Ambientes de desenvolvimento |