16 Jun 2026
Planet KDE | English
Week 3 — Bug Fixes and Import/Export Feature
This week, I worked on two things: a bug fix that was created during the ActionCollection port and starting the import/export feature.
Bug fix: Lock/Unlock action text:
A bug was created after !29 was merged. When a wallet was locked, the placeholder message displayed a "Lock" button instead of "Unlock". The issue came from ActionData using static text, while the lock action needs to reflect the wallet's current state. The fix was easy - switch between the lock and unlock ActionData dynamically based on the locked property.
AC.ActionCollection.action: locked ? "unlock" : "lock"
This was submitted as !31 and merged.
Configure Shortcuts menu item:
I added a "Configure Shortcuts…" menu item to the globalDrawer(!32), using AC.StandardActionData.KeyBindings to attach to the action automatically created by ActionCollectionManager.
Import/Export feature: I started implementing the import/export feature. The format is KWalletManager-compatible XML, so users can migrate between KWalletManager and KeepSecret. The implementation adds: -ImportExportManager C++ class with exportToFile() and importFromFile() methods. -Export… and Import… menu items in the globalDrawer. -File picker dialogs using QtQuick.Dialogs.
The merge request !33 is open and under review.
16 Jun 2026 8:22am GMT
Oxygen 6.7 is here: a breath of fresh air for KDE’s classic theme
Logo by: Nuno Pinheiro The year started off bleak. As I was gallivanting through KDE themes at hand, I decided to stick with the Oxygen one. It didn't take long to notice that this old theme, once the default in the KDE 4 era, wasn't looking its best. A slew of little bugs had accumulated,...... Continue Reading →
16 Jun 2026 6:49am GMT
Plasma 6.7
Plasma 6.7 brings powerful new features to KDE's classic desktop, and refines its user experience to new levels.
Enjoy thoughtfully-designed improvements that solve real problems, a sneak peak of future theming bliss, better performance, and more.
Read on to learn all about it!
Highlights
Per-screen virtual desktops
After 21 years, hopefully it will have been worth the wait… per-screen virtual desktops have finally arrived!
Test your microphone volume
No more being told your audio is too loud or quiet, or wondering if it's your microphone or an app that's misbehaving.
Press-and-hold for special characters
With Plasma's virtual keyboard enabled, press and hold a key to type special characters related to it.
Widgets
Light/dark mode toggle
In Plasma 6.6, we introduced the ability to create your own Global Themes, and switch between them as part of the day-night cycle. Plasma 6.7 puts you even more in control with a quick toggle to switch between light and dark Global Themes immediately.
Vietnamese lunar calendar
Plasma 6.7 adds the Vietnamese lunar calendar to its available set of non-Gregorian calendars. Now you can keep up with dates and events using both calendar systems with more ease than ever!

"Background Apps" in the System Tray
The System Tray is already the place for monitoring apps running in the background using traditional methods. Plasma 6.7 extends this support by also showing apps using the newer "Background Apps" system, which is more common for apps using the Flatpak package format.
Printing
Plasma's printing support continues to mature. Now the System Tray icon for printers shows the number of active jobs in a little badge.

On the enterprise side, Plasma 6.7 makes it substantially easier to connect to shared printers on Windows networks, and a new print queue management tool offers more power than ever before to those administering multiple frequently-used printers - while remaining simple and comprehensible enough for home use, too.

Usability
Plasma 6.7 puts a particular focus on refining the desktop experience to make common tasks faster than ever. Here's just a small assortment:
Faster virtual desktop switching in the Overview
When you press Meta + W to open the Overview screen, Plasma 6.7 lets you switch virtual desktops simply by scrolling or pressing the Page Up or Page Down keys.
Drag and drop to add and remove favorites
It's now easier than ever to add or remove favorite apps in the Application Launcher, Application Menu, and Application Dashboard widgets: just drag and drop!
More intuitive software management
The Discover software center now features a more obvious "Install" button and redesigned app cards with more information, plus a more intuitive sorting order.
In addition, installed software is now grouped by type, making it easier than ever to find what you're looking for.

Easier to compare different time zones
How much earlier is it in Denver if you're in Berlin? No longer will a question like this require mental gymnastics; Plasma 6.7 makes it easy to see how many hours earlier or later it is in each time zone shown in the Digital Clock widget compared to your local time zone.

"Type-ahead" on the desktop
For power users, the desktop layout now supports switching to "type-ahead" mode for quickly selecting files when typing on the desktop. You can change this back to activating KRunner if you prefer by Right-clicking on desktop and selecting Desktop and Wallpaper > Icons > Typing on the desktop from the pop-up menu.
Theming and styling:
Something old, something new
Oxygen
In preparation for KDE's 30th anniversary later this year, we've brought the Oxygen theme - used by default in KDE 4 - back up to par with the current Breeze theme.
Air, the Plasma Style providing a light version of Oxygen, has also returned, and we've reworked our Global Themes to feature light, dark, and twilight versions. Both Air and Oxygen benefit from a multitude of fixes, improvements, and restorations, including support for adaptive opacity, different panel positions, and more.
The classic KDE 4 Air and Horos wallpapers also make a return.
Breeze
The default Breeze theme also continues to evolve, now featuring rounded list and grid view highlights for many applications, and visible click effects for menu items.

Plasma's Notifications have been given a fancier animation: they now slide in from the nearest screen edge. This makes them more visually prominent and less likely to be missed, while at the same time avoiding being too attention-grabbing.
Union
Though Plasma's theming capabilities are second to none, for years creating those themes has been a difficult and fragmented experience.
Plasma's all-new Union theming system intends to streamline theming by making it possible to style Plasma, QtQuick apps, and QtWidgets apps all with a single set of easy-to-write CSS - the world's most popular and documented open standard for this purpose.
Plasma 6.7 marks the inaugural release of Union, here with a tech preview of the QtQuick style.
Union is under heavy development, and hence off by default. To test it out, make sure the union package is installed (name may differ depending on your OS), and select "Union" in System Settings > Colors & Themes > Application Style.
Applications must be restarted in order to use Union, and are expected to look nearly identical to Breeze.
If you've found a Union-specific issue, please report it here.
You can find out more about the current state and future plans for Union on its developer's blog.
Colors, graphics, and performance
Plasma has always offered a superb graphical experience, and 6.7 piles on further improvements.
No longer do you have to choose between color management using an ICC profile or enjoying HDR content; now both are possible at the same time!
In addition, you can now control whether the colors on the screen turn redder at extremely low brightness levels on many AMD laptops.
Finally, the team put a great deal of work into optimization, resulting in better performance and lower power usage for CPU-rendered apps, many full-screen windows, and integrated Intel GPUs.
But that's not all…
Plasma 6.7 has even more to offer, including:
- The ability to duplicate network connections, so you can quickly create several with only small differences between them - which can be useful in an enterprise or school setting
- An option to sync mouse and stylus pointers
- An option to set and change preferred calendar app
- An option to assign keyboard shortcuts for toggling the global "push-to-talk" microphone mute mode and clearing the notification history, making these actions faster to trigger
- An easy way of selecting mixed skin tone emojis in Emoji Selector app
- A System Monitor app that respects your preference regarding storage units (e.g. "GiB" vs "GB")
- A Global Menu widget that shows menus for apps on other screens by default
- A "Recent Locations" item in the Application Menu widget
- Customizable sorting and grouping in the Window List widget
- Support for many more Wayland protocols and portals
To see a high-level overview of all user-facing changes, see the Plasma 6.7 wiki page.
To see the full list of all changes, read the complete changelog.
In memory of Eric Laffoon
Plasma 6.7 is dedicated to Eric Laffoon, who passed away in May.
Eric was a longtime supporter of KDE going back decades, offering up his time, money, bug reports, and advocacy.
Eric is sorely missed, and we dedicate this release to him.

16 Jun 2026 12:00am GMT
15 Jun 2026
Planet KDE | English
New Kirigami-Addon's Onboarding Module

Even well-designed applications can become difficult to understand when their main workflows involve multiple controls, pages, or unfamiliar interaction patterns. Expecting users to discover these features on their own may lead to frustration, abandoned tasks, and additional support requests. Kirigami-Addons' onboarding module addresses this problem by presenting contextual guidance directly in the user interface, highlighting relevant elements and explaining them when they matter. When implemented through reusable and non-intrusive components, it can improve the user experience without requiring substantial changes to the existing application code.
Kirigami-Addons' onboarding module provides a complete set of features for defining and running contextual walkthroughs in Kirigami applications:
- Declarative steps: attach guidance text directly to existing QML elements without restructuring the interface.
- Source areas: define the UI region covered by a walkthrough and containing its onboarding steps.
- Automatic sequencing: visit steps according to their declaration order.
- Walkthrough groups: create multiple onboarding flows, such as basic and advanced tutorials, over the same interface.
- Conditional steps: disable individual steps dynamically; disabled or destroyed elements are skipped automatically.
- Visual highlighting: outline the current element while dimming and blurring the surrounding interface.
- Configurable appearance: adjust the highlight padding and the intensity and quality of the background blur.
- Adaptive tooltips: position guidance above, below, or within the available space around the highlighted element.
- Navigation controls: move forward or backward, or cancel the walkthrough, using buttons, keyboard shortcuts, or QML methods.
- Lifecycle hooks: prepare or restore the interface before a walkthrough or individual step is displayed.
- Dynamic interface support: navigate between pages, tabs, views, dialogs, or other containers before highlighting their elements.
- Custom content: add application-specific metadata and present images, animations, videos, or other QML content inside the onboarding tooltip.
- Responsive geometry tracking: keep the highlight synchronized when elements move, resize, or change parents' positions.
- State monitoring: observe the active walkthrough, source, current step, guidance text, geometry, and navigation availability.
- Accessible navigation: provide accessible button labels, keyboard operation, right-to-left layout support, and platform-consistent styling.
Adding Onboarding to Your Kirigami Application
This section explains how you can add onboarding features to your Kirigami appplication.
Basic onboarding declaration
After importing the onboarding module, mark a common ancestor of the UI elements with Onboarding.isSource. This source defines the area where the module creates its overlay, applies the background effect, and searches for onboarding steps. Steps are declared directly on descendant elements using attached properties. Here, Onboarding.texts associates guidance with the Create project button, while Onboarding.start() begins the walkthrough. Steps are presented in declaration order, allowing onboarding to be added with minimal changes to the existing QML structure. You can use Onboarding attached properties to highlight/explain individual controls, layouts/groups, and even sub-controls.
Defining multiple onboarding workflows
The Onboarding.sourceGroups property declares the workflows available from a source area. The empty string represents the default workflow started by Onboarding.start(), while named groups, such as advanced, are started by passing their name to Onboarding.start().
Each step uses Onboarding.groups to select the workflows in which it participates. The entries in Onboarding.texts correspond by position to those groups, allowing the same UI element to provide different guidance in each workflow. In this example, Create project belongs to both workflows, while Enable version control appears only in the advanced one.
Extending onboarding tooltips with additional data
The Onboarding.additionalData property associates application-specific metadata with a step. In this example, the metadata provides an animated WebP and its caption. A custom component reads the current step through Onboarding.currentItem.additionalData and displays this content using AnimatedImage and Label. Finally, binding the component to Onboarding.additionalDataComponent inserts it into the default tooltip between the guidance text and navigation controls, allowing applications to enrich onboarding steps without replacing the complete tooltip implementation.
Examples
This is the example tutorial included in the Kirigami Addons repository. It demonstrates how the onboarding module can highlight individual controls, groups of controls such as layouts, and even sub-controls. It also shows how to attach additional data to onboarding steps, such as a video and its caption, and how to define multiple onboarding workflows within the same application.
And this is the onboarding module in Minuet: a short guided walkthrough that highlights the most important parts of the exercise screen, explains what each control does, and helps new users understand the flow without leaving the application.
The onboarding module provides a declarative and non-intrusive way to introduce users to important controls and workflows in Kirigami applications. With support for multiple workflows, dynamic interfaces, custom tooltip content, lifecycle hooks, and configurable visual effects, it can address both simple guidance and more advanced onboarding scenarios.
A possible direction for future work is allowing each onboarding step to wait for a specific user interaction before continuing. Instead of relying only on the Next button, a step could advance after the user clicks a highlighted control, changes a value, or completes an expected action. This would extend the module beyond explanatory walkthroughs and enable fully guided, interactive tutorials in which users learn application workflows by performing the actual operations.
Give the module a try in your application and share your experience, suggestions, and use cases. Feedback is especially welcome while these APIs are still being refined for an upcoming Kirigami Addons release.
15 Jun 2026 4:19pm GMT
14 Jun 2026
Planet KDE | English
Introducing pkgcli: A nicer command-line interface for PackageKit
For almost two decades, the PackageKit package management abstraction layer has shipped with pkcon as its command-line client. pkcon does its job, but it was always kind of a "testing" front-end for the PackageKit daemon rather than a tool designed for everyday use. The focus has instead been on the GUI tools, automatic system updates, GUI application managers and other front-ends. Its command names mirror the D-Bus API almost one-to-one (get-details, get-updates, get-depends), output is very plain, and there is no machine-readable mode for scripting. Most importantly though, there has been no development on it at all for almost a decade, so pkcon was stuck in its rudimentary state from that era.
Since a lot of changes will be coming to PackageKit, and testing the daemon and working with it from the command-line was not very pleasant anymore in 2025/2026, I decided to modernize the tool as part of my work as fellow for the Sovereign Tech Agency last year. pkgcli is the new command-line client for PackageKit. It is built from the ground up to be pleasant to use interactively and easy to drive from scripts.
Why a new tool?
Of course, instead of introducing a new tool, I could have just expanded pkcon instead. The problem with that approach is that the pkcon utility has been around for so long and its command-line API had ossified so much, that rather than changing it and potentially breaking a lot of scripts relying on its quirks, I decided to introduce a new tool instead. pkcon can still be optionally compiled for people who need it in their scripts and workflows.
The goals for pkgcli, and the features it now has are:
- Human-friendly command names. Verbs that read the way you'd describe the task, instead of mirroring the D-Bus API 1:1:
show,search,list-updates,what-provides, instead ofget-detailsand friends. - Readable, colored output by default (still respecting
NO_COLORand degrading gracefully). - A real scripting mode. A global
--jsonflag emits JSONL instead of fully human-readable output when possible, to make it easier to use the tool for scripting purposes. - Sensible defaults. A few defaults have been changed, such as the metadata cache-age, or automatic cleanup of unused dependencies being enabled by default. This is more in line with current defaults by other tools and frontends. We also print package information in a slightly different, more readable way.
- Better handling of internationalized text. Text should now align properly in the terminal window, and we should no longer have completely chaotic text output on non-English locales (especially Chinese/Japanese).
Why not pkgctl?
Originally, this tool was called pkgctl, to match other common cross-distro tool names. However, that name was already taken by an Arch-specific distro development tool. When this issue was raised, we decided to just rename our tool to pkgcli with the next release, to avoid the name clash on Arch Linux.
Examples!
Here are some examples on how to use the new tool (some of which include the abridged output pkgcli prints).
Search for anything containing the string "editor" in name or description, then look at the details of one result:
$ pkgcli search editor
Querying [████████████████████████████████████████] 100%
▣ ace-of-penguins 1.5~rc2-7.amd64 [debian-testing-main]
▣ acorn-fdisk 3.0.6-14.amd64 [debian-testing-main]
▣ ardour 1:9.2.0+ds-1.amd64 [debian-testing-main]
✔ audacity 3.7.7+dfsg-1.amd64 [manual:debian-testing-main]
✔ audacity-data 3.7.7+dfsg-1.all [auto:debian-testing-main]
▣ augeas-tools 1.14.1-1.1.amd64 [debian-testing-main]
▣ emacs 1:30.2+1-3.all [debian-testing-main]
▣ gedit 48.1-9+b1.amd64 [debian-testing-main]
▣ gedit-common 48.1-9.all [debian-testing-main]
▣ gedit-dev 48.1-9+b1.amd64 [debian-testing-main]
[...]
$ pkgcli show nano
Package: nano
Version: 9.0-1
Summary: small, friendly text editor inspired by Pico
Description: GNU nano is an easy-to-use text editor originally designed as
a replacement for Pico, the ncurses-based editor from the non-free mailer
package Pine.
[...]
URL: https://www.nano-editor.org/
Group: publishing
Installed Size: 2.9 MB
Download Size: 646.0 KB
Search only within package names rather than descriptions:
$ pkgcli search name python3
Check for updates. refresh updates the metadata, then list-updates reports what's available:
$ pkgcli refresh && pkgcli list-updates
Loading cache [████████████████████████████████████████] 100%
▲ cme 1.048-1.all [debian-testing-main]
▲ gir1.2-gdm-1.0 50.1-2.amd64 [debian-testing-main]
▲ imagemagick 8:7.1.2.24+dfsg1-1.amd64 [debian-testing-main]
▲ imagemagick-7-common 8:7.1.2.24+dfsg1-1.all [debian-testing-main]
▲ imagemagick-7.q16 8:7.1.2.24+dfsg1-1.amd64 [debian-testing-main]
▲ libdlrestrictions1 0.22.0.amd64 [debian-testing-main]
▲ libfftw3-bin 3.3.11-1.amd64 [debian-testing-main]
▲ libfftw3-dev 3.3.11-1.amd64 [debian-testing-main]
Explore relationships between packages:
$ pkgcli list-depends inkscape # list what inkscape depends on
$ pkgcli list-requiring libappstream5 # list what requires libappstream5
Find the package that provides a capability, here the AV1 GStreamer decoder:
$ pkgcli what-provides "gstreamer1(decoder-video/x-av1)"
✔ gstreamer1.0-plugins-bad 1.28.3-1.amd64 [auto:debian-testing-main]
You can also have JSON output for most commands! Attach --json to any query and pipe the result straight into jq. Each line is a self-contained JSON object:
$ pkgcli --json list-updates | jq -r '.name'
cme
gir1.2-gdm-1.0
imagemagick
imagemagick-7-common
imagemagick-7.q16
libdlrestrictions1
libfftw3-bin
libfftw3-dev
libfftw3-double3
Try it
pkgcli is built by default alongside the rest of PackageKit since PackageKit 1.3.4. If your distribution ships a recent enough PackageKit, it should already be on your PATH. You can read its man page man pkgcli for more information. Feedback, bug reports, and patches are very welcome.
14 Jun 2026 6:22am GMT
13 Jun 2026
Planet KDE | English
KDE Android News (June 2026)
Quite a few things have happened around the Android platform support for KDE applications in recent months, so high time for another update on that.
Qt 6.11
As already mentioned previously, we have updated the Qt version to 6.11. That has the unfortunate consequence of losing support for Android 8 and older. Due to that we also removed the ARM32 builds, as devices running Android 9 or higher are very likely capable of using ARM64 builds anyway, cutting down the CI cost by a third.
The previously often annoying interactions between input focus and the virtual keyboard seems to have improved somewhat with Qt 6.11. Changes in how the back key/gesture is handled however also caused a few regressions, like a double page pop in more deeply nested applications (Kirigami MR 2100).
SafeArea support
While the previous focus of dealing with "safe" screen areas (ie. parts of the application window not being covered by screen cutouts or system controls like the Android status and navigation bars) had been on not breaking horribly due to Android's changed default behavior we have meanwhile been working on polishing this to actually look decent.
- Fixed misplaced drawer handles (Kirigami MR 2102).
- Fixed NeoChat's chat bar being placed behind the bottom navigation bar (NeoChat MR 2893).
- Fixed a double bottom margin in NeoChat (Kirigami MR 2107).
- Fixed floating buttons in Itinerary getting misplaced (Kirigami MR 2105).
- Fixed Alligator global drawer expanding into the status bar (Alligator MR 172).
- Fixed runtime warnings in Tokodon when computing safe margins (Kirigami MR 2110).
If you spot places where this still doesn't work correctly, let us know in the #kde-android Matrix channel!
Notifications
There's also a number of improvements and extensions for notification handling:
- Fixed interactions with notification actions or the notification itself having no effect (MR 200).
- Implemented confirming inline replies (MR 202). This fixes the notification showing a spinner animation indefinitely after submitting an inline reply.
- Improved icon handling. We can now properly distinguish between what Android calls the "small" and "big" notification icons, a symbolic application icon and an image of e.g. a chat avatar. This will require small changes to applications to get the best result, in most cases providing a symbolic application icon should be enough already (MR 201).
- A new API for cross-platform notification configuration is in review (MR 203). This will also benefit Flatpak applications.
Safe JNI usage
Interaction between our C++ code and Android's Java platform APIs happens via the so-called Java Native Interface (JNI). That's a rather low-level C interface with little to no type safety and the need for error-prone handwritten arcane signature strings. Already back in the Qt 5 era I had therefore written a few helpers for a more type-safe use of this in KAndroidExtras.
Much of this functionality is meanwhile available in Qt 6 in a very similar fashion, with the JNI array support being the latest addition in Qt 6.9. Compared to raw JNI use this is already a massive improvement, see e.g. MR 204 making use of this in KNotifications. It avoids practically all hand-written JNI signatures as well as much of the manual type conversion.
One part is still missing though, type-safe wrappers so that function arguments and property types are checked at compile-time. That has been extracted and rebased on top of Qt's JNI code in KJniExtras now. It's only 10% of the code, with most of the complex template magic gone.
As a small downside we are unfortunately losing the ability to test JNI code on Linux with this, as the old approach provided a mock implementation when not building for Android.
Calendar access
With the type-safe JNI wrappers small enough now to be copied as a single header file, this finally unblocked the move of the Android platform calendar backend from Itinerary upstream to KCalendarCore (MR 242).
Together with the calendar runtime permission API already in Qt, this should make e.g. an "add to calendar" feature for Kongress or KTrip easy to add now.
File dialogs and remote files
An often reported issue against several of our applications is that they seemingly don't do anything when opening a file via the platform file dialog. This happens for files on a cloud share, which the Qt Quick file dialog silently discards due to not being local files, making this look like as if the user has canceled the dialog to the application. Therefore just nothing happens and no error message is shown either.
Interestingly enough, that problem also happens on KDE Plasma, where the native file dialog also can select remote files, it's just much less common there. But since we can tell the Plasma file dialog to only allow selecting local files, this one is easy to fix (CR 742273, available in Qt 6.12).
On Android we don't have that option, nor would that be really satisfying anyway, opening files from a cloud share is a very valid usecase. Therefore there's now also a proposed change to the Qt Quick file dialog to optionally allow selecting arbitrary URLs, similar to what its Qt Widgets counter-part already offers (CR 743681). This wont automatically fix the problem, but it would at least give applications a chance to do something about this.
Locale-aware sorting
Something fairly basic that Qt on Android so far didn't do properly (at least when not bundling it with multi-10MB worth of ICU libraries) was locale-aware sorting. When using English you might not notice that, but in many other languages this results in weird and confusing lists. In German for example the letter "Ä" gets basically treated like "A" for sorting, while so far it ended up after "Z" on Android.
There's now a proposed Qt patch (CR 741548) implementing a QCollator backend for Android using platform infrastructure. This uses Android's native ICU flavor when available and otherwise falls back to the less efficient and less featureful Java API.
Crash reporting
While we have automatic crash reporting on Linux since some time (see e.g. Harald's LAS talk for more details), crashes on Android were not handled at all by our applications so far.
Based on discussions at the Graz Sprint in April this has now changed, KCrash can now detect a previous crash when starting an application, and offers to submit an automatic crash report to KDE's Sentry instance.
Those reports have been very helpful on Linux already, providing very important information about issues and allowing to prioritize those with the most impact, but it's nevertheless crucial we don't submit anything without user consent.
The bulk of the implementation is in KCrash MR 101, a few changes are necessary for integrating this into applications as well though.
In your build.gradle, add sentry-android-core as a dependency:
dependencies {
...
implementation 'io.sentry:sentry-android-core:8.43.0'
}In your AndroidManifest.xml, add a meta-data entry configuring the Sentry DSN for your application:
<application ...>
<meta-data android:name="io.sentry.dsn" android:value="https://<token>@crash-reports.kde.org/<app-id>"/>
</application>And finally, remove the build system and preprocessor conditions excluding KCrash use on Android. Note that verifying this part is crucial, without KCrash you'll get the aggressive default behavior of Sentry, uploading without user consent.
Inhibition
Earlier this year KGuiAddons got a new API for inhibiting system actions such as locking the screen. The obvious usecase for this is a video player, but e.g. Itinerary uses this as well for ensuring your screen stays on while showing a barcode to be scanned at a ticket check.
Android platform support for this has also been added (MR 203), allowing the removal of corresponding code in applications.
Outlook
While all of that is good progress, things are likely about to change. Later this year Google is planning to roll out measures making it significantly harder to provide and install applications on Android.

For more information check out Keep Android Open, a campaign supported by the KDE e.V. among many other organizations.
Regardless of how this will eventually materialize, the direction is clear, Android isn't going to be a viable long-term platform for FOSS software, not even in its Google-free form. I have mostly considered it a stop-gap solution until Linux on the phone is ready anyway, so this is another reason to increase the effort into that direction.
13 Jun 2026 6:45am GMT
This Week in Plasma: 6.7 is Very Close!
Welcome to a new issue of This Week in Plasma!
This week the Plasma team put the finishing touches on Plasma 6.7 with another big push on bug fixing. It's looking really good for release next Tuesday!
As a result, some feature work and UI polishing started to trickle in for Plasma 6.8.
Check it out:
Notable new features
Plasma 6.8
Plasma Browser Integration now supports the Flatpak version of Microsoft Edge. (Conley Dawson, KDE Bugzilla #521109)
Notable UI improvements
Plasma 6.6.6
Window actions that involve the mouse wheel no longer respect your "natural scrolling" preference; we reasoned that in this situation, up should always mean up and down should always mean down. (Vlad Zahorodnii and David Edmundson, KDE Bugzilla #442789)
Plasma 6.7
If you authorize an app to be able to remote-control the system without asking for permission first (for example, a remote desktop app), when it does so, now Plasma shows a notification that it's happening. (David Redondo, xdg-desktop-portal-kde MR #571)
When navigating by using the number pad keys to move the pointer, pressing multiple keys now moves the pointer in a direction halfway between them. (Vlad Zahorodnii, KDE Bugzilla #486520)
KRunner-powered searches now suppress results from the "Global Shortcuts" provider when there are better results from other ones, which makes the search results more relevant for common searches. (Oliver Beard, KDE Bugzilla #3710)
Changed the automatic day/night theme switcher to switch halfway between the start and end of dawn or dusk, rather than at the end. (Vlad Zahorodnii, Bugzilla #511973)
Added kde-shader-wallpaper to the list of allowed wallpaper plugins in Plasma Login Manager. (y4m y4m, plasma-login-manager MR #141)
Plasma 6.8
Improved Plasma's ability to detect dark GTK 2 themes and apply a matching icon theme, which should substantially reduce cases of illegible icons in old GTK 2 apps when using a dark color theme. (Luan Oliveira, kde-gtk-config MR #144)
The top edges of non-maximized Breeze-themed windows now have as much extra draggable area as the bottom and side edges already do. (Sergey Katunin, KDE Bugzilla #504225)
Made the portal-based permission dialogs more consistent in their presentation and wording. (Nate Graham, xdg-desktop-portal-kde MR #575)
Frameworks 6.28
You can now use the Meta key on its own to trigger KWin's Overview screen. (Vlad Zahorodnii, KDE Bugzilla #518302)
Improved the alignment of thumbnail previews in open/save dialogs. (John Doe, frameworks-kio MR #2249)
Notable bug fixes
Plasma 6.6.6
Fixed an issue that made KWin accidentally leak the CAP_SYS_NICE capability to child processes it launched, which would break the Bubblewrap sandboxing system when applied to those processes. (Vlad Zahorodnii, KDE Bugzilla #521013)
Fixed a bug that could make Plasma crash when changing the monitor layout during the login process. (Marco Martin, KDE Bugzilla #510477)
Fixed an issue that could make the "Today" button on the Digital Clock widget's calendar popup highlight the wrong day when in a time zone later than UTC and the local time was before midnight in UTC time. (Fushan Wen, KDE Bugzilla #521114)
The feature that lets apps screencast without asking permission no longer requires the screen setup to be identical to what it was when the permission was granted. (David Redondo, KDE Bugzilla #519122)
SVG-based wallpapers are now able to fully participate in the dark/light wallpaper switching feature. (David W., KDE Bugzilla #519168)
Fixed a bug that prevented explanatory text showing up as expected in the generic "[app] wants to do [thing]" portal dialog. (David Redondo, xdg-desktop-portal-kde MR #584)
Plasma 6.7
Fixed a very odd issue that would break the Icons-Only Task Manager widget if you created a file named metadata.desktop right inside your home folder. (Christoph Wolk, KDE Bugzilla #521247)
If you somehow manage to delete a multi-activity setup's active activity, Plasma now switches you to the next one instead of crashing and leaving you with a broken desktop. (Angel Parra, KDE Bugzilla #521124)
Fixed a case where Discover could crash while processing changes to distro packages. (Aleix Pol Gonzalez, discover MR #1335)
Fixed a case where Plasma could crash when waking from sleep after monitors were added or removed during sleep. (David Edmundson, KDE Bugzilla #https://bugs.kde.org/show_bug.cgi?id=521078)
Fixed a case where System Monitor would crash when quit while the column configuration dialog was open. (Nicolas Fella, KDE Bugzilla #491000)
Worked around an issue in GTK 4 that could make selected text in some GTK 4 apps become irritatingly de-selected. (Vlad Zahorodnii, KDE Bugzilla #517573)
Fixed a weird regression that could make the pointer inappropriately display the "app is launching" animation when minimizing windows using the Plastik window decoration style. (Vlad Zahorodnii, KDE Bugzilla #516264)
Fixed a regression that made non-random wallpaper slideshows start over from the first one at every login, instead of remembering the last-seen wallpaper. (Fushan Wen, KDE Bugzilla #512559)
Fixed a regression that made System Monitor's Process Table view display unformatted data. (Arjen Hiemstra, libksysguard MR #476)
Fixed a very weird issue that could make KWin get confused and stop running animations and animated effects properly after opening an app that creates an invisible window. (Vlad Zahorodnii, KDE Bugzilla #519789)
Fixed an issue that could sometimes make the Weather Report widget endlessly reload after waking the system from sleep. (Ce Sun, KDE Bugzilla #517280)
Made System Monitor graphs' axis labels show fractional values when needed. (Tobias Fella, KDE Bugzilla #521041)
Made it possible to un-favorite apps that are marked as favorites in Kickoff/Kicker/etc. even if they contain some weird character combinations. (Christoph Wolk, KDE Bugzilla #520894)
Fixed an issue that could make the notification icon in the System Tray get stuck in a half-rotated state if the animation got interrupted for any reason. (Kai Uwe Broulik, KDE Bugzilla #458156)
Fixed an issue that made a translated label turn into an English label after changing and saving settings on System Settings' Screen Locking page. (Sergey Katunin, KDE Bugzilla #521293)
Made the Color Picker widget not visually overflow when placed inside a Grouping widget. (Tobias Fella, KDE Bugzilla #517052)
Frameworks 6.28
Fixed a weird issue that could make Plasma freeze if you created a .desktop file, set its icon to be a local AVIF image, and put it on the desktop. (Akseli Lahtinen, KDE Bugzilla #521200)
Qt 6.11.2
Fixed an apparently fairly common way that Plasma could crash when fetching album art for remote media (for example, on YouTube) shown in Media Player widgets. (Mårten Nordheim, KDE Bugzilla #505490)
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.
13 Jun 2026 12:00am GMT
12 Jun 2026
Planet KDE | English
Web Review, Week 2026-24
Let's go for my web review for the week 2026-24.
Total Reciprocity Public License
Tags: tech, foss, licensing, copyright
More an experiment than something I'd recommend for real. Still it shows there's a gap we need to close in the licenses available. Let's hope the OSI and the FSF will do strong moves toward closing this gap.
Forms of Open Source Government
Tags: tech, foss, governance, satire
In part useful, in part satire I think. Still it gives a good idea of various governance models in FOSS communities.
https://nesbitt.io/2026/06/09/forms-of-open-source-government.html
Retro-Tech Parenting
Tags: tech, culture, learning, parenting
There's a path to get people (children included) to get into technology with enough of the veneer of convenience to make sure it is a learning experience… While keeping it pleasurable.
https://havenweb.org/2026/05/28/retro-tech.html
Pokémon Go Scans Quietly Trained The Navigation Tech Now Headed Into Military Drones
Tags: tech, game, surveillance, attention-economy, defense
How do you like our particular brand of dystopia? That's what you get for using proprietary data farming game I guess.
https://dronexl.co/2026/06/09/pokemon-go-scans-niantic-vantor-military-drone-navigation/
The Blight Reaches Microsoft: 73 Repos Disabled in 105 Seconds
Tags: tech, microsoft, github, security, supply-chain, ai, machine-learning, gpt, copilot
There's really something nasty at play. Those coding agents are clearly not insulated from the system enough and too easy to manipulate in order to exfiltrate sensitive information.
https://opensourcemalware.com/blog/miasma-reaches-azure
our workplace LLM mass delusion
Tags: tech, ai, machine-learning, gpt, management, trust
This piece asks a very profound question in fact. If you're in a workplace where senior management allows and pushes everyone to get deluded about the real capabilities of those tools, how do you later move forward and rebuild trust?
https://blog.avas.space/llm-circus/
To my students
Tags: tech, learning, culture, ethics, politics, quality
Very nice piece, timely and needed. Indeed, let's hope people stick to those principles.
http://ozark.hendrix.edu/~yorgey/forest/00FD/index.xml
How LLMs Actually Work
Tags: tech, ai, machine-learning, gpt, architecture, neural-networks
A good primer on the main architecture traits of transformer models.
https://www.0xkato.xyz/how-llms-actually-work/
Local-First Software Is Easier to Scale
Tags: tech, performance, architecture
It's definitely easier not having to scale at all. Which is what you get when you design for local first / client side.
https://elijahpotter.dev/articles/local-first-software-is-easier-to-scale
Linux latency measurements and compositor tuning
Tags: tech, graphics, linux, desktop, performance, debugging
Interesting read, this is really tricky to measure such latency. It looks like we might have room for improvements on latency still. Curious to see if the proposed fixes will make it in kwin.
https://farnoy.dev/posts/linux-latency
Test-case Reducers Are Underappreciated Debugging Tools
Tags: tech, tests, debugging
Interesting family of testing and debugging tools indeed. I should definitely reach out to those more.
https://tratt.net/laurie/blog/2026/test_case_reducers_are_underappreciated_debugging_tools.html
Why Queues Don't Fix Overload (And What To Do Instead)
Tags: tech, queuing, architecture, distributed
Queues are not magic. If they're unbounded you're in for a world of pain as load increases.
https://pmbanugo.me/blog/why-queues-dont-fix-overload-and-what-to-do-instead
The User Doesn't Care - But you should
Tags: tech, programming, quality
Indeed, when people say "users don't care about quality" (tests or otherwise), this is mostly folklore. As soon as something goes wrong they'll care.
https://lewiscampbell.tech/blog/260607.html
The un-hateable engineering managers
Tags: tech, engineering, management
Sometimes, you got to deliver the bad news… It's healthy if you feel uneasy about it though.
https://newsletter.manager.dev/p/the-un-hateable-engineering-managers
Bye for now!
12 Jun 2026 12:30pm GMT
11 Jun 2026
Planet KDE | English
Code and logic for tournaments in the Mankala Engine
Structure of code and logic for tournaments in the Mankala Engine.
So, we want the tournaments to be able to:
- Create custom game rooms (with different variants, number of players, and time limit)
- Join the rooms with room codes.
- Create elimination brackets for players.
- Have empty slots filled with computerized opponents.
- A scoreboard after the game for final rankings.
The tournament is going to be part of the Multiplayer variant. For that, when a person clicks on Multiplayer game mode, they will be asked to select from the given two options of a casual 1 to 1 game or another a tournament. Then they will be asked to either create a room or join the room with the code.
Key elements to implement:
- Room codes will be created by mapping XMPP MUC JIDs (e.g.,
A3F7K2 → tournament-a3f7k2@conference.server.com). - Fill computerized opponents: When it is detected that there is an absence of required players, the game will be filled with computer opponents in all the empty spots, just like we have for the
vs AIgame mode.
Here is an example of how the tournaments.cpp can be implemented:
class TournamentManager : public QObject {
Q_OBJECT
Q_PROPERTY(QVariantList tournaments READ getTournaments NOTIFY tournamentsChanged)
Q_PROPERTY(QVariantMap activeTournament READ getActiveTournament NOTIFY activeTournamentChanged)
public:
// --- Tournament duration ---
Q_INVOKABLE QString createTournament(
const QString& variant, // "Bohnenspiel", "Oware", "Pallanguli"
int maxPlayers, // eg. 4, 8, 16
int durationDays, // tournament duration
const QString& organizerJid // creator's XMPP JID
);
Q_INVOKABLE void joinTournament(const QString& roomCode, const QString& playerJid);
Q_INVOKABLE void startTournament(const QString& tournamentId);
// --- Match management ---
Q_INVOKABLE void reportMatchResult(const QString& matchId,
const QString& winnerJid);
Q_INVOKABLE void advanceBracket(const QString& tournamentId);
// --- Computer Opponents ---
Q_INVOKABLE void fillEmptySlots(const QString& tournamentId);
// --- Room codes ---
Q_INVOKABLE QString generateRoomCode();
Q_INVOKABLE QString resolveRoomCode(const QString& code);
signals:
void tournamentsChanged();
void activeTournamentChanged();
void matchReady(const QString& matchId, const QString& player1, const QString& player2);
void tournamentComplete(const QString& tournamentId, const QVariantList& rankings);
void playerJoined(const QString& playerJid);
};
For filling empty spaces we can use the logic as:
struct Match {
QString matchId;
QString player1Jid; // empty string = unfilled slot
QString player2Jid;
QString winnerJid;
int round; // 0 = first round, 1 = quarter-finals, etc.
int position; // position within the round
bool isAIMatch; // true if one/both players are computer
};
class TournamentBracket {
public:
void initialize(int playerCount); // builds bracket tree
void seedPlayers(const QStringList& playerJids);
void fillWithAI(); // fills empty slots
Match getNextMatch() const;
void recordResult(const QString& matchId, const QString& winnerJid);
bool isComplete() const;
QVariantList getRankings() const;
private:
std::vector<std::vector<Match>> m_rounds; // rounds[0] = first round, etc.
int m_totalRounds;
};
At the end of the elimination cycle and the tournament bracket, we can get the results and show them on our created leaderboard page with the XMPP icons, usernames, and the number of games the players won.
What more can be added?
I plan to research more on whether we can store and display these games in the player profiles and create a communication channel for the players and spectators during the ongoing game, which could be both text and voice chat using XMPP and other relevant communication protocols.
Thanks for reading. 👀
11 Jun 2026 5:02pm GMT
Introducing Qt's Figma Design System Extraction Skills for Developers
Recreating a design system manually in QML is a laborious task for a Qt developer. A typical Figma design system can include hundreds of design tokens for colors, typography, spacing, radii, shadows, and motion durations - plus dozens of UI components, each with multiple variants and states. Every value has to be transcribed precisely, and even small mismatches can quietly desynchronize the implementation from the Figma source.
Two new AI skills close the design-system-to-code gap between Figma and Qt. The Qt Figma Token Extraction skill converts your Figma design tokens directly into QML singletons. The Qt Figma Component Generation skill then turns your Figma component library into idiomatic QML controls that consume those singletons. Together they automate the full design-system handoff. The skills delegate this entire workflow to an AI agent, which connects to Figma, reads the design system, and produces clean, idiomatic QML ready to drop into a Qt project.
![]()
11 Jun 2026 4:59am GMT
KDE Ships Frameworks 6.27.0
Thursday, 11 June 2026
KDE today announces the release of KDE Frameworks 6.27.0.
This release is part of a series of planned monthly releases making improvements available to developers in a quick and predictable manner.
New in this version
Extra CMake Modules
- Set INTERFACE_LINK_LIBRARIES if the found library is a static library. Commit.
- Fix: translation loading location issue on macOS. Commit.
- ECMDepreactionSettings: Set QT_DEPRECATED_WARNINGS_SINCE to current version when newer warnings should not be shown. Commit.
- Try harder to determine a good default for the Android API level. Commit.
- Silence more warnings in python bindings. Commit.
- Add note to ECMGenerateQmlTypes that it's basically obsolete. Commit.
- Add KDE_INSTALL_QTMETATYPESDIR. Commit.
- Sanitizer: add support for realtime sanitizer. Commit.
KBookmarks
- KF6BookmarksWidgets: list KF6::Bookmarks in public interface, not private. Commit.
KCodecs
- KEmailAddress::decodeMailtoUrl: return empty string on non-mailto URL. Commit. Fixes bug #519721
- Remove unused code. Commit.
- KCharsets::fromEntity: bound numeric reference to QChar range and reorder bounds check. Commit. Fixes bug #519719. Fixes bug #519720
- [Codec] Change compare method in charset lookup. Commit.
- [Codec] Fix infinite loop in charset lookup. Commit. Fixes bug #520200
KConfig
- Do not inherit publicly from std::map. Commit.
- KConfigSkeleton: Fix reading value for deleted entry with system default. Commit. Fixes bug #509416
- KConfigXT: Add addItemPathList and addItemUrlList. Commit.
- CMake config file: check private QtDBus dependency only for static builds. Commit.
- Drop unneeded moc include. Commit.
- Fix build warnings with -Wnoexcept. Commit. Fixes bug #384583
- Add autotest for KCoreConfigSkeleton::useDefaults. Commit.
- Kconfig_compiler: Fix QML forward declarations when using a namespace. Commit. Fixes bug #510091
- Kwindowstatesaverquick: Do not force-show windows. Commit.
- CMake config file: remove no longer used Qt6Xml dep with (static) libs. Commit.
- Add test for ADMIN_ACCOUNT environment variable override. Commit.
- Fix wrong usage of qEnvironmentVariable function. Commit.
- CMake config file: add missing Qt6Core & Qt6Gui dependency check. Commit.
- Kconfig_compiler: Consistently accept lowercase type names. Commit.
- Install Qt metatypes. Commit.
KContacts
- CMake config file: add missing Qt6Gui dependency check. Commit.
- Impp: Try to always return a label for an IM protocol, even if none is known. Commit.
- Impp: Add helper getter to get only username portion of the address. Commit.
- Fix build not including new files in resource. Commit.
- Improtocols: Add a bunch of modern services. Commit.
KCoreAddons
- Fix Clang-Tidy: Static member accessed through instance. Commit.
- Fix Clang-Tidy: Method 'initTestCase' can be made static. Commit.
- Fix Clazy: Unused QString lineFeed. Commit.
- KAboutData: Reload applicationData when desktopFileName param is set. Commit. See bug #459986
- Fix build warnings with -Wnoexcept. Commit.
- Kaboutdata: Use application display name for --author. Commit.
- Klistopenfilesjob_unix: Remove unneeded qOverload for connect. Commit.
- Licenses Free Software Foundation has changed a bit the text of the licenses. Commit.
- KTextToHTML: escape HTML entities in highlighted text. Commit. Fixes bug #504078
- Use default DEFAULT_SEVERITY for logging. Commit.
- Force locale on Windows as well for the KAboutData unit test. Commit.
- Install Qt metatypes. Commit.
KDav
- Use Depth: 1 instead of Depth: 0 for multiget REPORT requests. Commit.
- Fix percent-encoding of item hrefs in CalDAV/CardDAV multiget requests. Commit.
- Add job to create DAV collection. Commit.
- Autotests: Add davitemsfetchjobtest. Commit.
- Test: Remove manual test server. Commit.
- Enums: Deprecate GroupDav protocol support. Commit.
KDeclarative
- Add location to CalendarEvents::EventData. Commit.
- Add strict qmllint configuration. Commit.
- Use id instead of parent. Commit.
- Use Application instead of Qt.application. Commit.
- Remove unused include. Commit.
- Register QKeySequence to QML. Commit.
- Add missing module dependency. Commit.
- Access local property directly. Commit.
- Fix unqualified property access. Commit.
- Use int instead of enum as property type. Commit.
- Port to KI18nContext QML API. Commit.
KDE Daemon
- Use default DEFAULT_SEVERITY for logging. Commit.
KGlobalAccel
- Add KGlobalAccel::setInverseShortcutActions() to the API. Commit.
- Format with clang-format and xmllint. Commit.
- Add empty lines in dbus interface files. Commit.
- Properly mark all deprecated APIs in org.kde.KGlobalAccel interface. Commit.
- Mark org.kde.KGlobalAccel.actionList as deprecated. Commit.
- Make KGlobalAccel::stealShortcutSystemwide() steal all matching shortcuts. Commit.
- Support a custom bus. Commit.
KGuiAddons
- Install Qt metatypes. Commit.
KHolidays
- Add Bolivian Holidays. Commit. Fixes bug #520179
- .clang-tidy - fix typo StringCompareLikeFuctions. Commit.
- Src/lunarphase.cpp - krazy excludeall typedefs. Commit.
- CMakeLists.txt - update the flex and bison urls. Commit.
- Src/sunevents_p.h - fix include guard name. Commit.
- SunRiseSet: place deprecation attribute standard-type-clang-compatible. Commit.
- Fix holidays appear twice in january. Commit. Fixes bug #498462
- UA: Update Ukrainian holidays. Commit.
- .gitlab-ci.yml - don't fail on clang-tidy issues. Commit.
KImageformats
- Updated documentation on memory usage. Commit.
- JXR: add a memory allocation barrier in jxrlib. Commit.
- EXR: reject files with dimensions exceeding 300kx300k pixels. Commit.
- OSS Fuzz: set image allocation limit to 2000 MiB. Commit.
- Improve size limits for AVIF, HEIF, and RAW plugins. Commit.
- IFF: fix byte swapping in 16-bit DEEP images. Commit.
- Add Farbfeld read only support. Commit.
- DDS: fix mime type. Commit.
- IFF: DEEP image support. Commit.
- ImageAlloc: add image initialization support. Commit.
- Fix uninitialized value. Commit.
- HEIF: image transformation support. Commit.
- Update CI image. Commit.
KIO
- KUrlNavigator: Use QStyle for navbar focus indication instead of custom painting. Commit.
- Knewfilemenu: refactor mimeType and icon. Commit.
- Knewfilemenu: delete EntryInfo and merge it into Entry. Commit.
- Knewfilemenu: add QDebug overload for KNewFileMenuSingleton::Entry. Commit.
- Knewfilemenu: reorder variables and prune redundancies. Commit.
- KDirModel: fix assert when typing file.png/a by mistake. Commit.
- Kmountpoint: Iterate mountpoint backwards to handle systemd-automount. Commit. Fixes bug #518012
- Kioworker/file: avoid huge stack buf in file copy read/write fallback. Commit.
- Openurljob: respect "open in application" preference for binaries. Commit. Fixes bug #519773
- KUrlNavigator: Fix double background interference when in editable mode. Commit. Fixes bug #506177. Fixes bug #520249. See bug #518285
- KDirModel: Use mostLocalUrl for old url. Commit. Fixes bug #509461
- KIO::CacheControl enum: place deprecation attribute standard-type-compatible. Commit.
- Kprocessrunner: For apps running in terminal, use terminal emulator's appId. Commit. Fixes bug #459986
- Fix build warnings with -Wnoexcept. Commit.
- KFilePlaceEditDialog: deprecate for external usage. Commit.
- API docs: list kservice as dep, so KService types get links. Commit.
- KIO::OpenWith: work around need for include of KService in public header. Commit.
- KUrlNavigatorPlacesSelector: set accessible name. Commit.
- Kurlauthorized.h: drop unneeded include. Commit.
- Trash: Don't assert in parseURL. Commit.
- Davjob: Make it possible to use QXmlStreamWriter output. Commit.
- Davjob: Add MKCOL job. Commit.
- Dropjob: Sanitize input URLs. Commit. Fixes bug #518481
- Kfileitem: Assert that URL scheme is not empty. Commit. See bug #518481
- DropJobTest: Create cache dir when needed. Commit.
- KDirModel: Remove setting node preview on itemChanged. Commit. Fixes bug #517607
- Don't show an error when the user cancels the device mounting password dialog. Commit. Fixes bug #400420
- Knewfilemenu: centralize new file parsing. Commit.
- Don't try showing error message if it's empty. Commit.
- Configure_package_config_file: drop unused PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR. Commit.
- Http worker: call redirection also for redirectToTrailingSlash. Commit. Fixes bug #517682
- Kurlnavigator: Don't show context menu targeting hidden buttons when path is compressed. Commit. Fixes bug #505197
- Global: map KJob::NoError to ERR_NONE. Commit.
- Use default DEFAULT_SEVERITY for logging. Commit.
- Upgrade logging from info to warning where appropriate. Commit.
- Widgets: adapt dimensions of KOpenWithDialog on rotated monitors. Commit.
- Kdiroperator, kfilewidget: Use zoomsteps when using scrollwheel. Commit. Fixes bug #494704
- Searchproviders: improve osm. Commit.
- Searchproviders: added osm. Commit.
- Searchproviders: added keyword app to flathub. Commit.
- Searchproviders: added "Flathub". Commit.
- Searchproviders: add "wikipedia" keyword. Commit.
- Searchproviders: localize query for german wikipedia. Commit.
- Searchproviders: added "ZDF Mediathek". Commit.
- Searchproviders: added "ARD Mediathek". Commit.
- Core/copyjob: Prompt to replace MS-DOS reserved chars for MTP. Commit. Fixes bug #489288
Kirigami
- Remove polyfill imports for SafeArea API. Commit.
- Don't apply safe area margin to page bottom when there's a footer. Commit.
- Only apply safe area margins when we have a parent. Commit.
- Fix top margin in Page overlayItem. Commit.
- Heading: set the color to Platform.Theme.textColor for heading. Commit.
- Explicitly layout the window content item vertically as well. Commit.
- Fix toolbar size with non-zero SafeArea margins. Commit.
- Controls/Badge: avoid binding loop. Commit.
- Fix access to ScenePosition attached property in DrawerHandle. Commit.
- GlobalDrawer: top-align topContent. Commit. Fixes bug #520337
- Add basic tests for some components. Commit.
- Don't handle back key twice. Commit.
- FormLayout: Fix FormData namespace alias. Commit. Fixes bug #520076
- Revert "Disable qmllint for some modules". Commit.
- Form: Guard root.Forms.FormAlignmentGroup.group. Commit.
- GlobalDrawer: Use implicitWidth, set preferredHeight in item. Commit. Fixes bug #517091
- Remove unused import. Commit.
- Clean up internal imports. Commit.
- Controls: Remove defunct onCompleted block in AbstractApplicationWindow. Commit.
- Controls: Don't break width/height bindings in AbstractApplicationWindow. Commit.
- Remove duplicate ecm_qt_install_logging_categories. Commit.
- Use default DEFAULT_SEVERITY for logging. Commit.
- Action: Notify fromQActinChanged when the QAction changed. Commit.
- Form: Introduce FormAlignmentGroup. Commit.
- Install Qt metatypes. Commit.
- ToolbarLayout: don't crash when moreButton is not valid. Commit.
- Fixs subtitle padding calculation in forms flat mode. Commit.
KMime
- New in this release
KNotifications
- Android: Improve icon handling. Commit.
- Android: Confirm reception of inline replies. Commit.
- Android: Set Intent package names rather than invalid component names. Commit.
- Android: Fix invalid iterator access. Commit.
- Don't update notifications before they have actually been sent. Commit.
- Android: Don't defer NotifyByAndroid::notify execution. Commit.
- Configure_package_config_file: drop unused PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR. Commit.
KQuickCharts
- Use default DEFAULT_SEVERITY for logging. Commit.
KRunner
- Extract and install Qt metatypes. Commit.
- RunnerManager: move spurious member into pimpl class. Commit.
- ResultsModel: Directly call toInt from QVariant to avoid implicit conversion. Commit.
- RunnerManager: Avoid weird use of mutable iterator in favor of simple for loop. Commit.
- RunnerContext: Use QHash for unique IDs since order is not relevant. Commit.
- Use std::min/max instead of QT macros. Commit.
KSVG
- Svg: clear stylesheetOverride on imageSetChanged. Commit. Fixes bug #503671
- Svg: make eventFilter public again. Commit.
- CMake config file: remove duplicated targets include. Commit.
- Drop accidental duplicate QML registration. Commit.
- Remove unused ECM module. Commit.
- Add basic test for SvgItem. Commit.
KTextEditor
- Use expanded document mode tabs in config pages. Commit.
- Revert "CI: Comment out Qt 6.12 for now since tests are failing". Commit.
- ScriptTester: Due to the change in Qt 6.12, getMessage() should return an empty string instead of undefined when there is no message. Commit.
- Add public API for visible/real line number conversion. Commit.
- Calculate which line numbers need repainting correctly. Commit.
- Allow disabling "use first line of doc as file name" for untitled docs. Commit. Fixes bug #519242
- Use default DEFAULT_SEVERITY for logging. Commit.
KTextWidgets
- KPluralHandlingSpinBox: place deprecation attribute standard type compatible. Commit.
KUnitConversion
- Mark US pints as common, rather than Imperial ones. Commit.
KUserFeedback
- Configure_package_config_file: drop unused PATH_VARS KDE_INSTALL_INCLUDEDIR. Commit.
Modem Manager Qt
- Use default DEFAULT_SEVERITY for logging. Commit.
Oxygen Icons
- New in this release
Purpose
- CMake config file: add missing Qt6Gui & Qt6Widgets dependency check. Commit.
- Change Pastebin to Pastebin.com. Commit.
- Adapt to KOnlineAccounts interface change. Commit.
- Add missing find_dependency for Qt6QmlIntegration. Commit.
- Use default DEFAULT_SEVERITY for logging. Commit.
- Adapt to KOnlineAccounts API change. Commit.
- Replace var with const. Commit.
- Remove unused import. Commit.
- Convert org.kde.purpose.private.widgets to proper QML module. Commit.
- Fix unqualified property lookup. Commit.
- Rename JobView::state to jobState. Commit.
- Use KI18nContext. Commit.
- Use fully qualified typename in property. Commit.
- Fix deprecation warnings from ECM. Commit.
- Remove CMake warning about arc runtime dependency. Commit.
Syndication
- CMake config file: add missing Qt6Core dependency check. Commit.
Syntax Highlighting
- Add missing license texts. Commit.
- YAML: fix quoted no-string in list. Commit. Fixes bug #500809
- Add syntax highlighting for Slint files. Commit.
- Minor fixes on gemtext syntax and reference. Commit.
- Add BNF and ABNF syntax highlighting. Commit. Fixes bug #518109
- Breeze Dark theme: less vibrant color for BracketMatching to make dsFunction color visible. Commit. Fixes bug #519805
- Theme_contrast_checker.py: use Okl as default color space. Commit.
- Theme_contrast_checker.py: add --neighbor-color and --neighbor-distance to filter colors that are close to a specific color. Commit.
- Theme_contrast_checker.py: add --bg-color to view colors of a theme with a specific background color. Commit.
- Fish: update to latest version and fix various bugs. Commit. Fixes bug #519060
- LaTeX: fix optional parameter with minted shortcuts. Commit. Fixes bug #514536
- J: update to latest version from github. Commit. Fixes bug #518108
- Raku: bump highlighting definition version. Commit.
- Raku: Allow - inside \c[], fill out allowed backslashes inside char classes. Commit.
- Raku: Fix breakage of double backslash before ending single quote. Commit.
- Raku: Allow signatures on token/rule/regex declarations. Commit.
Threadweaver
- Remove duplicate headers. Commit.
11 Jun 2026 12:00am GMT
10 Jun 2026
Planet KDE | English
Week 2 : Refactor and Review
This is a weekly update from my Google Summer of Code 2026 project with KDE, improving effect widgets in Kdenlive.
Week 2 was about getting feedback and doing it right.
After opening the draft MR for the Curves Widget, my mentor Jean-Baptiste reviewed the approach and suggested a cleaner architecture. The original implementation packed all 4 channel parameters into a single compound parameter. JB's feedback: each channel should be its own separate av_curve parameter in the effect XML, and AssetParameterView should share one CurveParamWidget across all of them; similar to how m_mainKeyframeWidget works for keyframe parameters.
This was a significant refactor but the result is much cleaner:
avfilter_curves.xmlnow has 4 separate parameters;av.master,av.r,av.g,av.b, each with its own name and descriptionAssetParameterViewcreates theCurveParamWidgeton the firstav_curveparam, then callsaddAvCurveTab()for each subsequent one- Each tab is tied to its own model index;
valueChangedfires per-parameter independently serializeAllChannels()is gone entirely;each channel just emits its own value
All four tabs (All, R, G, B) are working correctly. Per-channel state is preserved when switching tabs. Project save and restore works. The MR is now updated with the refactored approach and waiting for JB's review.
The All tab applies a curve to all channels simultaneously:

Switching to the R tab adjusts only the red channel independently:

Week 3 is already underway; the MR is pushed and waiting for JB's review. More updates next Sunday.
10 Jun 2026 7:55pm GMT
08 Jun 2026
Planet KDE | English
RIT Unny open source font
E.P. Unny is a notable Indian political cartoonist, who worked/works with famed Shankar's Weekly and new papers such as The Hindu and Indian Express.
Since 2020, all his cartoons (also 2025, 2026 so far) are published - every week - open-access by Sayahna Foundation.
Unny was using a font based on his handwriting style for the cartoons, designed by K.H. Hussain of Rachana. Recently, a new font designed by Varshini KVSS & 'Kandam Collective' is developed by Rachana Institute of Typography to use in the cartoons, and it is released as open source - see the specimen and download links.
The character set of the font is Latin only. There are plenty of alternate glyphs (for upper case and lower cases of i, j, l, g, etc. - for instance check the double 'l' in 'Intelligence' on the specimen above). Such characters are rendered alternately to give a feel of the randomness that handwriting evokes.
The source (and issue tracking) are available at RIT fonts repository.
08 Jun 2026 11:14am GMT
07 Jun 2026
Planet KDE | English
digiKam 9.1.0 is released

Dear digiKam fans and users,
After three months of active development, bug triage, and feature integration, the digiKam team is proud to announce the stable release of digiKam 9.1.0. This version builds on the foundation of 9.0.0, introducing new features, performance improvements, and a significant number of bug fixes to enhance stability, usability, and workflow efficiency. This release focuses on database migration, preview enhancements, advanced search, and usability improvements across the board.
07 Jun 2026 12:00am GMT
06 Jun 2026
Planet KDE | English
Size Maters
So… more Oxygen icons 
This weekend I been filling some of the more obvious holes in the icon set and recently these 2 landed.

The first one is for KeepSecret, the application that is replacing the old KWallet.
Security icons are funny. There are only so many ways to draw "keep your stuff safe" before you end up with another lock icon. Or a key. Or a lock pretending not to be a lock.
I ended up going with a small vault door. Which is basically also a lock pretending not to be a lock but at least it looks kinda cool, and more important I think it looks as smart as our users are...
The other one is for generic package managers.

And apparently software still arrives in wooden crates. 
I dont know who started this visual convention but after all these years I kinda stopped questioning it. Software packages are boxes. Everybody understands boxes. Lets move on, and debate the real important things such as the relevance of the save icon as a flopy device 
One thing that I love about icon design is how different the process becomes depending on size.
At large sizes you can spend hours messing around with materials, reflections, shadows and tiny details.
At small sizes all that disappears and suddenly you are fighting for every pixel. trying to keep the meanigfull details and creating a source svg monster in Oxygen repo 
I think icon design is really just the art of deciding what can be removed before the whole thing falls apart.
Talking about things that may or may not fall apart…
I've also been spending some time exploring styling in QML and thinking about possible future directions for O².
Nothing concrete yet.
Mostly experiments.
Some ideas are sensible.
Some ideas are absolutely not sensible. On propose 
The main goal is realy to show range of things I would ike to see available on Union.
Those are usually the interesting ones.


Right now I'm more interested in exploring the range of possibilities than deciding what a final result should look like. There are some surprisingly fun things hidden in there.
If all goes well we will soonish publish a video with KDAB showing some of these experiments and crazy ideas.
Or at least the ones that dont completely explode before then 
So stay tuned.
And as always, thanks for using Oxygen.
This old project still finding new excuses to keep going.
06 Jun 2026 9:40pm GMT
Kdenlive 26.04.2 released
The second maintenance release of the 26.04 series is out with the usual batch of bug fixes and improvements for workflow and stability. This update comes with fixes to rendering, timeline editing, project file handling, and Windows, MacOS, AppImage and Flatpak packaging.
One noteworthy bug closed in this version is a fix on Windows to finally allow exporting your videos to a network drive, closing a 4-year-old bug.
Head to our download section to get the latest binaries, or check the updates from your package manager. Please note that for Linux only AppImage and Flatpak are supported by the Kdenlive team.
For the full changelog continue reading on kdenlive.org.
06 Jun 2026 12:45pm GMT
