Skip to content

My GSoC 2025 Journey - Part 1

Tuesday, 1 July 2025  |  Shubham Shinde

gsoc+kde image

Hi, I'm thrilled to be part of Google Summer of Code 2025 with KDE Community, working under the mentorship of Carl Schwan, Claudio Cambra, and Aakarsh MJ. My project, "Modernize Account Management with QML," aims to enhance the account management system in Merkuro, by transitioning its resource configuration dialogs to QML. This blog post introduces my project and shares the progress I've made in the recent weeks.

About the Project -

Merkuro currently relies on QWidget-based dialogs for managing account resources, which, while functional, are not optimized for modern platform usability, especially on touch devices or diverse platforms. My project addresses this by porting resource configuration dialogs to QML, a modern, flexible, and responsive UI framework, while maintaining compatibility with existing QWidget-based systems. The goal is to create a shared infrastructure that supports both QWidget and QML-based configurations, enabling a seamless transition to modern UI development without disrupting existing functionality.

The project has two main components:

  1. Building a Shared Infrastructure: Creating a foundation that supports both QWidget and QML-based configuration dialogs for Akonadi agents, ensuring backward compatibility and scalability.

  2. Porting SingleFileResource-Based Configurations: Migrating singlefileresource based configurations, such as the ical, vcard, etc to QML to provide a modern, responsive user experience.

Benefits to KDE Community -

Porting Merkuro's account management to QML offers significant benefits:

  • For Users: QML-based dialogs provide a smoother, more intuitive, and visually engaging experience. QML's flexibility supports dynamic and touch-friendly interfaces, making account management more accessible on various devices, from desktops to mobile platforms.

  • For Developers: The shared infrastructure improves modularity and maintainability, allowing developers to adopt QML at their own pace without breaking legacy systems. This sets the stage for future QML-based UI development in Akonadi and beyond.

Progress So Far -

1. Implemented Shared Infrastructure for Akonadi

To support both QWidget and QML-based configurations in Akonadi, I developed a new infrastructure in following way:

  • AbstractAgentConfiguration: A new base class defining standard methods (load(), save(), etc.) for consistent configuration handling.

  • AgentConfigurationBase: Updated to inherit from AbstractAgentConfiguration, ensuring compatibility with existing QWidget-based dialogs.

  • QuickAgentConfigurationBase: A new class inherited from AbstractAgentConfiguration, enabling QML-based configurations via shared QML engine for dynamic UIs.

  • QuickAgentConfigurationFactoryBase: A factory for QML-based configuration instances, complementing the QWidget factory.

This infrastructure, inspired by KCMUtils, enables Akonadi to handle both legacy and modern UI paradigms seamlessly.

2. Ported Knut Configuration Dialog to QML

I removed QWidget based code and then implemented Knut configuration dialog in QML.

And currently working on porting singlefileresource based dialogs....

Challenges Faced -

The progress came with several challenges that shaped my learning:

  • Testing the QML Infrastructure: Validating the new QML infrastructure during development was difficult, as it required a functional QML-based dialog to test fully. I could only verify the infrastructure’s correctness after porting the Knut configuration to QML, which delayed feedback and required iterative adjustments.

  • Navigating KDE’s Modular Ecosystem: KDE's ecosystem is vast and modular so understanding each of them is very important. Recently, I spent around hour looking for the Knut configuration dialog in Merkuro only to find out (thanks to Carl) that it actually lives in KOrganizer’s test suite! I was actually unaware of this.

And of course, compiling errors and warnings were always there to keep me company :)

Thank you and stay tuned for the next part, where I’ll share more updates and learnings from my GSoC journey!