r/virtualization • u/onurbaydas1 • 12h ago
I built an open-source web UI for KVM/libvirt that installs on the Linux host you already have: VirtoMir
For a while I've been running KVM on plain Debian/Ubuntu boxes, and I kept running into the same gap. Cockpit is easy but stops at the basic settings. virt-manager is detailed but it's a desktop app. Proxmox is great, but it wants to be the operating system. I wanted something in between, so I started building it as a side project.
It's called VirtoMir, and I've made it fully open source:
https://github.com/onurbaydas/VirtoMir
It's a web control panel for KVM/QEMU/libvirt. It installs as a single binary on an existing Linux host: no dedicated distro, no database, no agents inside your VMs. It talks to the libvirt you already have and only changes what you ask it to. If you remove it, your VMs, disks and networks stay where they were.
What it does today:
- New-VM wizard: ISO, cloud image with cloud-init, or an existing disk. Windows profile with UEFI, Secure Boot and TPM 2.0
- Browser console over VNC, SPICE (shared clipboard, resolution follows the window) or serial
- A settings form that shows an XML diff before saving, plus a raw XML editor for everything the form doesn't cover, validated by libvirt
- Configuration history for every VM, including changes made with
virsh, with one-click restore - Snapshots, live backups (incremental through libvirt checkpoints), off-site copies with restic
- Live metrics every second and 30 days of history, with no Prometheus needed (there's a Prometheus endpoint if you want one)
- Multiple hosts joined with a one-time code, live migration, and HA with quorum and fencing (IPMI, Redfish or watchdog)
- PAM / LDAP / OIDC sign-in, roles, TOTP, API tokens, OpenAPI spec, plus a Terraform provider and Ansible modules
How it was built. It's a one-person project, and I built it together with AI coding agents. That's how it got this much scope this quickly, and it's also why I'm not going to pretend it's mature. Nobody has reviewed every line by hand. All the tests are unit tests; there are no integration tests against a real libvirt yet.
Caveats, so nobody gets surprised:
- It's 0.9 and early. Tested on Ubuntu 26.04 and Debian 13, on single hosts and small clusters.
- HA has never been tried on real BMC hardware. There's also no storage-level lock (no sanlock/virtlockd), so I wouldn't trust it with production data yet.
- Live migration data goes over unencrypted TCP. Keep it on a trusted management network.
- OVN SDN, VMware import and DR are experimental and untested on real setups.
- It runs as root, because it needs the libvirt socket and PAM. Put it on a management network or behind your own reverse proxy.
I wrote a detailed technical post on how it works inside and what it does and doesn't support, weak spots included: https://onurbaydas.com/posts/virtomir-en/
If you just want to click around, there's a demo that runs entirely in your browser against a pretend cluster: https://onurbaydas.github.io/VirtoMir/demo/
There's also a one-command script that sets it up in a throwaway VM, so you don't have to touch your real hosts.
I built this for my own setup, not as a commercial product. It's AGPL-3.0, in case it's useful to someone else running KVM, or someone wants to look at how it works. Test reports from distros or hardware I can't reach (Fedora, arm64, Ceph, GPUs, real BMCs) and criticism of the code are very welcome. If anyone wants to contribute, I'd be glad.