Retour aux mises à jour
New releaseSep 13, 2026

smolvm v1.15.0

Une machine virtuelle intégrable, portable et ramifiable pour exécuter des Agents en toute sécurité en local.

Partager

smol machines

Discord Release License npm PyPI crates.io

smolvm

Des microVMs branchables pour les agents IA. Intégrez des machines virtuelles légères dans vos logiciels, des environnements de développement portables et du sandboxing local.

Installation

curl -sSL https://smolmachines.com/install.sh | bash   # macOS + Linux

Windows : décompressez la release windows-x86_64 et lancez smolvm.exe (nécessite la Windows Hypervisor Platform). Agents de codage : lancez smolvm --help après l'installation pour découvrir toutes les commandes.

Démarrage rapide

smolvm machine run --net --image alpine -- uname -a          # VM ponctuelle, supprimée à la sortie
smolvm machine run --net -it --image alpine -- /bin/sh       # shell interactif

Local

De vraies VM avec leur propre noyau, gratuites sur votre ordinateur portable ou vos propres serveurs. Elles démarrent en moins d'une seconde, et la mémoire est élastique, donc l'hôte ne réserve que ce que l'invité utilise. Les machines persistent entre les redémarrages, et n'importe quelle image OCI fonctionne, y compris celles que vous construisez localement.

smolvm machine create --net --name dev && smolvm machine start --name dev
smolvm machine exec --name dev -- apk add git
docker save myapp | smolvm machine run --image - -- ./app    # image locale, sans registre

Déclarez une machine dans un Smolfile : image, ressources, ports, montages et politique réseau dans un seul fichier versionné.

Intégrable

Pilotez des machines depuis votre propre code avec une seule API Machine. Les SDK s'exécutent dans votre processus sans démon, en local ou sur smol cloud.

npm install smolmachines     # Node / TypeScript
pip install smolmachines     # Python
cargo add smolmachines       # Rust
import { Machine } from 'smolmachines';

const m = await Machine.create({ image: 'python:3.12-alpine', network: true });
const r = await m.exec(['python3', '-c', 'print(2 ** 10)']);
console.log(r.stdout); // 1024
await m.delete();

Source et documentation : smol-machines/smol · smolmachines.com/docs/sdk

Branchables

Sauvegardez une machine en cours d'exécution, rembobinez-la, ou branchez-la en copies qui continuent de s'exécuter depuis le même point. Les checkpoints capturent la RAM, l'état du CPU et les disques ; les branches sont des enfants copy-on-write d'une machine active.

smolvm machine create --net --name agent --image alpine
smolvm machine start --name agent --branchable
smolvm machine branch --from agent --name try-1                   # enfant copy-on-write actif
smolvm machine checkpoint --name agent -o agent.checkpoint        # sauvegarde, processus inclus
smolvm machine create --name agent2 --from agent.checkpoint       # reprise plus tard ou ailleurs

Rembobinez vers une génération antérieure avec --from <checkpoint> --at '~N' (voir machine checkpoint-log), et arrêtez sans perdre l'exécution avec pause et reprise. Plus d'informations dans Branching et checkpoints incrémentaux.

Portable

Empaquetez une machine, quelle que soit sa configuration, dans un seul fichier .smolmachine. Poussez-le vers n'importe quel registre OCI, ou exécutez-le comme un exécutable autonome qui démarre en moins de 200 ms sans rien à installer.

smolvm machine stop --name dev && smolvm pack create --from-vm dev -o dev
smolvm pack push --file dev.smolmachine ghcr.io/you/dev:v1
smolvm pack create --image python:3.12-alpine -o ./python312
./python312 run -- python3 --version

Les checkpoints sont aussi portables : restaurez-en un sur un autre hôte ou sur smol cloud.

Sécurisé

Chaque charge de travail dispose d'une VM isolée matériellement avec son propre noyau. Le réseau est désactivé par défaut, la sortie peut être limitée à des hôtes nommés, et le code peut utiliser un identifiant sans jamais le lire.

La sécurité est une responsabilité partagée. smolvm fournit la frontière : une VM et un noyau séparés pour chaque charge de travail, rien n'atteignant l'hôte sauf si vous l'autorisez. Vous décidez ce qui franchit cette frontière. Chaque dossier que vous montez, port que vous ouvrez, hôte que vous autorisez, et secret ou agent SSH que vous transférez devient quelque chose que la charge de travail peut utiliser, donc ne donnez à une charge de travail non fiable que ce dont elle a besoin.

smolvm machine run --net --image alpine --allow-host registry.npmjs.org -- wget -qO- https://google.com   # bloqué
smolvm machine run --net --image alpine --allow-host-pattern registry.npmjs.org -- wget -qO- https://registry.npmjs.org   # hôte exact uniquement
NOTION_API_KEY=secret_… smolvm machine run --net --image alpine \
  --credential [email protected] -- sh -c 'echo $NOTION_API_KEY'   # un placeholder

Voir substitution d'identifiants et le modèle de sécurité. Utilisez --allow-host-pattern '*.example.com' pour autoriser uniquement les sous-domaines. L'ancien --allow-host example.com continue d'autoriser à la fois le domaine apex et les sous-domaines. La liste d'autorisation d'une machine arrêtée peut être modifiée avec smolvm machine update (--allow-host, --allow-host-pattern, --allow-cidr et leurs formes --remove-).

Fonctionnement

Chaque charge de travail s'exécute dans une VM virtualisée matériellement avec son propre noyau invité sur Hypervisor.framework (macOS), KVM (Linux), ou la Windows Hypervisor Platform (Windows). libkrun est le VMM et libkrunfw fournit le noyau invité. Les images utilisent le format OCI, donc tout ce qui se trouve sur Docker Hub, ghcr.io ou un autre registre démarre comme microVM, sans démon Docker.

Valeurs par défaut : 4 vCPU, 8 GiB de RAM. La mémoire est élastique via virtio balloon et les vCPU inactifs dorment dans l'hyperviseur, donc le sur-provisionnement ne coûte presque rien. Remplacez avec --cpus et --mem.

Catégories