16 Sep 2026
Planet KDE | English
KDED refactoring Progress Update!
The past couple of weeks moved on to the other half of the editor work- the kded dialogs that pops up on NetworkManager's behalf - the secret prompt, the SIM PIN dialog, the mobile broadband wizard.
Why this needs doing
The Connection Editor isn't the only place libs/editor gets used. kded's network management module runs as NetworkManager's secret agent: whenever NetworkManager needs a password, a PIN, or a fresh mobile broadband connection, it asks the agent, and the agent has been popping up a QDialog ever since. PasswordDialog asks for Wi-Fi/PPP/VPN secrets, PinDialog unlocks a SIM, MobileConnectionWizard walks through adding a GSM/CDMA connection when you plug in a modem or pair a Bluetooth phone for DUN. All three are widgets, and the VPN half of PasswordDialog reuses the same VpnUiPlugin-returning-a-QWidget mechanism the editor already moved off of.
The straightforward half
The new module is kdedqml, structured the same way editorqml was: a small set of QObjects and a PromptWindow that hosts whichever QML file they back.
kdedqml/
├── passwordprompt.cpp / .h secrets for a plain setting or a VPN
├── pinprompt.cpp / .h SIM PIN/PUK unlock
├── mobilewizard.cpp / .h GSM/CDMA connection wizard
├── promptwindow.cpp / .h hosts one QML file + one backing QObject
└── qml/
├── PasswordPrompt.qml
├── PinPrompt.qml
└── MobileWizard.qml
PromptWindow is the one new idea here, and it's deliberately dumb - give it a QUrl and a QObject, and it loads the QML file into a QQmlApplicationEngine, exposes the object as a context property named prompt, and shows the window. Every one of the three prompts is just "construct the backing object, hand it to a PromptWindow":
m_promptWindow->show(QUrl(QStringLiteral("qrc:/plasma-nm/kdedqml/qml/PasswordPrompt.qml")), m_dialog);
PasswordPrompt itself does the boring 90% of the work first: it duplicates what PasswordDialog already did for plain secrets (Wi-Fi retry messages, WEP/WPA key validation via NetworkManagerQt rather than a regex, the same rule as last time) and, for VPNs, reuses the AuthSetting classes the editor already has:
if (shortName == QLatin1String("ssh")) {
m_vpnAuth = createAuth<SshAuthSetting>(hints, this, vpnSetting, m_vpnSecrets);
} else if (shortName == QLatin1String("sstp")) {
m_vpnAuth = createAuth<SstpAuthSetting>(hints, this, vpnSetting, m_vpnSecrets);
} ...
createAuth constructs the setting and calls loadSecrets(), just pointed at secrets instead of full config. Ten VPN types wired up this way, and PasswordPrompt.qml picks the matching Auth.qml from the editor with a Loader switching on service type, exactly like the editor's own VPN page switches on it.
The half that is actually interesting
OpenConnect doesn't fit that shape at all, because it was never really a settings-and-secrets dialog. The widget version, OpenconnectAuthWidget, runs a whole login session: it drives libopenconnect on a worker thread, and the C library calls back into Qt synchronously to ask for a login form, validate a server certificate, or open a browser for single sign-on - and it expects an answer before it returns, because it's still in the middle of openconnect_obtain_cookie().
The trick the widget uses, and the one I had to keep, is that the callback doesn't wait on the GUI thread's answer via a blocking Qt connection. It emits a signal, then blocks itself on a QWaitCondition:
int OpenconnectAuthWorkerThread::validatePeerCert(void *cert, const char *reason)
{
...
bool accepted = false;
m_mutex->lock();
Q_EMIT validatePeerCert(qFingerprint, qCertinfo, qReason, &accepted);
m_waitForUserInput->wait(m_mutex);
m_mutex->unlock();
...
}
The worker thread is asleep inside wait(), so the bool *accepted pointer it handed across threads stays valid for however long the GUI takes to answer - which for a modal QDialog::exec() was instant, but for a QML dialog the answer only comes back later, from a separate button click. So OpenconnectAuth (the new QML-facing class) splits every one of these callbacks into two halves: the slot that receives the signal just records the state and returns immediately, and a separate Q_INVOKABLE - acceptCertificate(), submitForm() - does the actual wakeAll() once the user has answered:
void OpenconnectAuth::acceptCertificate(bool accept)
{
*m_certAcceptedPtr = accept;
...
m_mutex.lock();
m_workerWaiting.wakeAll();
m_mutex.unlock();
}
Everything else - the dynamic login form built from oc_auth_form, the "changing the group re-submits" behaviour, the SSO web login - is the same worker thread, copied unchanged, talking to a QML WebEngineView instead of a QWebEngineView widget. The two share the same underlying Qt WebEngine types (QWebEngineLoadingInfo, QWebEngineCookieStore, QWebEngineWebAuthUxRequest), so the bridge is mostly mechanical - a WebEngineView.onWebAuthUxRequested handler calling straight into the existing OpenconnectWebAuth helper from the editor's SSO work.
Wiring it together
secretagent.cpp picks between PasswordDialog and PasswordPrompt with a type alias behind HAVE_KDEDQML, so the rest of the file barely changes:
#ifdef HAVE_KDEDQML
using SecretsPrompt = PasswordPrompt;
#else
using SecretsPrompt = PasswordDialog;
#endif
The one real change is that closing a prompt used to be m_dialog->deleteLater() scattered across cancel, reject, and kill paths; those all go through one closePrompt() now, which also closes the shared PromptWindow if there is one. bluetoothmonitor.cpp and modemmonitor.cpp get the same treatment for the mobile wizard and the PIN dialog - and the PIN one loses something along the way: it no longer calls QDialog::exec(), so unlocking a SIM doesn't block kded on a nested event loop anymore.
OpenConnect gets one more property on top of that, selfDriven, because the worker thread accepts the dialog itself once it has a cookie - there's no Ok button to press, only Cancel:
standardButtons: prompt.selfDriven ? QQC2.DialogButtonBox.Cancel : QQC2.DialogButtonBox.Ok | QQC2.DialogButtonBox.Cancel
Same BUILD_EDITORQML flag as before, just gating one more directory now.
What is left
The mobile broadband wizard, PIN prompt, and OpenConnect are all wired up now. What's left is test coverage for the new kdedqml classes, and the actual port to Plasma Mobile, since PromptWindow and the three prompts were built with a phone-sized layout in mind but haven't been run on one yet.
HAVE_KDEDQML and HAVE_OPENCONNECT both mean the widget path is still there, on purpose - nothing gets to come out until the QML path has actually been exercised end to end, tests included. And this was only the kded side; the applet's Handler::showConnectionEditor() still opens the widget ConnectionEditorDialog directly for WPA-Enterprise networks it can't join with a password alone, which is the other loose thread from last time and still isn't pulled.
Thanks, see you soon.
16 Sep 2026 1:18pm GMT
15 Sep 2026
Planet KDE | English
I'm Going to Akademy!

It's been 7 years since I last posted such a banner, and just today I remembered how I was always excited about this kind of posts, so here we go. I've also been to Akademy in Würzburg 2 years ago, but didn't post the banner for some reason (silly me!).
I haven't really contributed to KDE for quite a while, but Akademy is always worth attending, even just to meet old friends again and make some new ones. Plus this year is KDE's 30th birthday. KDE has been such a huge part of my life, so I am not going to miss such an anniversary.
Can't wait to see you all in Graz soon!
15 Sep 2026 9:00pm GMT
Krita 5.3.4 Released!
Today we're releasing Krita 5.3.4 and 6.0.4, containing many bugfixes and improvements across the board. It also finally brings video exports to Android, which means you can now render animations and timelapses from the recorder. Apart from that, Arkady Flury has been improving Krita's icons at a steady rate. Thanks! Also of note: the GIMP XCF file import plugin has been removed. The plugin relied on a third party library that is no longer maintained and had many security issues.
Changelog
- Don't allow to record images that are too big (2^29spixels)
- Fix recorder export when some frames are missing
- Disable long-press on canvas widgets (Bug 525361)
- Fix layer thumbnails scaling when using display scaling
- Fix openening large exr files
- Fix writable resource path validator (Bug 521186)
- Fix channel flags when converting the image's color space
- Fix a rare crash when creating a new image on Windows (happens when the user holds a key while creating the image)
- Fix a crash when a python plugin specifies an invalid action path
- Fix resetting native touch gestures on configuration change
- Fix issues with adding resource bundles and resources on Android
- Fix a crash when "First Frame" shortcut is used when a file with a linked audio track is open. (Bug 524212)
- Fix the recorder interrupting using tools (Bug 488472)
- Fix potentional crashes with some fonts (Bug 523857)
- Do not warn the user about active global selections masks when exporting a file
- The comic manager plugin received several fixes for memory leaks and improved epub export
- Support to render animations and export timelapses on Android.
- Additional bundles in the Android supporter subscription: the latest SK3 pencil bundle, as well as the earlier SK1 and SK2 bundles.
⚠️ Warning
We consider Krita 5.3.4 suitable for productive work; 6.0.4 is, because of the many changes from Qt5 to Qt6 more experimental.
Download 5.3.4
Windows
If you're using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the Krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.
ⓘ Note
We are no longer making 32-bit Windows builds.
-
64 bits Windows Installer: krita-x64-5.3.4-setup.exe
-
Portable 64 bits Windows: krita-x64-5.3.4.zip
Linux
Note: starting with recent releases, the minimum supported distro versions may change. On Wayland, Krita is only tested against KDE Plasma's KWin. Other compositors may not be fully compatible.
⚠️ Warning
Starting with recent AppImage runtime updates, some AppImageLauncher versions may be incompatible. See AppImage runtime docs for troubleshooting.
- 64 bits Linux: krita-5.3.4-x86_64.AppImage
MacOS
⚠️ Warning
With Krita 5.3.4 release minimum supported MacOS version has increased from 10.14 (Mojave) to 10.15 (Catalina)
- MacOS disk image: krita-5.3.4-signed.dmg
Android
Krita on Android is still beta; tablets only.
Source code
Source code is the same as 6.0.4. See the 6.0.4 section.
md5sum
For all downloads, visit https://download.kde.org/stable/krita/5.3.4/ and click on "Details" to get the hashes.
Key
The Linux AppImage and the source tarballs are signed. You can retrieve the public key here. The signatures are here (filenames ending in .sig).
Download 6.0.4
Windows
If you're using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the Krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.
ⓘ Note
We are no longer making 32-bit Windows builds.
-
64 bits Windows Installer: krita-x64-6.0.4-setup.exe
-
Portable 64 bits Windows: krita-x64-6.0.4.zip
Linux
Note: starting with recent releases, the minimum supported distro versions may change.
⚠️ Warning
Starting with recent AppImage runtime updates, some AppImageLauncher versions may be incompatible. See AppImage runtime docs for troubleshooting.
- 64 bits Linux: krita-6.0.4-x86_64.AppImage
MacOS
Note: minimum supported MacOS may change between releases.
- MacOS disk image: krita-6.0.4-signed.dmg
Android
Krita 6.0.4 is not yet functional on Android, so we are not making APK's available for sideloading.
Source code
md5sum
For all downloads, visit https://download.kde.org/stable/krita/6.0.4/ and click on "Details" to get the hashes.
Key
The Linux AppImage and the source tarballs are signed. You can retrieve the public key here. The signatures are here (filenames ending in .sig).
15 Sep 2026 12:00am GMT
14 Sep 2026
Planet KDE | English
KDE e.V. is looking for a Software Infrastructure and Continuous Delivery Engineer
KDE e.V., the non-profit organisation supporting the KDE community, is looking to hire a Software Infrastructure and Continuous Delivery Engineer to help improve our infrastructure that the KDE community relies on. Please see the call for proposals for more details about this contract opportunity. We are looking forward to your application.
The full call for proposals has more details.
14 Sep 2026 12:00am GMT
12 Sep 2026
Planet KDE | English
This Week in Plasma: 6.8 Beta Release!
Welcome to a new issue of This Week in Plasma!
This week we released a beta of Plasma 6.8, and it's ready for testing. Before branching, the team landed a lot of great improvements to make sure it's an awesome release. Check it out:
Notable new features
Plasma 6.8
The Kup backup system has moved to Plasma! That means it will get regular releases, and we're encouraging OS developers to start including it. It really works very well for off-device backups.

Notable UI improvements
Plasma 6.6.7
Discover once again shows Snap versions of apps in the source selector menu rather than as separate apps. (Gabriel Kuznik, KDE Bugzilla #519204)
Plasma 6.8
The clipboard's settings for how to handle copied image data and "MIME actions" are now a lot more comprehensible. (Tomáš Hnyk, KDE Bugzilla #348932, KDE Bugzilla #502274, and KDE Bugzilla #473882)
Changing the volume really quickly no longer causes irritating-sounding popping noises in the volume level preview sounds. (Jeremy Senkiw, plasma-pa MR #424)
On the lock and login screens, clicking the "Show On-Screen Keyboard" button (renamed from "Virtual Keyboard") now always shows the keyboard as you would expect, irrespective of its typical visibility settings. (Kristen McWilliam and Nate Graham, KDE Bugzilla #467209 and plasma-workspace MR #7044)
The Input Method widget has been somewhat similarly overhauled. Now it's primarily used to switch between on-screen keyboard visibility modes, but also lets you manually show the keyboard while an XWayland-using app is focused, because these apps don't have support for making the keyboard appear automatically. (Kristen McWilliam, plasma-workspace MR #6876)
The Kickoff Application Launcher widget is now always big enough by default to fully accommodate all items in its sidebar, rather than sometimes being scrollable - occasionally by even just a few pixels, which was fairly silly. (Christoph Wolk, KDE Bugzilla #515175)
Notifications' speed graphs now have better axis label padding. (Méven Car, plasma-workspace issue #151)

Spectacle no longer shows a weird and misleading message about successfully copying the image to the clipboard after you use the "Share…" feature to share the image elsewhere. (Tobias Fella, spectacle MR #586)
Improved the keyboard navigation behavior of the Digital Clock widget's calendar view. (Christoph Wolk, plasma-workspace MR #6900)
On System Settings' Quick Settings page, the list of frequently-used pages is never just empty; now it shows a default set until you've used the app enough so that it knows what pages you frequently use. (Tobias Fella, KDE Bugzilla #522711)
Changed the percentages shown on the Power & Battery widget to use fixed-width "tabular numerals", so other UI elements don't slightly jump around as the numbers change when using some fonts. (Christoph Wolk, powerdevil MR #674)
If you have multiple panels with System Tray widgets on them, clicking the "Show Notifications" button on the "You missed some notifications" notification now only opens the notification history widget on the first/main panel. (Ameen Al-Asady, plasma-workspace MR #7028)
In the Clipboard widget's history view, the inline buttons for the selected item now only appear when it's hovered or when any of the buttons have keyboard focus. This makes it possible to make the buttons disappear so you can read all of the selected item's text. (Christoph Wolk, KDE Bugzilla #520130)
Reduced a bit of awkwardness in the way you rename audio devices. (Tomáš Hnyk, KDE Bugzilla #508211)
Notable bug fixes
Plasma 6.6.7
Fixed a really weird bug in the Kickoff Application Launcher that could make phantom representations of apps in one category appear in other categories after you scrolled around there for a bit and then switched to the other category. (Christoph Wolk, KDE Bugzilla #515229)
Plasma 6.7.6
Fixed a weird bug that prevented moving focus from the password field of a network shown in the Networks widget back up to the widget's search field. (Christoph Wolk, KDE Bugzilla #525321)
Plasma 6.8
Plasma no longer crashes if you query the wallpaper using D-Bus while the wallpaper settings dialog was open, and then switching wallpaper plugins. (Alperen Yildiz, KDE Bugzilla #525207)
Copying text in LibreOffice apps now adds it to the persistent history every single time, rather than only every other time. (Tomáš Hnyk, KDE Bugzilla #519510)
Middle-click-pasting text that was selected in a non-Qt-based app into a Qt-based app now works every time, rather than every other time. (Tomáš Hnyk, KDE Bugzilla #506325)
Fixed an issue that could make some tool settings in Spectacle's full-screen annotation UI appear off-screen. (Mirko Laruina, KDE Bugzilla #524499)
Fixed an issue that could leave the wallpaper previews in the Activity Switcher sidebar all black, instead of showing the wallpaper. (Nicolas Fella, KDE Bugzilla #378693)
An invalid XWayland configuration file inside /etc/xdg/Xwayland-session.d/ no longer prevents KWin from launching XWayland at all. (Ilya Katsnelson, kwin MR #9894)
Entering and exiting full-screen mode no longer makes Task Manager tasks' "I'm playing audio right now" indicators disappear or get stuck in a partially transparent state. (Christoph Wolk, KDE Bugzilla #522471)
Frameworks 6.31
Fixed a bug that made the "Frames and Outlines Contrast" theme setting not take effect in certain apps where it was expected to work. (Akseli Lahtinen, KDE Bugzilla #525364)
Manually setting your home folder to "Indexed" on System Settings's Search page no longer creates an un-removable clone of that entry. (Nicolas Fella, KDE Bugzilla #487212)
Qt 6.11.1
Fixed a serious QML issue that could make QML-based UIs break with nonsensical property errors. (Fabian Kosmale, Qt bug #149607 and Qt bug #146886)
Notable in performance & technical
Plasma 6.8
KWin has gained support for the commit_timing Wayland protocol. (Xaver Hugl, KDE Bugzilla #513283)
Remote desktop connections now benefit from even lower latency. (David Edmundson, krdp MR #237)
Gear 26.12
System Settings' KDE Wallet page has been ported to QML. (Nicolas Fella, kwalletmanager MR #78)
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.
12 Sep 2026 12:00am GMT
11 Sep 2026
Planet KDE | English
Web Review, Week 2026-37
Let's go for my web review for the week 2026-37.
Making Social Media Social
Tags: tech, fediverse, social-media, community
Interesting approach. When friction to subscription is a good way to really build community.
https://tante.cc/2026/09/10/making-social-media-social/
Automattic CEO Matt Mullenweg Put on 'Leave of Absence'
Tags: tech, blog, wordpress, business
Looks like the drama continues. I wonder where this will land.
https://www.404media.co/wordpress-automattic-ceo-matt-mullenweg-put-on-leave-of-absence/
Doomscrolling ourselves to death
Tags: tech, book, reading, tv, social-media, attention-economy, politics, history
The argument presented is maybe a bit too mechanical for my taste. That said there's indeed something to be said about the decline in literacy and its consequences on our societies.
https://www.edwest.co.uk/p/doomscrolling-ourselves-to-death
Tristan Buckmaster's statement on the Navier-Stokes resolution
Tags: tech, ai, machine-learning, gpt, mathematics, ethics, science
Shows some insights into the kerfuffle around the Navier-Stokes recent resolution. The behavior of OpenAI in this affair is ludicrous. In my opinion this is showing research malpractice… Why care about the scientific method when you have a shot at good PR?
https://cims.nyu.edu/~tristanb/statement.pdf
The function of LLM-based math "proofs"
Tags: tech, ai, machine-learning, gpt, mathematics, research, science
Is it badly conducted research for PR purpose? Who would have expected anything different? I wish we'd fund real science instead…
https://tante.cc/2026/09/07/the-function-of-llm-based-math-proofs/
Soft-deprecating re.match()
Tags: tech, api, python
Interesting way to deal with deprecation in Python. Indeed sometimes it doesn't hurt to keep the not so ideal old name… but you want to push user code to know they miss an opportunity in readability by using the old name.
https://hugovk.dev/blog/2026/soft-deprecating-re.match/
A quick overview of atomics in C
Tags: tech, c, multithreading, atomics
Still need to understand atomics and memory barrier? This is a neat primer.
https://lemire.me/blog/2026/09/09/a-quick-overview-of-atomics-in-c/
Visualizing Rust's Vtables: How dyn Trait Works In Memory
Tags: tech, c++, rust, memory, type-systems
Interesting exploration of how static and dynamic dispatchs work behind the scene in Rust. The chosen tradeoffs are different than in C++ and that's something to keep in mind.
https://sofiabelen.github.io/projects/visualizing-rusts-vtables-how-dyn-trait-works-in-memory/
My HTML Boilerplate
Tags: tech, web, html
There's a lot of important metadata in HTML pages nowadays… and there could be more than proposed here.
https://vale.rocks/posts/html-boilerplate
There's No Limit to How Bad Code Can Get
Tags: tech, software, engineering, quality
Good point. The metaphors we use have obviously some limits. In the case of the "sinking ship" when used for software it doesn't quite work as there's no bottom…
https://zachkehs.com/blog/theres_no_limit_to_how_bad_code_can_get/
On Quality: What It Is and Why Products Get Worse
Tags: production, quality, craftsmanship
Very nice read about quality in general and why it's really hard to define. It also explores how it can degrade over time in existing products.
https://www.worseonpurpose.com/p/on-quality
Degeneracy is a Symptom
Tags: history, economics, politics
Or why it's stupid to judge people on their non virtuous behavior while at the same time fostering the structures which ensure that virtue does not pay. So indeed, some people read the odds properly and act accordingly…
https://henryfudgeofficial.substack.com/p/degeneracy-is-a-symptom
The Last Person to Know the Dictator Is Screwed Is the Dictator
Tags: history, politics
Build a good enough echo chamber and you won't know you're toast before it's too late.
https://thegrimhistorian.substack.com/p/the-last-person-to-know-the-dictator
When Death Was a Relief
Tags: history
Such a wonderful species we are… not. Things can get really nasty when someone starts exploiting beliefs and gains some sort of power. And then, the blame game begins. Unfortunately it regularly happens.
https://m.youtube.com/watch?v=205swuI0JlY
Bye for now!
11 Sep 2026 3:47pm GMT
I just want us to feel something…

So... Koko needed a new icon.
Koko is KDE's image viewer, sharing its name with the rather famous gorilla, and yes, putting a gorilla in the icon would have made perfect sense... but we all love cats, and so did KOKO, so here we are 
And while making this ridiculously cute thing I kept thinking about something that has been bothering me more and more. Hopefully the cuteness of the cat will alleviate the ranty nature of what follows 
Why is so much of what we design today so f...... boring?
We have incredible displays, GPUs doing absurd things, animation engines, shaders, QML, tools I could only dream about 20 years ago... and somehow so much of what we make with all of that looks like the same five rectangles arranged in slightly different ways.
Clean. and forgettable, austere but not in a brutalist way, its.... just booooring .
I've spent quite a bit of time recently bringing bits of old Oxygen back to life, and I know there is a temptation to read that as nostalgia, as if my answer is "look, things were better when we had shiny icons!"
It isn't.
I don't want the future to look like 2008.
In fact I think this sudden fascination with old interfaces, skeuomorphism, Winamp skins, old games, old icons and all the rest is a symptom of something else. People are looking backwards because they miss design having a personality. They miss opening something and actually having a reaction to it.
And now we have AI.
And f'ing..... makes the whole thing even more urgent to me. AI is spectacularly good at producing things that look like things that already exist. And if our design ambition was already reduced to producing safe, familiar, derivative variations of whatever everyone else is doing or that we have done... congratulations, they have automated it,.... and and I can't feel much more from such things... other than plain sadness.
So I don't want us to go backwards. I want us to go somewhere.
Make something NEW!!!
Make something strange. Make something excessive. Make something beautiful, ugly, funny, annoying, charming, stupid, brilliant, probably all of those at once. Make something somebody will hate enough to write a 14 rant bolg post about.
Just please make us feel something.
see you soon in aKademy for more ranting and maybe a beer or 2

Also played with this for the plasma-studio app. I think i can do better
just go do stuf NEW stuf!!!!!!
11 Sep 2026 2:57pm GMT
Kdenlive 26.08.1 released
The first maintenance release of the 26.08 series is out with the usual batch of stability fixes and workflow improvements. Highlights include a big batch of fixes for crashes when changing Timeline Preview settings, deleting sequences, stopping audio recordings, and using ripple editing when the Project Monitor is hidden. This release also fixes Effects Zones not being kept inside the clip boundary and tabs are now readable on theme changes on Windows.
Join us at Akademy

Some of the team members will be in Graz for Akademy, celebrating 30 years of KDE. Also Jean-Baptiste Mardelle will be giving a talk about Kdenlive.
Kdenlive needs your support
Our small team has been working for years to build an intuitive open source video editor that does not track you, does not use your data, and respects your privacy. However, to ensure a proper development requires resources, so please consider a donation if you enjoy using Kdenlive - even small amounts can make a big difference.
For the full changelog continue reading on kdenlive.org.
11 Sep 2026 1:45pm GMT
10 Sep 2026
Planet KDE | English
Akademy-es 2026 ... in a campsite!
Akademy-es 2026 is happening October 23 to 25 in Camping Arco Iris (Villaviciosa de Odón, Madrid)
For the 20th anniversary of the first Akademy-es, the organizers have chosen a campsite to do a slightly different event focusing on the community side of KDE.
There will still be of course talks, so remember you can submit one until this September 13th!
See you there!
10 Sep 2026 8:28pm GMT
JPEG-XL as default in AppStream, and better media processing
Two weeks ago, I released AppStream 1.2.0. This release contains a lot of great changes, but one of the most important ones concerns how media are being handled, and AppStream's default image export format.
AppStream is a Freedesktop metadata standard to describe software components. That can be anything from system services over fonts to console and graphical applications. AppStream metadata is supposed to give users enough information to decide whether they want to install a piece of software, to represent that piece of software, and to give the operating system enough information to decide whether a software component should be installed automatically and (to some extent) what capabilities and relations it has, to provide the user with sensible options.
Especially for the first two goals, and especially for GUI applications, AppStream supports icons and screenshots, which are used to showcase applications. Today, AppStream is used by all kinds of services, from Linux distributions over firmware updates to Flatpak and desktops directly. AppStream's original design however comes from the perspective of Linux distributions in 2011, where you may want to browse the software catalog offline, without delay, and without pinging an external server (which could be a privacy concern).
Therefore, a common way to deploy an AppStream-enabled software repository is to ship all icons of all applications in the repository to the user as part of the repository metadata download. AppStream does support remote icon downloads nowadays, and for a while I thought that this would become the default eventually. However, especially in today's world, having a bandwidth-saving, instantly responsive, privacy-protecting application browsing experience seems more important that ever.
PNG images are great!
The only format that AppStream supports for icons and screenshots (which are downloaded on-demand from your distributor's CDN) has always been exclusively PNG. PNG images are perfect for icons, because they compress well (especially for common icon shapes), are fast and simple to load, and can be loaded anywhere, by any toolkit or webbrowser. They also ensure we deliver faithful screenshot images, even though we may have scaled or re-rendered them. Still though, PNG images are less great for screenshots, as they are not very efficient, which puts strain on any CDN that has to deliver them, as well as on people's internet connections when browsing screenshots. Having smaller thumbnails alleviates that problem a little, but does not fully solve it.
But even for icons, PNG could be improved upon: In many cases, icons are re-downloaded with the repository metadata again and again, so having a large icon tarball adds up to the data transferred during metadata refreshes. AppStream also now supports large 128x128px icons, which nobody in 2012 expected we would need, adding even more data that will be re-downloaded. Saving some space here translates directly to lower bandwidth costs as well as faster downloads for users.
To improve PNG file sizes, the AppStream Compose library, which handles all image processing and metadata catalog composition, was running optipng on all generated PNG images. That does create smaller PNG images, but they were still relatively large compared to other image formats.
For a long time though, there was no alternative to PNG images for icons: There was no lossless image compression format that could give us the same quality as PNG images and that was also widely supported.
JPEG-XL vs PNG in AppStream
Since 2021 we have JPEG-XL (JXL), which offers a true lossless mode with often better compression than PNG. The issue was that JPEG-XL wasn't widely supported. Then, in 2025, the PDF Association selected JPEG-XL as the preferred image format for HDR images in PDFs, and now we are finally getting browser support and more ubiquitous availability of the format (you can try it right now in Firefox!).
For screenshots, using JXL's lossy mode, it has obvious and extreme size advantages over PNG, so supporting JXL or WebP for screenshot images was an obvious choice. If JXL would support the lossless case very well as well though, we could serve many use cases with the same exported image format, which is very attractive to me.
So, the obvious next question was whether it was worth the pain of switching the icon format, so I did some measurements on real icons. For that I used the AppStream component icon pool that Debian Unstable ships, which is almost 5000 application icons of various sizes, and converted them to PNG:
| Icon size | Icons | PNG total | JXL total | Pool saved | PNG avg | JXL avg | Median saved | Mean saved | Worst | Best | Larger as JXL |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 48×48 | 1544 | 3.7 MiB | 3.0 MiB | 17.8% | 2.4 KiB | 2.0 KiB | 17.9% | 16.7% | -118.7% | 60.0% | 206 |
| 64×64 | 2018 | 7.0 MiB | 5.8 MiB | 17.8% | 3.6 KiB | 2.9 KiB | 18.0% | 15.8% | -112.7% | 70.0% | 279 |
| 128×128 | 1411 | 11.2 MiB | 8.7 MiB | 22.0% | 8.1 KiB | 6.3 KiB | 20.1% | 17.5% | -89.7% | 61.0% | 209 |
| TOTAL | 4973 | 21.9 MiB | 17.5 MiB | 19.9% | 4.5 KiB | 3.6 KiB | 18.6% | 16.6% | -118.7% | 70.0% | 694 |
PNG images saved with libpng at effort=4, compression=9, then optimized using optipng -o2, JXL images encoded using vips jxlsave lossless=1 effort=7 strip=1 via VIPS/libjxl.
As the table shows, using lossless JXL images over size-optimized PNG images (using optipng's default settings) provides a roughly 20% gain. This does not look like much, until you consider how often these files are downloaded: A 20% file size reduction may only save 1-2 MiB of disk space, but if they are downloaded over and over again by many clients, it will save a lot of bandwidth.
Interesting JXL encoding findings
As a sidequest, I was curious why some images were larger than their PNG counterparts when encoded with JXL, and what the ones that were significantly smaller were.
In short, the biggest size reductions for JXL existed on images that were already small as PNG, and contained large, flat color surfaces with hard edges and simple shapes. They were not very interesting, and much of JXL's wins come from accumulating smaller gains across all files, which compound the bigger icons get (especially at 128x128px, where JXL truly shines).
The events were JXL loses to PNG are more interesting: For example, it does quite poorly with pixel-art images that have a lot of repeating patterns. Those are encoded well by PNG, but less efficiently by JXL. Take for example Vonsh:
My guess is that while PNG can exploit the repeating pixel patterns for compression, JXL's predicts surrounding pixels from its neighbours, which fails too often and makes it pay almost full entropy per pixel. In this single rare case, the PNG is at 5.4 KiB, while the JXL is almost 8 KiB in size.
Other cases I looked at were arguably buggy input data, where color channels were hidden under the alpha channel of the input image. PNG could probably again exploit repeats, while we were forcing JXL to encode pixels that were invisible in the final image. This is arguably a problem with the original input data. Currently, AppStream does not make any changes to icons at all, but in future we might add a filter that removes invisible colors from images to solve this pathological case (it was only two icons out of 5000 though, so it is not a high priority).
The third case I found where JXL loses to PNG were icons with checkerboard-like patterns:
For those, PNG can likely again exploit the repeating patterns, while a checkerboard layout is pretty bad for left/top predictors like JXL's. However, in this case the size difference (and loss for JXL) is only 450 bytes, so even though JXL loses to PNG, it does so not by much.
JXL in AppStream
Given these findings, JPEG-XL is the default image format starting with AppStream 1.2.0. AppStream Compose will encode all images losslessly as JXL, while screenshots are encoded in lossy mode at Q=90 effort=7. Since the optipng step does not happen for JXL images, this comes at no speed penalty and is even a bit faster on modern x86_64 CPUs (where libjxl can use SIMD). PNG is still available, and Compose can be told to switch between the two formats.
Upsides of JXL in AppStream right now
If you use JXL in Compose or the recent release of appstream-generator, you will get much smaller images and, for screenshots, will benefit from other JPEG-XL features such as progressive decoding, providing a far nicer user experience. libAppStream has supported JXL icons since version 1.1.3, so your clients will need that version or a newer one, and all software centers will have to support loading JXL images (which all of them do, provided the right plugins are installed).
Downsides of switching to JXL too quickly
JXL is a very new format, so web browsers might not yet display it if you are serving webpages. Your clients may also have bugs in processing JXL images, as the format is still "new". For example, switching on JXL in Debian sent KDE Discover into an infinite loop on startup while trying to load the icons (an issue which has been fixed, but clients will need that patch first before JXL is switched on).
This currently makes JXL enablement only possible when you know that your clients can support it. This is the case for me in Debian Unstable and Debian 14, which are using JXL images for a few weeks now, but not for any older releases. Platforms like Flatpak have it even harder, because they do know even less about their clients. So, even though it has big advantages, you may want to hold off on using JXL right away, and force PNG by setting the ImageFormat key to png in appstream-generator's configuration, or passing --image-format=png to appstreamcli compose.
It is also worth mentioning that JPEG-XL is much, much slower on systems that do not have SIMD instructions or for which the libjxl/jxl-rs library does not have them (such as apparently riscv64 right now). If this is a concern, you might not want to switch to JXL right away.
Media pipeline improvements
Besides the JXL default change, AppStream 1.2.0 also comes with a complete overhaul of its media processing pipeline. While libappstream, AppStream's main library, does not do any media processing and comes with very minimal dependencies to be embedded in client applications and used on servers, the same can not be said about libappstream-compose, AppStream's library to build metadata generating applications (the server-side part, usually).
The compose library has to render fonts into font specimen cards, inspect translation files, render SVG images, decode all kinds of raster images, inspect video files, etc. Especially the fonts, and the fact that fonts can appear in SVG images, has caused issues in the past, as libappstream-compose is a heavily threaded library and most font libraries can only work from a single thread. This forced the library to essentially go into single-thread mode anytime anything that could touch a font was being processed.
AppStream also originally was created for a "safe world" where applications were vetted by the distributors before their metadata was processed. This is increasingly not the case, so it made sense to put at least a few guardrails on the most complex part of the pipeline: The media processing. As part of the change, media processing was split out into a separate worker process. This solved two problems at once: Font handling was isolated in a single-threaded binary - if we wanted to handle fonts in parallel, we could simply spawn more workers. And, being in a separate process, the media processing could now be sandboxed.
As part of the multiprocess changes, Compose also switched from using GdkPixbuf to VIPS for image processing. The latter allows for much more fine-grained control over the image output and encoding, and comes with a lot of well-maintained filters and operations, which made it possible to eliminate a fair chunk of AppStream's hand-rolled image processing operations. As part of this transition, we unfortunately lost the ability to read XPM images, which dropped about 20-30 applications from the pool at Debian. But in the name of security, this is a sensible choice, especially since most XPM icons were very small and low-resolution, and applications using them could benefit from adding a high-quality PNG icon anyway. With VIPS, we also now restrict the amount of image formats we can load to a sensible set, so extremely niche or unexpected formats will be outright rejected (this includes sane-but-unusual formats for screenshots and icons, such as TIFF images).
The Compose library, with all of these changes, will now just request high-level operations (e.g. "render a font card for this font to a JXL image") from the worker, and provide it with input data in sealed memfds and output locations as FDs as well. On Linux systems, the worker will use Landlock if available, to block all write access to the filesystem, deny device access and deny TCP and UDP as well. The sandbox can certainly be tightened a fair bit in future, but this was a good and safe start to gain some experience with it without having things break too easily, given the many places Compose is used in (also, Landlock's API is surprisingly nice to use, so it was easier than I thought to add in this early version).
With all of these changes, the libappstream-compose library is now also officially marked API-stable, so you should be able to rely on it in future to build new things (its API has barely changed in the past, and now with the new media API and defaults change in place, it was time to declare it stable).
I want to see / try this!
Currently, the easiest way to have a look at the new data is to check out Debian Unstable. If you have a JXL-enabled browser, you can also see the icons in AppStream Generator's HTML pages for Debian Sid. If you are using appstream-generator for your distribution, you will also get much more pleasant statistics and HTML pages, as well as fully deterministic media output and a whole bunch of security updates, so, update to its recent 1.0 release.
Please keep in mind that if you switch to JXL, the client tools receiving the image data have to support it. Support varies depending on the Linux distribution, so, test it first and switch the default back to PNG in case you encounter any issues.
What's next?
With so many features and changes landed, the next changes in AppStream will focus on improving what already exists and fixing any issues (there will be more blogposts about the other features 1.2.x delivers!). Testing with the entire Debian archive as data source makes me fairly confident though that there will not be many problems. In the longer term, tightening the media processing sandbox will also be something we might want to do, e.g. by hiding parts of the filesystem tree or filtering syscalls.
For JPEG-XL, one obvious question is "Will you add support for it to the Freedesktop icon-theme specification as supported format alongside PNG, SVG(Z), and XPM?". For on-disk icon repositories, JXL's space-savings are less compelling, and it being HDR-capable is also not necessarily a killer feature (PNG can go a long way!). However, JPEG-XL's ability to immediately decode larger images at reduced resolution without resampling could legitimately be very powerful here, as applications could ship a single large image and quickly decode it at 1/2, 1/4 or 1/8 the size for different purposes in their UI. JPEG-XL also supports spot-color extra channels, which applications could use as masks to recolor raster icons at render time. This could be incredibly nice to color symbolic icons on-the-fly without any SVG and CSS. JXL also provides richer metadata, which might be neat for (license/author) documentation. So, the answer here is: Maybe it makes sense to allow another format, but this will have to be discussed first, as it would force JXL into every toolkit and desktop, which is a much bigger ask than supporting it only in AppStream.
As always, let me know what you think and please report any issues or bugs directly against AppStream or AppStream Generator if you encounter problems that are with the tools, and not with a project's metadata.
10 Sep 2026 5:48pm GMT
Parametrized Keyframes - Status Report, September 2026
Besides maintenance and debugging work, this year, my work on Kdenlive was mostly dedicated to refactoring the Kdenlive keyframes system to make it more powerful. This is part of a NGI Zero Commons grant via NLnet, see my last status report from february for some more context.
Previously, keyframes were set globally for an effect, touching all its parameters. With the updated logic, you can now decide to add keyframes only to a specific parameter, and parameters can have independant keyframes. This work will soon be made available for testing, and will be part of the next 26.12.0 Kdenlive release.
This new widget allows to move keyframes for several effects in one step, and also supports keyframe scaling, meaning that you can easily stretch a group of keyframes.
Effect Stack Before

Effect Stack After Refactoring

Basic keyframe features remain in the effect stack, like add/remove keyframe and seek to previous/next keyframe, but all other keyframe-related features have otherwise been removed from the effect stack into a dedicated Keyframes panel. The parameter values now have a colored background to indicate if you are currently on a keyframe or not.
One drawback is that it uses more space, but we plan to futher refine the interface in the next months before the final release.
New features
Beyond the obvious possibility to add per-parameter keyframes, and manage keyframes from several effects in one place, a few other features were included in the rewrite:
Move keyframes with keyboard
You can now grab the selected keyframes with the usual shortcut, then move them frame by frame using arrow keys.
Zoom and Keyframe scaling
Zooming and scrolling can be used with the standard mouse wheel events, and it is now possible to scale selected keyframes by selecting them and dragging with the Ctrl modifier.
And all the rest
The Keyframes interface also allows to filter parameters by name to only show matching parameters, useful if you have lots of effects on a clip. All this work will also make it much easier to add new keyframe features in the future.
Performance
"Adding new features is nice, but what about performance?" you may ask. Well, good news: this work also involved some cleanup and performance improvements. People working with lots of keyframes (for example with object tracking) will really enjoy the changes.
For example if you have a clip with more than 1000 keyframes, you will enjoy:
- Much faster project load time (can be as much as twice as fast)
- Much faster keyframe operation (changing a keyframe value was previously very laggy)
- Much better playback speed when the clip is selected (was previously very choppy)
And even if you don't use that many keyframes, the general workflow should be a lot smoother.
Meet us at Akademy

Part of the Kdenlive team will be in Graz for KDE's Akademy, celebrating 30 years of KDE. Be there to meet us!
Kdenlive needs your support
Our small team has been working for years to build an intuitive open source video editor that does not track you, does not use your data, and respects your privacy. However, to ensure a proper development requires resources, so please consider a donation if you enjoy using Kdenlive - even small amounts can make a big difference.
10 Sep 2026 11:00am GMT
KDE Plasma 6.8 Beta Release
Here are the new modules available in the Plasma 6.8 beta:
- kup: Backup scheduler for the Plasma desktop
Some important features and changes included in 6.8 beta are highlighted on KDE community wiki page.
Help stress-test the Union theming system
This releases marks the second half of the Union theming system's public tech preview!
New in Plasma 6.8: Union now themes QtWidgets applications, such as Dolphin and Kate. Bear in mind this support is preliminary and you will encounter bugs. When you do, please report them here!
To test Union:
- Make sure the
unionpackage is installed (name may differ depending on your distro) - Launch System Settings
- In the sidebar, navigate to Colors & Themes → Application Style
- Click "Breeze (Union)"
- Click Apply
This will apply Union styling to both QtQuick and QtWidgets apps.
The intention is for these apps to look as similar as possible when styled with Union to how they look with Breeze - though any minor visual improvements should be considered intentional!
If you find any issues, make sure they're Union-specific by running the app with the Breeze style to compare the two. If the issue is Union-specific, report it here!
Everything else
10 Sep 2026 12:00am GMT
KDE Gear 26.08.1
Over 180 individual programs plus dozens of programmer libraries and feature plugins are released simultaneously as part of KDE Gear.
Today they all get new bugfix source releases with updated translations, including:
- kdeconnect: Fix orientation of an arrow within the plasmoid (Commit, fixes bug #524889)
- kongress: Fix opening the room map from a talk (Commit)
- okular: Fix a crash when saving documents (Commit, fixes bugs #477153 and #505130)
Distro and app store packagers should update their application packages.
- 26.08 release notes for information on tarballs and known issues.
- Package download wiki page
- 26.08.1 source info page
- 26.08.1 full changelog
10 Sep 2026 12:00am GMT
09 Sep 2026
Planet KDE | English
KDE Ships Frameworks 6.30.0
Wednesday, 9 September 2026
KDE today announces the release of KDE Frameworks 6.30.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
- List ECM sources explicitly instead of using GLOBS. Commit.
- ECMInstalledLibraryCheck: add more separating linebreaks to generated files. Commit.
- ExecuteKDEModules: add newer KDE modules to test. Commit.
- ExecuteKDEModules: split off support for apple platform, document it. Commit.
- ECMInstalledLibraryCheck: use $cond:string over $IF:cond,string,. Commit.
- Add ECMInstalledLibraryCheck. Commit.
- Ecm_generate_export_header: make VERSION optional, default to PROJECT_VERSION. Commit.
- ECMSetupVersion: support version args in . and forms. Commit.
- ECMSetupVersion: use final hex number in version header, not calculation. Commit.
KCalendarCore
- Use QLocale for concatenating recurrence days. Commit.
- Improve translation contexts for some of the recurrence descriptions. Commit.
- Src/vcalformat.cpp - fix spelling typo in a comment. Commit.
- Adapt recurrenceDescription unit tests to English translations. Commit.
- Add Incidence::recurrenceDescription. Commit.
- Fix Incidence::statusName property name. Commit.
- Add translated enum names for Incidence::secrecy and Incidence::status. Commit.
- Change parseScheduleMessage to take a QByteArray as input. Commit.
- Add translated names for attendee status and role enums. Commit.
- Fix tr() message context. Commit.
- Expose Calendar and ScheduleMessage to python bindings. Commit.
- Add translated error messages. Commit.
KCMUtils
- Documentation fixes. Commit.
- Fix documentation for SettingsStateBinding. Commit.
- Fix docs for KQuickManagedConfigModule. Commit.
- Kcmutils_generate_module_data: add missing var init, for safer usage. Commit.
- Add missing EXCLUDE_DEPRECATED_BEFORE_AND_AT default variable declaration. Commit.
- No longer explicitly include CMakeParseArguments. Commit.
- Fix types in QML documentation. Commit.
KCodecs
- [KEncodingProber] Fix signedness issues for mBestGuess index. Commit.
- [KEncodingProber] Return 0.0 confidence if encoding signals wrong syntax. Commit.
- [KEncodingProber] Clean up float constants and C-style static casts. Commit.
- [KEncodingProber] Drop charlen tables from state machine models. Commit.
- [KEncodingProber] Remove need for charlen table from MBCS probers. Commit.
- [KEncodingProber] Remove some erroneously copied comment. Commit.
- [KEncodingProber] Remove no longer used method. Commit.
- [KEncodingProber] SBCS: Replace model pointer with reference. Commit.
- [KEncodingProber] SBCS: Replace unbounded array pointer with span. Commit.
- [KEncodingProber] Move sequence counter sum out of loop. Commit.
- [KEncodingProber] Test for Cyrillic encodings (and Unicode reencodings). Commit.
- [KEncodingProber] Test for ASCII only UTF-16 encoded texts. Commit.
KColorScheme
- Kcolorschemetest: explicitly cast enum values to int for arithmetic ops. Commit.
KFileMetaData
- Reenable Qt 6.12 CI. Commit.
- [PostscriptDscExtractor] Fix time offset parsing for Qt 6.12. Commit.
- [PostscriptDscExtractor] Modernize QString usage. Commit.
- [SimpleExtractionResult] Fix copy constructor. Commit.
- [EmbeddedImageData] Remove some dead, unreachable code and data. Commit.
- Fix a few nodiscard warnings for QFile::open. Commit.
- [ExtractorPlugin] Allow alias names when matching extractor mimetypes. Commit. Fixes bug #522678
- [kfilemetadata_dump] Provide information about cover images etc. Commit. See bug #500113
- [FFmpegExtractor] Extract cover image from Matroska streams. Commit. See bug #500113
- [FFmpegExtractorTest] Move test class declaration to implementation file. Commit.
KGuiAddons
- Add geo: URI handler for Cartes. Commit.
- Add support to pass along the unmodified geo: URI in an URL template. Commit.
- Fix geo: URI query string encoding. Commit.
- Reuse explicitly provided image data. Commit. Fixes bug #519651
- Waylandclipboard: Check isInterruptionRequested in prepare read loop. Commit. Fixes bug #517743
KImageformats
- Jp2: Fix new[] vs delete by not doing new[]. Commit. Fixes bug #525120
- QRoundOrZero_T: fix possible assert in qRound. Commit. Fixes bug #524678
- Autotests: Add non-standard HEIF image. Commit.
- Heif: re-enable decoding of non-standard images. Commit. Fixes bug #495686
- Add HEIC test files with crop transformation. Commit.
- Heif: check crop values. Commit.
- Jxl: Do not rewind after reading final frame. Commit.
- Rgb: reject RLE start offsets that underflow the raster data. Commit.
- Avif: Do not rewind in jumpToNextImage(). Commit.
- Ossfuzz: call functions used in animations. Commit.
KIO
- Bring KSycoca::setupTestMenu code here. Commit.
- Copyjob: name the copy lists for what they hold. Commit.
- KUrlNavigator: Set the frameShape to StyledPanel. Commit.
- KDirModel: Pass UTC time to KFormat::formatRelativeDateTime(). Commit.
- Drop duplicated explicit install() call on kio_help plugin. Commit.
- KDirSortFilterProxyModel: Avoid creating QDateTime instance. Commit.
- [ftp] Send commands in upper case consistently. Commit. Fixes bug #523927
- Autotests: Run the http worker tests as part of the suite. Commit.
- Http: Keep one network manager for the life of the worker. Commit.
- KOpenWithDialog: fix pattern matching in filterAcceptsRow(). Commit. Fixes bug #524085
- Previewjob: drop the synchronous cached-thumbnail lookups. Commit.
- Desktopexecparsertest: fix typo in installation var. Commit.
- Desktopexecparsertest: add missing quotes for a string definition argument. Commit.
- Previewjob: make the previews in the order they were asked for. Commit.
- File worker: reserve an entry for the fields it always carries. Commit.
- Kcoredirlister: let the list of items grow instead of sizing it per batch. Commit.
- Http: Keep a large request body out of memory. Commit.
- Kmountpoint: Write the Latin-1 strings as literals. Commit.
- Kmountpoint: add SupportsFileCloning for COW filesystems. Commit.
- PreviewJob: Read cached thumbnails in bounded batches before generating. Commit.
- Gui: Read and write the thumbnail cache in one place. Commit.
- PreviewJob: add cachedPreview() for a synchronous cache-only lookup. Commit.
- Kfileitemactions: test service menu submenu. Commit.
- Kfileitemactions: fix submenu lifetime using main menu as the parent. Commit. Fixes bug #524239
- Http: Report how far an upload has got, not what the answer weighs. Commit. Fixes bug #518511
- Avoid MIME content-sniffing on slow filesystems. Commit.
- Systemdprocessrunner: Handle when unit returns failure. Commit.
- Don't show percent-encoded strings for items of desktop:/ IO worker. Commit. Fixes bug #522470
- KIO: hand what a message carries over as it is within a process. Commit.
- Properties: show how much room a folder takes up, not only its data. Commit. Fixes bug #457363
- Jobtest: set the language the expected text is written in. Commit.
- Filepreviewjob: Check remote-skip conditions before checking mimetype. Commit.
- File: ask statx for the permission bits that are read from its answer. Commit.
- File: let a folder with the setgid bit give a copied file its group. Commit. Fixes bug #399270
- File worker: ask for the mount of the destination while looking at it. Commit.
- File worker: create copy destinations relative to a pinned directory fd. Commit.
- OpenURLJob: Stop reading BrowserApplication from kdeglobals. Commit.
- KMountPoint: cache mount lookups by unique mount id. Commit.
- Autotests: verify KFileCopyToMenu prunes missing recent destinations. Commit.
- Autotests: test for non_existing directories removed. Commit.
- Kfilecopytomenu: Limits max entries and removes unavailable links from the list. Commit.
- Git-blame-ignore-revs: add code reorganization commits. Commit.
- Kfileitemactions: reorder functions for better readability. Commit.
- Openurljobtest: wait for the launched processes before ending a test. Commit.
- Autotests: ask the mime database which type a test means. Commit.
- Openurljob: open a shell script rather than refuse it as a program. Commit. Fixes bug #522948
- Knewfilemenu: reorder execute functions to match the order they are called in slotActionTriggered. Commit.
- Knewfilemenu: allow overriding system templates with local templates. Commit. Fixes bug #473991
- Knewfilemenu: set application link title to not be misleading. Commit. Fixes bug #520949
- Knewfilemenu: fix relative symlinks. Commit. Fixes bug #508444
- RenameFileDialog: offer the rename operation of the last rename. Commit. Fixes bug #523932
- RenameFileDialog: free what the dialog owns. Commit.
- SlaveBase: do not take a missing total for a finished transfer. Commit.
- DeleteJob: pass on the bytes its rmdir subjob reports. Commit.
- Kio_file: delete a tree natively on unix, and report the bytes deleted. Commit.
Kirigami
- Fix typo in documentation. Commit.
- Remove wrong API documentation marker. Commit.
- Pull TODO out of API documentation. Commit.
- Fix \since syntax. Commit.
- Fix documentation syntax in ScenePosition. Commit.
- Fix documentation syntax in PagePool. Commit.
- Fix documented QML import name. Commit.
- Add missing \inherits to C++ types. Commit.
- Mark SafeArea as internal. Commit.
- Fix parameter name in documentation. Commit.
- Add missing parameter marker in documentation. Commit.
- Add missing full stops in documentation. Commit.
- Remove non-functional link. Commit.
- Remove * from QML API documentation comment. Commit.
- Qml-format InlineViewHeader. Commit.
- Qml-format LinkButton. Commit.
- Fix type name in documentation. Commit.
- Add explicit \inherits where needed. Commit.
- ColumnView: better layout for pinned items. Commit.
- ListItemDragHandle: stop the dropAnimation if one is still running. Commit. Fixes bug #517233
- InlineMessage: Use smallSpacing for the label also on its right. Commit.
- Typo--. Commit.
- SwipeListItem: add a deprecated notice. Commit.
- SwipeListItem: Don't make the content item overlap the icons. Commit. Fixes bug #518436
- Forms/flat: Fix padding calculation for subtitle. Commit.
- Flat/FormGroup: remove unused import. Commit.
- Flat/FormGroup: make spacing around headings more like FormLayout. Commit.
- Flat/FormGroup: simplify layout. Commit.
- Flat/FormGroup: make header more accurate to FormLayout. Commit.
- OverlaySheet: make the scrim darker. Commit. Fixes bug #447965
- Fix Overlaysheet touchscreen behavior. Commit.
- Drop unneeded AUTOMOC_MOC_OPTIONS. Commit.
- FormGroup(cards): fix resize loop. Commit.
- Drop explicit CMake settings duplicatd from KDECMakeSettings. Commit.
- Include KDECMakeSettings/KDEFrameworkCompilerSettings early. Commit.
- Remove duplicated KDEInstallDirs module include. Commit.
- Forms: Explicitly specify individual paddings when setting padding. Commit.
- Units::eventFilter: fix to react just to font change of app instance. Commit.
- FormEntry: make it possible to get the inner spacing. Commit.
- FormEntry: make spacing more consistent. Commit.
- Finish making GlobalDrawer.isMenu behave the same everywhere. Commit.
- ImageColors: de-flake test_extractColors. Commit.
- Kirigami app template: use PROJECT arg with ecm_setup_version(). Commit.
- FormEntry(flat): make sure the trailing area is actually fillHeight. Commit.
- Add another safety check before automatically popping hidden pages. Commit.
- FormEntry(flat) some minor fixes. Commit.
- FormEntry(flat) some minor fixes. Commit.
- FormEntry(all): rename forceExpanedContents with fullWidth. Commit.
- Form: center contents only horizontally. Commit.
- FormEntry (both): completely propagate Layout properties. Commit.
- FormEntry(cards): fix the flipping of switches. Commit.
- FormEntry (flat): reorganize the internal layout. Commit.
- FormEntry: make links inthe subtitle clickable. Commit.
- FormEntry: introduce forceExpandedContents. Commit.
- Docs: Explicitly ignore basictheme_p.h in Platform documentation. Commit.
- Docs: Suppress "can't link to index.html" warnings. Commit.
- Docs: Don't generate documentation for private types. Commit.
- Forms: Fix documentation of FormAlignmentGroup members. Commit.
- Forms: Fix documentation of FormGroup type. Commit.
- Docs: Ensure the Forms module is properly included in indices. Commit.
- Icon: Don't try to load empty fallback icons. Commit.
- Set implicitwidth at 3d gridunits only for cards layout. Commit.
- Keep the ToolBarPageFooter menu inside the SafeArea. Commit.
- Make the Page globalFooter page property a QQC2.Page type. Commit.
- Keep ToolBarPageFooter buttons inside the SafeArea. Commit.
KJobWidgets
- Kjobcreator: Fix tab order. Commit.
KNotifications
- Notificationtester: Add URL text field. Commit.
KTextEditor
- Only show bracket match preview if the view is visible. Commit.
- Vi-mode: Fix append to block for tabs. Commit.
- Vi-mode: Fix cursor column swap with tabs. Commit.
- Vi-mode: Fix operations in selection ranges with tabs. Commit.
- Vi-mode: Fix success message for non-successful save commands. Commit. Fixes bug #473077
- Vi-mode: Fix "save all" command for unnamed files. Commit.
- Fix resolution for KateVi::Range debug operator. Commit.
- Vi-mode: Implement filename registers. Commit.
- Vi-mode: Fix yank highlight for blocks with tabs. Commit.
- Vi-mode: Simplify method to detect waiting for characters. Commit.
- Vi-mode: Refactor the method for leaving insert mode. Commit.
- Vi-mode: Fix checks for setting user marks. Commit. Fixes bug #520734
KWallet
- Properly handle when the portal fails to open the wallet. Commit.
- Remove unused variable. Commit.
- Remove some default function args. Commit.
- Ksecretd: Remove unused method parameters. Commit.
- Remove leftovers from KSecretsService. Commit.
- Ksecretd: Remove unused sessionTimeout parameter from pamOpen. Commit.
- Ksecretd: Remove wrong comment. Commit.
- Remove unused WId parameter from sync(). Commit.
- Drop KSecretD::sync. Commit.
- Ksecretd: Fix Completed argument when dismissing collection creation. Commit.
- Ksecretd: Drop appId. Commit.
- Drop defunct Leave Open option from kcfg. Commit.
- Ksecretd: Remove unused force parameter from internalClose(). Commit.
- Ksecretd: Drop CloseCancelled handling. Commit.
- Remove unneeded KSecretD::networkWallet. Commit.
- Drop unneeded KSecretD::doCloseSignals. Commit.
- Ksecretd: Drop unused walletOpened signal. Commit.
- Ksecretd: Make sure collection is reported as unlocked after PAM unlock. Commit. See bug #459287
- Ksecretd: Make parameter names consistent. Commit.
- Ksecretd: Drop unneeded intermediate function. Commit.
- Drop long-time commented out code. Commit.
- Add missing KWALLET_BUILD_DEPRECATED_SINCE in cpp file. Commit.
- Add desktop file for kwalletd. Commit.
- Run clang-format. Commit.
- Drop dead CMake code for tests. Commit.
- Deprecate Wallet::requestChangePassword(). Commit.
- Deprecate Wallet::lockWallet(). Commit.
- Deprecate Wallet::sync(). Commit.
- Ksecretd: Remove unused force parameter from close(). Commit.
- Ksecretd: Drop KWalletSessionStore. Commit.
- Drop unused handleSession from ksecretd. Commit.
- Drop Close When Idle handling from kwalletd. Commit. Fixes bug #524500
- Propagate locked status from backend to kwalletd. Commit.
- Add formatting commit to ignore list. Commit.
- Drop isPath handling. Commit.
- Drop unused function. Commit.
- Fix logic errors in internalOpen. Commit. Fixes bug #524373. Fixes bug #524592
- Autotests: fix dependency version var name. Commit.
- Fix memory leaks in kwalletd. Commit.
- Add Leave Manager Open to kcfg file. Commit.
- Export kcfg file in CMake config. Commit.
- Drop pseudo access control for wallet. Commit.
KWindowSystem
- Remove outdated & unused CMakeFindFrameworks include. Commit.
Oxygen Icons
- Fixes. Commit.
- More fixes. Commit.
- Bug fixing. Commit.
- Missing icon sizes. Commit.
- Minor bug fix. Commit.
- Add go-parent-folder icons for Bug 524878. Commit.
- Minor fix i hope to a rendering bug. Commit.
- Another derivative icon. Commit.
- More bug fixing. Commit.
- Bug fixing. Commit.
- New size and clean up, the symbolic needs to point to point to a correct version of the icons for how its used in plasma, renaming on the applet to the correct linked version would be more optimal IMO. Commit.
- Miss commit fix. Commit.
- New icon for KDebugSettings. Commit.
- Small improvements. Commit.
- More sizes. Commit.
- Just for testing. Commit.
- Aparently forgot to submit the source svg. Commit.
- 32X32 AND 22X22 OF KTIMER ICON VERSIONS. Commit.
- Improvement in visibility. Commit.
- New icon. Commit.
- Renaming. Commit.
- Missed an icon raster. Commit.
- Fixing a bug and removing the faoux backlight. Commit.
- New ktimer icon still missing the small sizes. Commit.
Syntax Highlighting
- Add DotEnv syntax highlighting. Commit.
- Repository.h: Make Repository::eventFilter() protected. Commit.
- Syntax/yaml.xml: Have BuildStream files use the yaml highlighter. Commit.
- Associate .envrc files with Bash. Commit.
- Add KDL syntax highlighting. Commit.
- Add Just syntax highlighting. Commit.
- Initialize more cmake variables explicitly. Commit.
09 Sep 2026 12:00am GMT
08 Sep 2026
Planet KDE | English
Updates for Plasma Software Engineer & plasma-keyboard
Its been a minute since my last posts when I went over plasma-keyboard and its new diacritics feature, and the mega-sprint in Graz.
Overview
I've been busy with a whole lot of things, but here's a brief highlight:
- Tons of bugfixes for plasma-keyboard and the diacritics feature after some distros set plasma-keyboard to be on by default. This unexpected new batch of testers found a host of bugs that warranted a bunch of frenetic bugfixing after the launch of Plasma 6.7; thankfully these were successful and the flow of bug reports slowed
- Improved the plasma-keyboard documentation for new contributors
- Added a bunch of unit tests for plasma-keyboard; a few months ago we had 0% test coverage and now we have 57% of C++ code covered by tests (would prefer it higher, but progress!)
- Added apidox to some difficult kwin code
- plasma-setup maintenance (we've had new contributors 🎉, bugs, proposals, etc)
- In relation to the STF grant to KDE, I've been doing technical review on behalf of the e.V. for all the changes being done (spoiler alert: a massive amount of amazing work has been/is being done!)
- A whole bunch of gardening, reviews, bug triage/fixing, etc - not so much of the fun stuff I would like such as the new plasma-keyboard features I have planned, but important work that has been needful
- Fixed the OSK (on-screen keyboard) button on the lock screen, and added a matching one to plasma-login-manager
- Hopefully being merged in time for 6.8: redesigned/fixed up system tray applet for plasma-keyboard
ci-healthcheck
I created a utility to check the health of KDE CI along with a web dashboard to visualize the results, and began making weekly updates on the state of all Plasma's CI health on the mailing list.

In the beginning we regularly had a dozen or more repos with CI failing on master, dozens of repos whose CI hadn't been run in months or in a few cases years, and 14% of repos configured to report failing tests in the MR view.
Now we usually never have more than 1 or 2 repo with failing CI in master any given week and even had a few weeks in a row with no failing CI, every Plasma repo runs its CI against master at least once a week to catch issues, and fully 94% of Plasma repos are configured to report failing tests in the MR view.
I consider this a massive success! 🎉🎉🎉
Still more that can be done to improve the reports and CI health, but kudos to everyone for helping trim the fat and keep our software stack healthy and reliable! 🍪
plasma-morekeys
There have been requests for plasma-keyboard to support full-sized keyboard layouts, however there has been debate about if that is appropriate to have in plasma-keyboard; such a feature seems like it would be rather niche, while adding a fair amount of complexity and maintenance burden.
Full-sized layouts wouldn't add any benefit for the vast majority of users who want a way to type in a search, a text message, etc - it seems like a much rarer user who would want to perform desktop keyboard shortcuts, use vim in a terminal, change tty from their OSK instead of a real keyboard, etc.
The super talented Aleix created plasma-morekeys as a solution for those who want a full keyboard layout that simply emulates a real keyboard and can do all of the above mentioned things like keyboard shortcuts, and more.

This is intended as a test; it was put together quickly so those who need this feature can try it and provide feedback. If it proves successful then we can transition it to an official project, perhaps provide integration with plasma-keyboard to make choosing/using it seamless.
If you are one of the people with interest in a full-size keyboard layout for your OSK, please give it a try:
- Install the plasma-morekeys flatpak (consider this alpha software!):
curl -L -o /tmp/plasma-morekeys.flatpak "https://nextcloud.merritt.codes/s/x4gqrs596NPYarF/download" && flatpak install --user --or-update --bundle /tmp/plasma-morekeys.flatpak
- Test out how it works for your usecases
- If you encounter bugs or find it isn't quite working how you require, report it and tell us what's wrong and what your usecase is so we can try and address it
Akademy
Its just over a week until Akademy!! I'm looking forward to seeing a whole bunch of my KDE family again in Graz, and the chance to get some important work done together.
I have a bit of face blindness, so please don't be offended if I can't recognize everyone on sight! (I often rely on other cues like mannerisms, hair style, voice, etc)
I will try my best to be outgoing, but if I come across as a very anxious wallflower please know that I am friendly and super happy to see you all, and I appreciate the social butterflies pulling me into the mix! 😆
See you soon! 👋👋👋
08 Sep 2026 12:00am GMT
KDE Plasma 6.7.5, Bugfix Release for September
Today KDE releases a bugfix update to KDE Plasma 6, versioned 6.7.5.
Plasma 6.7 was released in June 2026 with many feature refinements and new modules to complete the desktop experience.
This release adds a month's worth of new translations and fixes from KDE's contributors. The bugfixes are typically small but important and include:
08 Sep 2026 12:00am GMT
OOOOO and OBVIUSLY if you want our sort of Crazy JOIN us in Oxygen, or KDE or anything