Skip to content

Saturday, 18 April 2026

If you have recently installed a very up-to-date Linux distribution with a desktop environment, or upgraded your system on a rolling-release distribution, you might have noticed that your home directory has a new folder: “Projects”

Why?

With the recent 0.20 release of xdg-user-dirs we enabled the “Projects” directory by default. Support for this has already existed since 2007, but was never formally enabled. This closes a more than 11 year old bug report that asked for this feature.

The purpose of the Projects directory is to give applications a default location to place project files that do not cleanly belong into one of the existing categories (Documents, Music, Pictures, Videos). Examples of this are software engineering projects, scientific projects, 3D printing projects, CAD design or even things like video editing projects, where project files would end up in the “Projects” directory, with output video being more at home in “Videos”.

By enabling this by default, and subsequently in the coming months adding support to GLib, Flatpak, desktops and applications that want to make use of it, we hope to give applications that do operate in a “project-centric” manner with mixed media a better default storage location. As of now, those tools either default to the home directory, or will clutter the “Documents” folder, both of which is not ideal. It also gives users a default organization structure, hopefully leading to less clutter overall and better storage layouts.

This sucks, I don’t like it!

As usual, you are in control and can modify your system’s behavior. If you do not like the “Projects” folder, simply delete it! The xdg-user-dirs utility will not try to create it again, and instead adjust the default location for this directory to your home directory. If you want more control, you can influence exactly what goes where by editing your ~/.config/user-dirs.dirs configuration file.

If you are a system administrator or distribution vendor and want to set default locations for the default XDG directories, you can edit the /etc/xdg/user-dirs.defaults file to set global defaults that affect all users on the system (users can still adjust the settings however they like though).

What else is new?

Besides this change, the 0.20 release of xdg-user-dirs brings full support for the Meson build system (dropping Automake), translation updates, and some robustness improvements to its code. We also fixed the “arbitrary code execution from unsanitized input” bug that the Arch Linux Wiki mentions here for the xdg-user-dirs utility, by replacing the shell script with a C binary.

Thanks to everyone who contributed to this release!

I spent the last week in Graz, Austria, attending a KDE sprint as well as Grazer Linuxtage.

KDE Sprint

Just like last year, the Grazer Linuxtage team had made rooms available for KDE people to meet in the week prior to the conference. More than twenty contributors attended, below are a few notes from discussions I have been involved with.

Photo of the KDE sprint at TU Graz.
Photo by Kieryn Darkwater

AppStream release notes

We use AppStream application metadata in a number of places currently:

  • The apps.kde.org website.
  • Software stores such as Flathub, F-Droid, Google Play or the Microsoft Store.
  • Software centers such as Discover.

In-app application metadata has so far been maintained separately though, using the KAboutData API. With KDE Frameworks 6.26 it will become possible to populate that from AppStream data as well, reducing duplicated data and duplicated translation efforts.

We also expanded how we use release notes from AppStream data:

  • Release notes can now also be translated.
  • There’s new API for accessing AppStream release notes inside an application itself. This is meant to avoid duplicated efforts for in-app release notes.
  • The KDE Gear release automation will now handle notes for pre-releases correctly. This means you can add release notes for users of CD builds already, those will get translated and merged into the subsequent stable release notes automatically.

There’s a few more things to do here still:

  • We don’t have a Kirigami-based standard component for in-app release notes yet.
  • The metadata converters for F-Droid and Google Play don’t handle release notes yet.

LSAN rollout on the CI

After Albert had added infrastructure for LeakSanitizer (LSAN) suppressions in the CI, we were able to enable LSAN in several more repositories which had previously been blocked on “unfixable” or intentional “leaks” outside of our control.

The increased visibility on actual issues then also helped with identifying and fixing a couple more “real” leaks, e.g. in KGuiAddons and LibKGAPI.

Qt 6.11 for Android

There has been some progress on the long overdue Qt update for our Android builds. This had been delayed as it’ll imply some rather drastic changes to the supported Android versions and devices. Lacking alternatives we will go ahead with this.

In particular, after 26.04.0 is out this means only Android 9 and higher will be supported, and 32bit ARM builds will be discontinued.

We prepared Qt 6.11 CI images and applied necessary build fixes to practically all of our apps that have Craft-based Android builds. Initial test looks promising, and some of the annoying input handling glitches seem to have been fixed.

Sentry for Android

Another Android-related topic we looked into was uploading crash information to KDE’s Sentry instance. Our Linux and Windows builds can do this since some time, and it has been a great help with identifying, prioritizing and fixing crashes.

Initial experiments got this to work quickly on Android as well, but it will require more work to do this properly and give users full control over whether they want to upload crash information or not. We explored a few options on how to do that and have a plan now, but that yet has to be implemented.

KMime move to KDE Frameworks

The long-lasting move of KMime to KDE Frameworks will finally happen early May, after the 26.04 KDE Gear release and in time for the 6.27 KDE Frameworks release.

Users of KMime will need a few minor build system adjustments for this. The CMake target name changes from KPim6::Mime to KF6::Mime, and the version number changes from KDE PIM versioning KDE Frameworks versioning. You can either replace this at once, or use the forward-compatibility approach suggested below.

The following CMake snippet replaces the previous find_package call for KPim6Mime and will handle both variants from before and after the move.

find_package(KF6Mime 6.27 CONFIG)
if(NOT TARGET KF6::Mime)
    find_package(KPim6Mime 6.7.0 CONFIG REQUIRED)
    add_library(KF6::Mime ALIAS KPim6::Mime)
endif()

Target names in target_link_library calls can then be switched to the new KF6::Mime already. Once the transition is complete, the above snippet can be simplified to a single find_package call for the new variant again, without needing to touch anything else anymore.

Akademy preparations

Akademy Graz September 19-24

While we were in Graz the dates for this year’s Akademy were announced: September 19-24. Registration as well as the Call for Participation are open as well.

As it was already known that Akademy would be in Graz this year, we could use the opportunity to inspect venues, test food options, as well as to review and improve OSM (indoor) mapping of the conference location.

Itinerary

With a bunch of people traveling to the sprint, Itinerary also got a bit of attention of course:

  • Performance of opening the “My Data” page the first time was improved, by optimizing computing some of the statistics shown on that page.
  • A new way of sharing GraphQL query fragments should simplify maintaining support for the various OpenTripPlanner flavors in KPublicTransport. For some of the backends, the information available for rental bikes/scooters/cars became more detailed as a result of this.
  • Kate’s syntax highlighting got support for IATA SSIM flight schedules. That’s fallout from work on importing such data into Transitous, where it will eventually also benefit Itinerary and KTrip.

And more…

That’s not all of course, other topics included:

There’s also reports from e.g. Kieryn, Albert and Kristen on Planet KDE with more details and other perspectives.

Grazer Linuxtage

KDE

At Grazer Linuxtage we had a KDE booth again, showing devices running Plasma, Krita and Plasma Mobile, handing out stickers as well as the famous amigurumi Konqis, collecting donations, and of course with a bunch of KDE contributors around to talk to.

Photo of the KDE booth at Grazer Linuxtage.
KDE's booth at Grazer Linuxtage (photo by Kieryn Darkwater)

Albert also did a presentation about 30 years of KDE.

Transitous

Also as part of the conference program I spoke about Transitous and what has been built for that and around that in the past two years.

Following the recent discussions about dynamic traffic data, the talk about monitoring vehicle-to-vehicle and vehicle-to-infrastructure messages was particularly interesting. The information shown on opentrafficmap.org is obtained that way, and shows how incredibly detailed this is.

There’s current positions of trams, busses, and regular cars, speed, acceleration vectors, status of all external lights, and which pedal gets pressed. Traffic lights report their current state and change timings as well as provide a full machine-readable model of their signal groups and lane relations. All of that in a standardized and (intentionally) unencrypted form.

Lots of potential in this, I wasn’t aware this went anywhere after things had gotten a bit quieter around the self-driving cars hype.

How you can help!

Bringing people together, for a small meeting or a big conference, is extremely useful and productive. The necessary travel and logistics come with costs though, which is where your donations to organizations like KDE e.V. or Grazer Linuxtage help!

Welcome to a new issue of This Week in Plasma!

Last week over 20 KDE contributors converged on the Austrian city of Graz for our annual mega-sprint. It was a busy week, offering a good opportunity for the kinds of face-to-face conversations that can unblock stuck work and reach new consensus. Expect reports to appear on Planet KDE over the next week or two.

We skipped an issue of TWiP due to the sprint but these past two weeks have indeed been busy! Some major features landed, along with a slew of impactful UI improvements. Let’s get right into it:

Notable new features

Plasma 6.7

Each screen can now switch between any of the system’s virtual desktops independently! (Hynek Schlindenbuch, KDE Bugzilla #107302)

You can now choose your default calendar app on System Settings’ Default Applications page. (Denys Madureira, plasma-workspace MR #6468)

Default calendar chooser
…And you can now middle-click on the Digital Clock widget to open the calendar app you’ve configured there. (Denys Madureira, plasma-workspace MR #6462)

Digital Clock widget tooltip showing option to open the default calendar app

You can now configure the Alt+Tab window switcher to always appear on the primary screen, rather than whichever screen has keyboard focus or the pointer on it. (Yuki Tsujii, KDE Bugzilla #329696)

You can now mark app-specific actions that you find in a search as favorites. (Kai Uwe Broulik, plasma-workspace MR #6224)

App action being marked as a favorite

The Kicker Application Menu widget now highlights newly-installed apps, just like the Kickoff Application Launcher widget does. (Christoph Wolk, plasma-desktop MR #3649)

You can now drag-and-drop apps to the “Favorites” sections of the Kickoff, Kicker, and Dashboard widgets. (Christoph Wolk, KDE Bugzilla #383302 and plasma-desktop MR #3652)

If you find yourself captivated by a picture of the day wallpaper image, you can now right-click on it and access external information about it. (Kai Uwe Broulik, kdeplasma-addons MR #1035)

Menu item letting you see information about the current picture of the day wallpaper

You can now optionally set Discover to quit after installing updates. (Taras Oleksyn, KDE Bugzilla #508743)

Option in Discover to quit after installing updates

Notable UI improvements

Plasma 6.6.5

While entering the password for a Wi-Fi network using the Networks widget, the password field no longer loses keyboard focus if you happen to move the pointer away from it. (Tobias Fella, plasma-nm MR #556)

Plasma 6.7

There’s now a new standard “Badge” component in Kirigami, and many parts of Plasma have been ported to use it. (Nate Graham, kirigami MR #1847, plasma-desktop MR #3089, plasma-workspace MR #6488, systemsettings MR #399, discover MR #1290, and kinfocenter MR #262)

The Input Method System Tray widget no longer disables the active input method if you click it while the input method isn’t currently visible. Now it just shows and hides it. (Aleix Pol Gonzalez, plasma-workspace MR #6485)

Improved the design of Discover’s grid and list items, which also slightly increases the information density of the pages that show them. (Nate Graham, discover MR #1292)

The Kicker Application Menu widget now shows tooltips for items whose labels have been elided. (Christoph Wolk, KDE Bugzilla #515608)

System Monitor now differentiates multiple GPUs by their names, rather than by arbitrary numbers. (Bernhard Friedreich, libksysguard MR #464 and ksystemstats MR #129)

System Monitor now exposes top-level actions you can use to launch it and go straight to a specific page. These can be invoked from the app’s context menu, or via a global shortcut you set yourself. (Bernhard Friedreich, plasma-systemmonitor MR #427)

System Monitor app’s context menu shoting actions to jump to specific pages

The Margins Separator widget is now added from the panel configuration dialog’s “Add New” menu, rather than the widget explorer sidebar. This matches how the similar spacer widget is added. (Antti Savolainen, plasma-workspace MR #6494 and plasma-desktop MR #3663)

Margins Separator item now lives in the panel configuration dialog

The clipboard popup invoked with Meta+V now closes if it’s open when you press that keyboard shortcut a second time. (Kristem McWilliam, plasma-workspace MR #6450)

Improved how System Settings’ Shortcuts page handles being told to assign a shortcut that’s already assigned to something else. (David Bacskay-Nagy, KDE Bugzilla #484526 and KDE Bugzilla #489544)

KRunner now lets you evaluate fancy mathematical expressions more flexibly; in the past you could ask for sqrt(2) + 2 but not 2 + sqrt(2); now both are accepted. (Alex Cizinsky, KDE Bugzilla #496343)

Frameworks 6.26

The dialog that asks you if you want to launch or edit an executable text file (like a .desktop file) no longer gives you the opportunity to tell it to always do that thing. This behavior was making .desktop files un-launchable for people who selected the option to always open those types of files in a text editor. Anyone who wants to use this feature can still configure it in Dolphin’s settings. (Nate Graham, kio MR #2171)

Removed the CFP franc from the list of common currencies, so it no longer shows up automatically for every currency conversion run using KRunner-powered searches. (Pellaeon Lin, kunitconversion MR #84)

Notable bug fixes

Plasma 6.6.4

Fixed a case where Plasma Keyboard could crash after Alt+Tabbing away from a window marked as “keep above others”. (Devin Lin, KDE Bugzilla #517087)

Worked around a bug added in Qt 6.11 that made some of Spectacle’s annotation tools unclickable. (Oliver Beard, KDE Bugzilla #515304)

Fixed a layout issue in the Activity Pager widget that made it look weird at specific non-default panel sizes. (Marco Martin, KDE Bugzilla #518451)

Plasma 6.6.5

Fixed a case where KWin could crash on logout when the session that’s closing had sent any emulated keyboard or mouse events. (Vlad Zahorodnii, kwin MR #9092)

Fixed an issue with the screen locker that could cause the buttons to malfunction and leave you unable to unlock after you pressed the Esc key in combination with various other actions with specific timings. (Akseli Lahtinen, KDE Bugzilla #515299)

Fixed an issue that made color picker functionality throughout the system return random colors on systems with certain graphics hardware. (Xaver Hugl, KDE Bugzilla #518770)

Fixed an issue that made the clock times shown on the lockscreen differ across the screens of a multi-screen setup. (DeepChirp, KDE Bugzilla #516479)

Fixed two issues that made network connections added from the Plasma setup wizard not always work properly. (Adam Williamson, KDE Bugzilla #514841 and plasma-setup MR #100)

Fixed a couple of cases where auto-hide panels might not hide properly when there were any unread notifications. (Patrick Cleary, KDE Bugzilla #519046)

Switching away from the Networks Widget in the System Tray no longer briefly makes a placeholder message appear. (Tobias Fella, KDE Bugzilla #511367)

Improved the reliability of the Weather Widget’s icon fallback behavior, making it less likely to show broken weather icons. (Ismael Asensio, kdeplasma-addons MR #1032)

Plasma 6.7

Fixed an issue that could make the Audio Volume widget not notice that a new audio device was connected and became the default one. (Oliver Beard, plasma-pa MR #393)

Using the clipboard’s non-default “Never save [non-text items] in history” option no longer breaks the ability to paste items that have been moved to the top of the clipboard history. (Christoph Wolk, KDE Bugzilla #514095)

Apps in the Quick Launch widget can once again be re-arranged. (Alex Folland, KDE Bugzilla #481922)

Fixed two quirky issues with Spectacle’s magnifier in Rectangular Region mode. (Noah Davis, KDE Bugzilla #509776 and KDE Bugzilla #509777)

Notable in performance & technical

Plasma 6.7

KWin now supports the Wayland session management protocol! This is an important step for apps to be able to remember their sizes and positions after restarting the system. The next step is for toolkits, libraries, and apps to implement support. We’re getting there! (Vlad Zahorodnii, KDE Bugzilla #436318)

Reduced the size of animated GIF images produced by apps like Spectacle that use KDE’s KPipeWire library. (Bernhard Friedrich, kpipewire MR #247)

How you can help

KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.

Would you like to help put together this weekly report? Introduce yourself in the Matrix room and join the team!

Beyond that, you can help KDE by directly getting involved in any other projects. Donating time is actually more impactful than donating money. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine! You don’t have to be a programmer, either; many other opportunities exist.

You can also help out by making a donation! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.

To get a new Plasma feature or a bug fix mentioned here

Push a commit to the relevant merge request on invent.kde.org.

Friday, 17 April 2026

Let’s go for my web review for the week 2026-16.


Sovereign Tech Agency funding - Mastodon Blog

Tags: tech, fediverse

This looks like an interesting agreement. E2EE messaging anyone? There is more of course, but I’m especially excited regarding this one.

https://blog.joinmastodon.org/2026/04/sovereign-tech-agency-funding/


You cannot use the GNU (A)GPL to take software freedom away

Tags: tech, foss, licensing, law

The FSF is now weighting in on the Euro-Office vs OnlyOffice situation. You have to respect the spirit of the AGPL and can’t take away freedom with extra clauses. Seems to make sense to me.

https://www.fsf.org/blogs/licensing/agpl-is-not-a-tool-for-taking-freedom-away


Europe should regulate Big Tech instead of banning kids from social media, Estonia says

Tags: tech, politics, europe

Looks like someone is actually paying attention to what’s going on.

https://www.politico.eu/article/europe-should-stand-up-to-big-tech-instead-of-imposing-social-media-bans-estonia-says/


The Utopia of the Family Computer

Tags: tech, internet, culture, time, history

Interesting piece, shows quite well how new technologies get in the home and then slowly expand. In the case of the Internet, it was indeed literally in a corner of the home before slowly being woven in our lives.

https://mudmapmagazine.com/the-utopia-of-the-family-computer/?ref=DenseDiscovery-384


On the acceptance of GenAI

Tags: tech, ai, machine-learning, gpt, ethics

Stop looking at the shiny toy, remember the ethics behind them…

https://smallsheds.garden/blog/2026/on-the-acceptance-of-genai/


Is Claude Mythos “Terrifying” or Just Hype?

Tags: tech, ai, machine-learning, copilot, marketing, hype, research

Are we surprised it’s mostly a PR stunt? Not at all. Of course, I agree a lot with the conclusion: we can’t trust any claim from those companies. They try to present themselves as labs but mostly try to disguise marketing as research…

https://calnewport.com/is-claude-mythos-terrifying-or-just-hype/


How I run multiple $10K MRR companies on a $20/month tech stack

Tags: tech, simplicity, complexity, performance, minimalism, infrastructure

There’s a whole swat of solutions for very lean services. You can go a long way reducing complexity as much as possible. Less infrastructure bills are definitely welcome.

https://stevehanov.ca/blog/how-i-run-multiple-10k-mrr-companies-on-a-20month-tech-stack


Put your SSH keys in your TPM chip!

Tags: tech, ssh, hardware, security

Comprehensive guide to have SSH keys stored in the TPM chip. Clearly it’s still a very manual process.

https://raymii.org/s/tutorials/Put_your_SSH_keys_in_your_TPM_chip.html


Supply chain nightmare: How Rust will be attacked and what we can do to mitigate the inevitable

Tags: tech, rust, supply-chain, security

Indeed, the current supply chain model of Rust could be better. While we wait for improvements (with no sign of them coming), there are ways to try to avoid some of the common pitfalls.

https://kerkour.com/rust-supply-chain-nightmare


No one owes you supply-chain security

Tags: tech, rust, supply-chain, security, foss

Can crates.io make things easier to secure? I do think so. But this post is right that we shouldn’t forget the social aspect of the whole supply chain security conversation.

https://purplesyringa.moe/blog/no-one-owes-you-supply-chain-security/


Rust is Just a Tool

Tags: tech, rust, tools, hype

This bears repeating of course. I still wish our industry would run less on hype. It’s not specific to Rust of course.

https://lewiscampbell.tech/blog/260204.html


Flat Error Codes Are Not Enough

Tags: tech, rust, failure

When possible it’s nice to nest your error types, this allows better investigation when something fails.

https://home.expurple.me/posts/flat-error-codes-are-not-enough/


C++26: Structured bindings in conditions

Tags: tech, c++

Looks like a small syntax adjustment, but that indeed open the door to nice improvements.

https://www.sandordargo.com/blog/2026/04/15/cpp26-structured-bindings-condition


The Global API Injection Pattern

Tags: tech, c++, dependencies, metaprogramming

This is indeed a nice pattern for dependency injection in C++ for global functions.

https://www.elbeno.com/blog/?p=1831


Can we finally use C++ Modules in 2026?

Tags: tech, c++

Probably not… This is really taking a long time to be adopted. It’s not an incremental thing at all, this doesn’t help.

https://mropert.github.io/2026/04/13/modules_in_2026/


Bring Back Idiomatic Design

Tags: tech, web, frontend, desktop, ux

Or why I tend to favor desktop applications (made by KDE as much as possible) rather than web applications whenever possible. It’s just more pleasant to have things which look and feel homogeneous.

https://essays.johnloeber.com/p/4-bring-back-idiomatic-design


The unwritten laws of software engineering

Tags: tech, engineering, failure, reliability

Those have no name… but you’ll encounter them regularly indeed.

https://newsletter.manager.dev/p/the-unwritten-laws-of-software-engineering


Writing design docs

Tags: tech, architecture, design, documentation, processes

A good primer about design documents. What’s nice about this one is the focus on the process rather than the form of the document. Indeed what matters is the shared understanding and making sure the right decision is made.

https://blog.ceejbot.com/posts/design-docs/


No agenda, no meeting

Tags: tech, meetings, documentation, remote-working

Of course I wish more meetings would follow this pattern… or not happen at all, sending me a proper document instead.

https://ben.balter.com/2026/04/06/no-agenda-no-meeting/


Technical Leadership is Leadership

Tags: tech, leadership, team

Short and to the point reminder: our job is never only about the tech. It always encompass some people related concerns, be it inside teams, between teams, or the impact on the users.

https://estherderby.com/technical-leadership-is-leadership/


Even Ohno’s Classic “5 Whys” Example Deserves Another Why

Tags: agile, lean, failure

A bit long for what it’s saying. And yet it’s a good reminder, don’t focus on why… Ask the question as many times as necessary to get to the point where you can find a solution which prevents issues to reappear.

https://www.leanblog.org/2026/04/ohno-5-whys-actually-seven/



Bye for now!

La Palma Tech Tagoror vuelve. Los meetups en la isla canaria de La Palma se relanzan este 23 de abril, en La Real Sociedad Aridane, Los Llanos de Aridane. La entrada es gratuita previo registro. Únete al evento o apúntate al grupo de Meetup para estar informado de futuras actividades.

Thursday, 16 April 2026

100+ KDE Application snaps updated and released to stable, with Qt6, KF6, arm64 support, and KDE CI integration. Coinciding with KDE Gear release day.

Wednesday, 15 April 2026

This April, KDE once again had a sprint in Graz, Austria. This one was deemed a "Mega Sprint" as unlike last year it was not just for Plasma, but for everything KDE-related from Plasma, goals, frameworks, apps, and more. We had a great turnout!

Group photo of the sprint attendees

Amazingly I managed to go the whole trip this time without getting sick! 😊

We covered a lot of ground! Briefly, a few of the things off the top of my head:

Testing

Improving reliability, ease of running locally, documentation, and ensuring that test failures are reported by the CI in merge requests. We have some work to do for all of these to improve our testing story, and we collectively came to important decisions on how to move forwards.

Gardening

There is a lot, often not enough hours/energy to deal with it, and a lot of the time people just don't even know about the issue(s). Let's try: being more proactive about closing bad/stale MRs, creating a GitLab bot to help automate things that get people's attention, keep track of things by sending regular notices to the mailing list(s) similar to how the "failing ci" emails help people keep on top of things.

Gestures

A complicated topic! We had a lot of good discussions about the user flow/UI/UX, and I think we came to a really good place that sets us up for some excellent custom gestures/bindings with the fantastic work by Jakob & Natalie.

This sort of work is a really great example of something that would have been very difficult to do online, that we broke through with a lot of back and forth conversation/explanation/design at the sprint — which is exactly why we get together to unblock these things and make quick progress together!

Plasma Keyboard

We covered all of the large topics/issues that have been pending, for example: morekeys/full keyboard emulation, emojis, speech-to-text, Wayland protocols, testing, etc. So much that each could probably be its own blog post! We'll continue to see a whole lot of changes and improvements here; we really want plasma-keyboard to be a first-class experience for all sorts of input stories.

Photo of all the Framework laptops at the sprint

Graz

We were once again in lovely Graz, and the weather was a very welcome change from the brutal winter we've had in Canada — still had ice and snow when I left home! In addition to the mostly sunny weather and chirping birds, the city and its people were just fantastic once again. 💙

I can't say enough just how lovely Graz is, and how glad I was to get to visit again. 🇦🇹 Special shout out to Kevin Krammer, our KDE local who did so much to make this sprint great for us!

The fact that Graz is a lovely place to go is good news, since this year we'll be hosting Akademy there — I am already looking forward to coming back! :D

Lovely architecture on this museum in Graz

Interesting tower building in Graz

Shipping container apartments in Graz

Tuesday, 14 April 2026

La Palma Tech Tagoror is back. After a year without events, the meetup series relaunches on April 23rd at Real Sociedad (Casino) Aridane, Los Llanos de Aridane, La Palma. Free entry, short talks, good conversations. Join us — or sign up to the Meetup group to stay informed.

Sunday, 12 April 2026

I spent this week in Graz, the weekdays as part of the KDE Mega Sprint 2026 and Saturday attending Grazer Linuxtage 2026.

Before arriving in Graz I already did some work on the train from Vienna. I published a new version of kio-gopher so KDE Frameworks 6 applications can browse gopher sites and helped finish the review of KDominate, Albert Vaca's latest tactical game.

At the Sprint itself many things were achieved, too many to remember. 

There was some discussion about improving release notes so they go into the appstream files and end up in lots of interesting places (apps.kde.org, Discover, etc).

I also talked a bit with David Edmundson on how to streamline our work in the KDE Security team.

Another important thing was that we introduced a way to help us enable the LeakSanitizer in more repositories (by ignoring leaks that are not our fault and that we can't control) 

Non-planned group photo of Sprint attendees, a few are missing. Apologies!

 

While we were at the Sprint it was announced that we will have Akademy 2026 also in Graz. So start preparing to visit Austria in late September! 


Grazer Linuxtage was very nice, as far as I've heard also very successful in attendance, with the estimate being around 50% more than the previous year (hard to calculate when you don't require registration).

There were not many talks in English but the ones I attended were interesting. If you have time I would recommend giving them a quick skim to see if they interest you.

Transitous - Free and Open Public transport routing  (from KDE's own Volker Krause)

What can we learn from Android for other embedded Linux systems security? (Every app in Android is a different Linux user)

LibreOffice: What we're doing, where we're going, and how you can help (Very fashionable given the latest rifts in the community (sadly))

How we hacked the Bavarian State with an Open Source Open Letter (About how to pressure administrations not to give Microsoft all of our tax money)

I gave a talk about KDE and the 30 years of the Linux desktop, that from the reaction of the attendees I think it was well received, that's always nice :) 

The video from my talk is available at https://media.ccc.de/v/glt26-691-kde-30-years-of-the-linux-desktop 

Thanks everyone involved in the organization and Kevin Krammer in particular for hosting us! 

Friday, 10 April 2026

I was reading the latest edition of Kevin Ottens’ excellent weekly web review and one particular article caught my eye: “The Git Commands I Run Before Reading Any Code“. In a nutshell, you can use the git version control tool to quickly assess a project’s health, what breaks, who’s a key figure, how bad emergencies are, and so on.

So useful!

I immediately wanted to apply this to KDE projects. So I took the commands from the post and made some shell aliases and functions for convenience:

# git repo analysis tools
alias what-changes="echo 'What changes a lot?' && git log --format=format: --name-only --since='1 year ago' | rg -v 'po$|json$|desktop$' | sort | uniq -c | sort -nr | head -20"
alias what-breaks="echo 'What breaks a lot?' && git log -i -E --grep='fix|bug|broke|bad|wrong|incorrect|problem' --name-only --format='' | sort | uniq -c | sort -nr | head -20"
alias emergencies="echo 'And what were the emergencies?' && git log --oneline --since='1 year ago' | grep -iE 'revert|hotfix|emergency|urgent|rollback'"
alias momentum="echo \"What's the project's momentum over the past 5 years?\" && git log --format='%ad' --date=format:'%Y-%m' | sort | uniq -c | tail -n 60"
alias maintainers-recently="echo \"Who's been driving this project in the past year?\" && git shortlog -sn --no-merges --since='1 year ago' | rg -v 'l10n daemon script' | head -n 30"
alias maintainers-alltime="echo 'And what about for all time?' && git shortlog -sn --no-merges | rg -v 'l10n daemon script' | head -n 30"
function repo-analysis {
what-changes
echo
what-breaks
echo
emergencies
echo
momentum
echo
maintainers-recently
echo
maintainers-alltime
}

Now let’s run it on Plasma. Here’s plasma-workspace, the core of Plasma:

$ git clone ssh://git@invent.kde.org/plasma/plasma-workspace.git
$ cd plasma-workspace
$ repo-analysis
What changes a lot?
  1519  
    38 CMakeLists.txt
    29 shell/shellcorona.cpp
    24 runners/services/servicerunner.cpp
    21 wallpapers/image/imagepackage/contents/ui/config.qml
    19 libnotificationmanager/notifications.cpp
    18 shell/org.kde.plasmashell.desktop.cmake
    18 devicenotifications/devicenotifications.cpp
    17 kcms/lookandfeel/kcm.cpp
    16 wallpapers/image/plugin/model/packagelistmodel.cpp
    16 kcms/cursortheme/xcursor/xcursor.knsrc
    15 wallpapers/image/plugin/model/imagelistmodel.cpp
    15 applets/notifications/global/Globals.qml
    15 applets/devicenotifier/devicecontrol.cpp
    14 wallpapers/image/plugin/imagebackend.cpp
    14 shell/panelview.cpp
    14 .kde-ci.yml
    14 applets/systemtray/systemtray.cpp
    13 runners/services/autotests/servicerunnertest.cpp
    12 krunner/qml/RunCommand.qml

What breaks a lot?
   225 shell/shellcorona.cpp
   183 shell/panelview.cpp
    83 CMakeLists.txt
    74 applets/systemtray/package/contents/ui/main.qml
    71 applets/digital-clock/package/contents/ui/DigitalClock.qml
    63 klipper/klipper.cpp
    62 applets/notifications/package/contents/ui/NotificationItem.qml
    58 wallpapers/image/imagepackage/contents/ui/config.qml
    56 shell/desktopview.cpp
    56 libtaskmanager/tasksmodel.cpp
    54 shell/main.cpp
    54 applets/systemtray/systemtray.cpp
    53 shell/shellcorona.h
    52 krunner/view.cpp
    48 applets/digital-clock/package/contents/ui/CalendarView.qml
    47 runners/services/servicerunner.cpp
    46 wallpapers/image/imagepackage/contents/ui/main.qml
    45 applets/notifications/package/contents/ui/NotificationPopup.qml
    44 applets/systemtray/package/contents/ui/ExpandedRepresentation.qml
    43 startkde/startplasma.cpp

And what were the emergencies?
4f526a7bd1 Revert “applets/systemtray: Prevent popups from overlapping with the panel”
dca5788fee lookandfeel/components: Revert Plasma::setupPlasmaStyle
2c0fd34541 Revert “ContainmentLayoutManager: send recursive mouse release events too”
b6b230f4ff Revert “Read selenium-webdriver-at-spi-run location from CMake”
b8651b56f6 hotfix: Remove doc translations without actual doc
1f43f576e8 Revert “Add forceImageAnimation property to force animated image play”
f0349b6c81 hotfix: remove stray .po file
3ff7ae4269 Revert “CI: enable parallel testing”
83bebc7896 Revert “Limit evaluateScript execution at 2 seconds”
4f45f672be Revert “kcms/componentchooser: Don’t offer NoDisplay services”
3bf0ff8f56 Revert “Disable linux-qt6-next while the regression in Qt gets fixed”
80996f0633 Revert “kcms/wallpaper: set roleNames for WallpaperConfigModel”

What’s the project’s momentum over the past 5 years?
   148 2021-05
    87 2021-06
    62 2021-07
    85 2021-08
   121 2021-09
   106 2021-10
   146 2021-11
   190 2021-12
   191 2022-01
    84 2022-02
   168 2022-03
   130 2022-04
   146 2022-05
   141 2022-06
   136 2022-07
   107 2022-08
   232 2022-09
   234 2022-10
   181 2022-11
   150 2022-12
   154 2023-01
   161 2023-02
   156 2023-03
   156 2023-04
   163 2023-05
   137 2023-06
   186 2023-07
   190 2023-08
   275 2023-09
   226 2023-10
   283 2023-11
   157 2023-12
   131 2024-01
   147 2024-02
   249 2024-03
   180 2024-04
   188 2024-05
   158 2024-06
   128 2024-07
   146 2024-08
   169 2024-09
   156 2024-10
   116 2024-11
    98 2024-12
   145 2025-01
   126 2025-02
   120 2025-03
   116 2025-04
   131 2025-05
   131 2025-06
   132 2025-07
   115 2025-08
   110 2025-09
    97 2025-10
   147 2025-11
   114 2025-12
   140 2026-01
   131 2026-02
   119 2026-03
    44 2026-04

Who’s been driving this project in the past year?
  116  Vlad Zahorodnii
  113  Nicolas Fella
   87  Christoph Wolk
   82  Fushan Wen
   78  Nate Graham
   66  Kai Uwe Broulik
   48  Bohdan Onofriichuk
   37  Harald Sitter
   34  Tobias Fella
   31  Marco Martin
   30  David Edmundson
   25  Akseli Lahtinen
   21  Ismael Asensio
   17  David Redondo
   16  Niccolò Venerandi
   15  Bhushan Shah
   11  Alexander Lohnau
   11  Kristen McWilliam
    9  Oliver Beard
    9  Shubham Arora
    8  Alexey Rochev
    8  Han Young
    8  Philipp Kiemle
    7  Albert Astals Cid
    6  Aleix Pol
    6  Méven Car
    5  Devin Lin
    5  Joshua Goins
    4  Alexander Wilms
    4  Arjen Hiemstra

And what about for all time?
 1543  Fushan Wen
 1497  Marco Martin
 1374  Kai Uwe Broulik
 1030  David Edmundson
  772  Nate Graham
  658  Alexander Lohnau
  551  Aleix Pol
  548  Nicolas Fella
  438  ivan tkachenko
  385  Eike Hein
  264  Sebastian Kügler
  250  Martin Gräßlin
  238  Harald Sitter
  232  Martin Klapetek
  223  Jonathan Riddell
  207  Vlad Zahorodnii
  194  David Redondo
  190  Friedrich W. H. Kossebau
  189  Laurent Montel
  144  Bhushan Shah
  134  Christoph Wolk
  134  Ismael Asensio
  126  Lukáš Tinkl
  121  Niccolò Venerandi
  117  Méven Car
  105  Natalie Clarius
   91  Konrad Materka
   80  Vishesh Handa
   80  Volker Krause
   79  Ivan Čukić

ShellCorona both changing and breaking a lot is no great surprise to me; it’s fiddly and complicated. We need to do something about that. The number of emergencies doesn’t look too bad, and momentum feels fine too. The project also appears to have a nice healthy diversity of contributors. Excellent!

It’s been quite illuminating to run these tools on KDE projects that I’m both more and less familiar with. Give it a try!