Architecture

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.

Service layoutDevelopment Preview
  1. 01Web consoleReact + TypeScript
  2. 02APIGo · sessions + CSRF
  3. 03Mutation supervisorClosed protocol, names only
  4. 04Read-only agentPlus console broker
  5. 05libvirtqemu:///system
  6. 06QEMU / KVMVM process + kernel
Dedicated Linux ServerUbuntu 24.04 LTS · one host

Separate processes with separate privileges. No arbitrary shell or libvirt call is reachable from the browser.

Layer by layer

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.

  1. 01

    Web console

    React + TypeScript

    Create, manage and watch VMs, storage, networks and alerts from the browser.

    Preview
  2. 02

    API

    Go · sessions + CSRF

    Local-admin authentication, server-side sessions and CSRF protection. Runs non-root.

    Preview
  3. 03

    Mutation supervisor

    Short-lived mutation helper

    The only path that changes the host, over a closed protocol of names, never paths or XML.

    Preview
  4. 04

    Read-only agent

    Plus the console broker

    Read-only libvirt access, and a broker for the serial and graphical consoles.

    Preview
  5. 05

    libvirt

    qemu:///system

    Defines and controls VMs, networks and storage pools. Tested on Ubuntu 24.04 LTS.

    Tested
  6. 06

    QEMU / KVM

    VM process + kernel

    The familiar core. The console warns when a host has not been qualified.

    Per host
Get started

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