Svavyom architecture: Go, libvirt, QEMU and KVM
Explore how Svavyom separates its API, read-only agent, mutation supervisor and console broker above libvirt, QEMU and KVM.
- 01Web consoleReact + TypeScript
- 02APIGo · sessions + CSRF
- 03Mutation supervisorClosed protocol, names only
- 04Read-only agentPlus console broker
- 05libvirtqemu:///system
- 06QEMU / KVMVM process + kernel
Separate processes with separate privileges. No arbitrary shell or libvirt call is reachable from the browser.
Six layers, each with an honest status
A React and TypeScript web console talks to a Go API. Narrow, separate processes do the privileged work and drive libvirt, QEMU and KVM.
- 01Preview
Web console
React + TypeScriptCreate, manage and watch VMs, storage, networks and alerts from the browser.
- 02Preview
API
Go · sessions + CSRFLocal-admin authentication, server-side sessions and CSRF protection. Runs non-root.
- 03Preview
Mutation supervisor
Short-lived mutation helperThe only path that changes the host, over a closed protocol of names, never paths or XML.
- 04Preview
Read-only agent
Plus the console brokerRead-only libvirt access, and a broker for the serial and graphical consoles.
- 05Tested
libvirt
qemu:///systemDefines and controls VMs, networks and storage pools. Tested on Ubuntu 24.04 LTS.
- 06Per host
QEMU / KVM
VM process + kernelThe familiar core. The console warns when a host has not been qualified.
Get the code. Get the next steps.
Download and share the source any time. Add your email and we will send the repository link and next steps, then occasional updates as the project moves.
Prefer to look first? Open the repository