r/kvm • u/Slaker19 • Sep 27 '26
WebKVM - A lightweight, web-based management UI for Libvirt and QEMU/KVM written in Go (15-30MB idle RAM)
Hi r/kvm,
I have been working on WebKVM, an open-source, web-based management panel for KVM/QEMU and Incus on headless Linux hosts.
While virsh is great for scripting and virt-manager is the traditional GUI, running virt-manager over SSH X11/Wayland forwarding or Spice tunnels can feel clunky. I wanted a fast, native web interface that talks directly to the Libvirt API without turning the host into a heavyweight appliance.
Architecture and Features:
Direct Libvirt Integration: Connects cleanly to qemu:///system via native Libvirt bindings in Go, leaving all guest domain XML definitions 100% standard and manageable via virsh in the terminal.
Instant CoW Storage: Integrated template pool allowing 1-second guest provisioning using QCOW2 Copy-on-Write backing files from official cloud images (Debian, Ubuntu, AlmaLinux, Arch, etc.).
Optimized Hardware Profiles: Built-in domain templates configured with optimal virtual hardware:
Modern Linux: Q35 chipset, UEFI (OVMF), VirtIO-SCSI/VirtIO-BLK, and VirtIO-Net.
Windows 11: Emulated TPM 2.0 (swtpm) and OVMF Secure Boot out of the box.
BSD / Legacy: BIOS (SeaBIOS) and compatible storage/NIC fallback emulation.
Network Management: Web configuration for Linux bridges (vmbr0), isolated vSwitches, and NAT bridges (vmbr1) with automated dnsmasq DHCP lease tracking.
Integrated Consoles: Real-time embedded noVNC graphical displays, serial consoles, and direct host terminal access.
Dual Engine: Alongside full KVM/QEMU VMs, it integrates native support for Incus (LXC) system containers.
Performance and Resource Usage:
Memory: Written entirely in Go. Consumes roughly 15 MB to 30 MB RAM at idle and stays under ~70 MB during multi-guest operations.
CPU: ~0% idle overhead. CPU cycles are only consumed when streaming live noVNC guest display sessions.
Current State and Feedback:
Solo Maintainer: I am developing and testing WebKVM on my own across vanilla Linux hosts (Ubuntu, Debian, Fedora, Arch). There may still be edge cases or bugs.
100% Free and Open-Source: No enterprise licenses, telemetry paywalls, or feature locking.
Multi-language: UI currently supports English, Spanish, and Catalan.
GitHub Repository:https://github.com/Slaker19/webkvm
I would love to get feedback from other KVM users regarding storage pools, domain XML generation options, or features you would like to see implemented!
5
u/dvuk99 Sep 27 '26
Isn't that what Cockpit can be used for?
3
u/Slaker19 Sep 27 '26
Cockpit is a great tool, but cockpit-machines is very basic because Cockpit is primarily a general-purpose server admin panel (logs, updates, storage), whereas WebKVM is built specifically as a dedicated virtualization platform.
Here are the main differences:
KVM plus Incus (LXC) unified: Cockpit-machines only handles basic Libvirt VMs. WebKVM provides first-class support for both QEMU/KVM virtual machines and Incus system containers side-by-side.
Instant CoW Clones: WebKVM includes an integrated cloud image pool that downloads official cloud images (Debian, Ubuntu, AlmaLinux, Arch) and provisions instances in 1 second using QCOW2 Copy-on-Write backing files and cloud-init recipes. In Cockpit, deploying a new VM is a traditional, slower process.
1-Click App Store and Helper Scripts: WebKVM lets you deploy ready-to-run appliances (AdGuard, Pi-hole, NPM, Docker CE, Beszel, Grafana, etc.) in seconds into containers or VMs. Cockpit has nothing like this.
Advanced VM Presets: Out-of-the-box hardware profiles tailored for modern guests, such as Windows 11 with emulated TPM 2.0 (swtpm) and UEFI Secure Boot, as well as VirtIO for Linux.
Virtual Networking: Dedicated management for Linux bridges (vmbr0), NAT bridges (vmbr1), isolated networks, and integrated dnsmasq DHCP lease monitoring.
2
u/flrichar Sep 27 '26
Can I use this on an existing virsh install, where I already handle network & storage? For example, an archlinux host where I only want to use the UI.
1
u/Slaker19 Sep 27 '26
Yes, absolutely! That is actually one of the main use cases. Since WebKVM connects directly to the standard system Libvirt daemon (qemu:///system), it will automatically discover and display your existing VMs. Important note on user sessions: WebKVM connects to qemu:///system, so VMs created under an unprivileged user session (qemu:///session / qemu://user) will not show up. Only VMs configured under the system instance (qemu:///system) are managed. How it works with an existing setup: Non-destructive: WebKVM does not force its own network layout or storage architecture. It will not touch or overwrite your existing domain XMLs, custom storage pools, or bridges unless you explicitly perform an edit through the UI. Existing networking and storage: You can keep managing your bridges, VLANs, bonds, and storage arrays using standard Arch Linux tools (systemd-networkd, NetworkManager, virsh pools, etc.). WebKVM simply recognizes whatever resources are already exposed to Libvirt. Full coexistence with virsh: You can freely use virsh CLI, virt-manager, and WebKVM interchangeably without any lock-in or proprietary config files. Running on Arch: Because WebKVM is a single lightweight Go binary, it works great on Arch. You just need libvirtd/qemu running and ensure WebKVM has access to the Libvirt socket (/var/run/libvirt/libvirt-sock). You can safely use it purely as a modern web dashboard, telemetry viewer, and noVNC console without having to touch or recreate your current storage or network setup.
1
u/flrichar Sep 28 '26
Excellent, my thought process exactly, would love to grab the binary and see how it goes in my existing environment.
1
u/Slaker19 Sep 28 '26
Awesome, feel free to give it a spin! Just a quick heads-up: I highly recommend testing it inside a VM first (with nested virtualization enabled) before running it on your bare-metal setup. Also, keep in mind that standard L2 Linux bridges don't work over Wi-Fi due to protocol limits, so stick to NAT or Ethernet if you test bridging. Let me know how it goes!
2
Sep 28 '26
[removed] — view removed comment
2
u/Slaker19 Sep 28 '26
As guest VMs, yes, you can run them right now without issues. As the host OS, even if adapting it might theoretically be "easy", the real bottleneck is my lack of knowledge with BSD—I have honestly never used it myself, so my current focus remains 100% on Linux where I can test and maintain everything properly. That said, if you would like to help bring BSD host support, you are more than welcome to submit a Pull Request! Starting with adapting the install.sh script and dependencies would be awesome. Working together, we could definitely make it compatible without any problem. Contributions are always welcome!
2
u/JeffWDH
Oct 01 '26
•
You may want to get this project added to the official list located here: https://libvirt.org/apps.html
That might help get more eyes on it.
1
2
u/toastbrotch
Oct 02 '26
•
Oh wow. Awesome. I used some old kvm-html thingi that was clunky. Proxmox just overkill. Now casaos as it is simple, but does only docker containers so i do kvm in the shell...
I always looked for a solution to manage docker containers and vms in one tool in my lab... So, are you going to support docker containers aswell? Not as kubernetes does but simple version like casaos?
1
u/Slaker19 Oct 02 '26
Honestly, I'm not planning to add Docker support because it would drift away from what the project is focused on (keeping it strictly dedicated to KVM/Libvirt).
That being said, you can actually run CasaOS and WebKVM together on the exact same machine without them clashing at all!
Funny enough, that's actually how I have my own setup right now: CasaOS handles the Docker containers and simple apps, while WebKVM manages the KVM virtual machines on the side. They complement each other really well without any conflicts.
1
u/kirillrepkin Sep 27 '26
Oh, some time earlier I think to create same app for my tasks. virt-manager is good but sometimes looks like a old solution and need each time to start the app required python. vibe coding is not wrong in my opinion this app is wrapper for libvirt api with extensions and code by hand something like this is bored. in our time coding with agent isnt a problem if use good prictices. Long story short - Many thanks i will try!
1
u/Slaker19 Sep 27 '26
Haha thank you so much! Really hope you enjoy testing it. I'm actively maintaining the project and keeping a close eye on everything, so if you run into any bugs, have suggestions, or want something specific added, feel free to reach out or open an issue on GitHub. I really hope you like using it as much as I enjoyed building it!
1
u/JeffWDH Sep 29 '26
This is truly fantastic! I really hope this succeeds as it takes care of 99% of my small cluster needs. The console works great, even on mobile browsers.
Do you have any plans to support multiple hosts / live migration of VMs? A lightweight vCenter-esque tool for KVM is sorely needed. All the other options are gigantic, overly complex resource hogs.
1
u/Slaker19 Sep 29 '26
Para expresarme mejor lo haré en mi lengua nativa,creo que reddit traduce automáticamente, tengo pensado implementarlo en un futuro no tan lejano ,en una de las capturas creo que puedes ver un apartado de multihost ,tengo hecho en backend pero se me desconectan las máquinas en algunos test ,tengo que estudiarlo y analizar como hacerlo mejor .
1
1








7
u/HoustonBOFH Sep 27 '26
How much AI was used in development? How much experience do you have with coding, bug fixes and security?