Silo is a local microVM sandbox runtime where machines are created from OCI images.
The short version:
- OCI image in.
- Runtime config from policy.
- Small, isolated VM out.
- Image first: OS images are built from OCI images.
- API first:
libvmis the core runtime interface. - Policy first: networking, kernel access, and userspace access are driven by policy.
Only network policies are implemented today. Kernel and userspace policies are the direction.
Build the CLI locally:
nix develop
make buildRun an ephemeral VM from an image:
silo run --image ubuntu:24.04 -- uname -aCreate and enter a persistent VM:
silo create dev --image ghcr.io/vandycknick/archlinux:latest --start
silo shell devInspect and manage machines:
silo ls
silo status dev
silo stop dev
silo rm devUse libvm when you want to create and manage machines directly from Rust.
use libvm::{LibVmError, Memory, Runtime};
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), LibVmError> {
let runtime = Runtime::from_env().await?;
let machine = runtime
.machine()
.image("ghcr.io/vandycknick/archlinux:latest")
.name("devbox")
.cpus(6)
.memory(Memory::gb(16))
.network(|network| network.private())
.create()
.await?;
machine.start().await?;
Ok(())
}