Skip to content

GSoC 2025 Project Intro: Developing Karton, the KDE Virtual Machine Manager!

Sunday, 18 May 2025  |  Derek Lin (kenoi)

Hi everyone!

I'm Derek Lin, also known as kenoi. I'm a second-year student at the University of Waterloo and really excited to be working on developing Karton, a virtual machine manager, this summer. This project will be a part of the Google Summer of Code (GSoC) 2025 program and mentored by Harald Sitter, Tobias Fella, and Nicolas Fella. Over the past few months, I've been contributing to the project through some merge requests and I hope to get it to a somewhat polished state towards the end of the program!

About Karton Virtual Machine Manager

Currently, GTK-based virtual machine managers (virt-manager, GNOME Boxes) are the norm for a lot of KDE users, but they are generally not well integrated into the Plasma environment. Although there has been work done in the past with making a Qt-Widget-based virtual machine manager, it has not been maintained for many years and the UI is quite dated.

Karton, as originally started by Aaron Rainbolt was planned to be a QEMU frontend for virtualization through its CLI. Eventually, the project ownership was handed over to Harald Sitter and it was made available as a GSoC project. My aim is to make Karton a native Qt-Quick/Kirigami virtual machine manager, using a libvirt backend. Through libvirt, lower-level tasks can be abstracted and it allows for the app to be potentially cross-platform.

If anyone is interested, I wrote a bit more in detail in my GSoC project proposal (although a bit outdated).

My Work so Far

I originally became interested in the project back in February this year where I tested out GNOME Boxes, virt-manager, and UTM. I also experimented on the virsh CLI, configuring some virtual machines through the libvirt domain XML format.

My first merge request was a proof-of-concept rewrite of the app. I implemented new UI components to list, view, configure, and install libvirt-controlled virtual machines. This used the libvirt API to fetch information on user domains, and wrapped virt-install and virtviewer CLIs for installing and viewing domains respectively. I had spent a big portion of this time getting know Qt frameworks, libvirt, and just C++ overall, so a big thank you to Harald Sitter and Gleb Popov, who have been reviewing my code!

A few weeks later I also made a smaller merge request building off of my rewrite, adding QEMU virtual disk path management which is where the main repository stands as of now.

In between my school terms in mid-April, I had the amazing opportunity to attend the Plasma Sprint in Graz where I was able to meet many awesome developers who work on KDE. During this time, I worked on a merge request to implement a domain installer (in order to replace the virt-install command call). This used the libosinfo GLib API to detect a user-provided OS installer disk image, getting specifications needed for the libvirt XML domain format. Karton is then able to generate a custom XML file which will make it easier to work off of and implement more features in the future. I had to rework a lot of the domain configuration class structure and shifted away from fetching information from libvirt API calls to parsing it directly from XML.

A libvirt domain XML configuration generated by Karton.

A Video Demo

Current Works in Progress

As virt-install is very powerful program, my installer is still hardcoded to work with QEMU and I haven't been able to implement a lot of the device configuration yet. I also am currently working on addressing feedback on this merge request.

Recently, I also started work on a new custom Qt-Quick virtual machine viewer. It connects to virtual machines through the spice-client-glib library and renders the frames on a QQuickItem with the images it receives from the active virtual machine. This is still very buggy and has yet to support user input.

a very cursed viewer...

Warning: Karton is still under development. I would not recommend running Karton with any VMs that are important as they may break.

My Plans for Google Summer of Code '25

Once the domain installer is finished up, I think the majority of my time will be spent on working on and polishing the virtual machine viewer.

Some of the other things I would want to get to during the summer are:

  • Support snapshotting, so users can save the state of their virtual machines.
  • Rework the UI so that it uses space more effectively, possible more similar to UTMs layout.
  • System monitor to graph CPU and RAM usage of VMs, similar to virt-manager.
  • Other configuration options for the installer to support device passthrough and such.
  • A bunch of more stuff mentioned in the project proposal!

If you have any features you'd like to see in the future, let us know in our Matrix, karton:kde.org!

That's all!

Thanks for reading! I'm still new to KDE development and virtualization in general, so if you have any suggestions or thoughts on the project, please let me know!

Email: derekhongdalin@gmail.com

Matrix: @kenoi:matrix.org

Discord: kenyoy

I also made a Mastodon recently: mastodon.social/@kenoi