During FOSDEM this year, I met a group of very cool people that put together events about Open Source Design. They invited me to participate this year.
The topic was similar to my talk during FOSDEM, but with a twist on the soft skills needed to complete the creation of a new design system for Plasma.
The conference is only one day. Something really cool they did was to have something like BoF (Birds of a Feather) sessions during the afternoon slot before my talk. We had the opportunity to discuss important aspects proposed by the attendees around design and making your way into the field.
Germany, Berlin. FOSS Backstage Design 2026 – Community, Management and Compliance. 18.03.2026 Photo Jan Michalko
Since I was representing KDE in this project, I brought my newly-acquired tshirt from FOSDEM!
The experience was great. Everyone was awesome and even met up with new contributors to the VDG. Comments from after my talk were very positive and I look forward to participating in even more events of this nature.
Design System Update
At this time, the design system keeps evolving. I have gone back to rework some application icons. After reviewing the current designs and consulting with team members, the consensus is that they should be simpler, more approachable. I have made some concepts that I will keep exploring going forward.
Additional to that, new tokens have been created. We now have shadow tokens, and I have applied them to all the components that I can think of. They have replaced manually-created shadows from the previous time.
Radius and spacing tokens now need to also make their way into the components. Unfortunately, Penpot is struggling today on creating new tokens. I will wait for an update. However, the work involves going through out component buttons and applying foundational spacing tokens to the sides and inner spaces for the components.
While this might be long, it is easy. The spacing numbers are already in the component. My part is to create all the spacing components, locate the margin or padding number I see today in buttons, find the base component, and apply the spacing tokens.
I am also closely following up on Penpot’s new beta, hopefully coming out soon, with their new rendering engine.
I have also connected the Penpot team with our LAS (Linux App Summit) event and hopefully they can attend.
More to come!
If you’re interested in participating in this effort and have some awesome design and integration skills, join us!
https://matrix.to/#/#visualdesigngroup:kde.org
Welcome to a new issue of This Week in Plasma!
This week several new features landed, in addition to a number of user interface improvements and some nice performance improvements and bug fixes. Check ‘em out:
Notable new features
Plasma 6.7
For each additional time zone you add to the Digital Clock widget, it now also shows how far forward or behind that time zone is compared to yours. (Nate Graham, plasma-workspace MR #6417)
After
Before
If you disable the feature to invoke KRunner by typing on the desktop, instead typing on the desktop invokes “type-ahead”, which allows selecting files by typing the first letter or two of their names. (Guillermo Steren, KDE Bugzilla #427961)
You can now reverse the ordering of items in the System Tray widget. (Nathaniel Krebs, KDE Bugzilla #517016)
Notable UI improvements
Plasma 6.7
Discover now sorts app lists by number of reviews by default, resulting in vastly more relevant results while browsing rather than searching. The old rating-based sorting method is still available, of course. (Nate Graham, discover MR #1274)
After
Before
Discover now filters out non-apps from its home page, preventing death spirals of negativity where people would leave 1-star reviews saying they were broken (not being launchable apps, the “Launch” button wouldn’t work), causing them to move up higher in the list. (Nate Graham, discover MR #1287)
System Settings and KWin now consistently use the word “pointer” to refer to the mouse/touchpad pointer. (Philipp Kiemle, plasma-workspace MR #6425 and kwin MR #8982)
Screen un-dimming is now faster than dimming, since un-dimming would mean you’re ready to use the system again. (Kai Uwe Broulik, kwin MR #8963)
The currently-active task in a grouped task tooltip now has bold text, to help you pick it out. (Christoph Wolk, KDE Bugzilla #516278)
Labels for Bluetooth devices in the System Tray widget have been re-arranged so that you can always see the battery level no matter how long the device name is. (Kai Uwe Broulik, KDE Bugzilla #515090)
The Global Menu widget’s menu highlights are now rounded consistently with the highlights for other menus. (Akseli Lahtinen, libplasma MR #1459)
You can now set a modifier key all on its own to focus a Plasma panel. (Christoph Wolk, plasma-desktop MR #3547)
Plasma’s panel configuration window now only offers opacity settings if the active Plasma style supports it. (Filip Fila, KDE Bugzilla #516042)
Notable bug fixes
Plasma 6.5.6
Fixed a bug that distorted the image on certain vertically-oriented monitors while displaying the Plasma Login Manager. (Anton Gobulev, KDE Bugzilla #517409)
Plasma 6.6.3
Fixed a case where KWin could crash after changing the Zoom effect’s settings in certain specific ways. (Ritchie Frodomar, KDE Bugzilla #517073)
Fixed two cases where KWin could crash when misconfigured or given broken content. (Nicolas Fella, KDE Bugzilla #517137 and KDE Bugzilla #517711)
Fixed a few cases where KDE’s printing management system could crash due to faulty information from printers about their ink levels. (Mike Noe, print-manager MR #311)
The tooltip for the Refresh button in Discover’s Updates section no longer says “F5 (QQuickShortcut(gobbledygook))”, fixing an unexpected side-effect of a recent KDE Frameworks update. (Akseli Lahtinen, KDE Bugzilla #516392)
Plasma 6.6.4
Fixed an issue that made the “bounce keys” accessibility feature break key repeat in the Brave browser. (Ritchie Frodomar, KDE Bugzilla #513268)
In the shortcut conflict dialog opened by System Settings’ Shortcuts page, the “Re-assign” action now works. (Dávid Bácskay-Nagy, KDE Bugzilla #471370)
Made the update count in Discover’s notifications more accurate. (Akseli Lahtinen, discover MR #1284)
Frameworks 6.25
Reverted an innocent-looking change that broke icons for some apps like OBS and Ungoogled Chromium due to an underlying deficiency in the Qt toolkit’s SVG renderer. (Nate Graham, KDE Bugzilla #516007)
Notable in performance & technical
Plasma 6.6.4
Reduced CPU and GPU load for full-screen windows (also known as “direct scan-out”) on screens without the pointer on them. (Xaver Hugl, KDE Bugzilla #516808)
Plasma 6.7
Added support for “3D LUTs” in KWin, which reduces resource usage on GPUs that support color pipelines in hardware. (Xaver Hugl, kwin MR #8475)
The Networks widget now only fetches network speed information while that information is visible. (Ser Freedman, plasma-nm MR #544)
Stopped creating unnecessary OpenGL contexts for apps that don’t use OpenGL, which reduces their memory usage by 10-15 MB or more per app and also speeds up launch times. (Vlad Zahorodnii, plasma-integration MR #209)
Qt 6.10.3
Fixed an issue that broke HDR support while using the Vulkan renderer on certain hardware. (Joshua Goins, Qt patch #711621)
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.
Let’s go for my web review for the week 2026-12.
The “small web” is bigger than you might think
Tags: tech, web, self-hosting, blog
Also, it’s likely a pessimistic estimate… Indeed, it’s mostly based on a list from Kagi, which likely doesn’t list many sites which would qualify.
https://kevinboone.me/small_web_is_big.html
Have a Fucking Website
Tags: tech, web, social-media, self-hosting
So much this… I’m sick of all those little businesses having only an Instagram or Facebook account or whatever. I wish we’d have proper websites for all of those instead.
https://www.otherstrangeness.com/2026/03/14/have-a-fucking-website/
RIP Metaverse, an $80 Billion Dumpster Fire Nobody Wanted
Tags: tech, facebook, vr, hype
This was stupid hype… Why do we have regularly this kind of fever in our industry?
https://www.404media.co/rip-metaverse-an-80-billion-dumpster-fire-nobody-wanted/
Bluesky announces $100M Series B after CEO transition
Tags: tech, social-media, bluesky, business
The writing is on the wall I think… the real question is not if but when will the enshittification begins? It’s been data harvesting for a while now.
https://techcrunch.com/2026/03/19/bluesky-announces-100m-series-b-after-ceo-transition/
Open Source Gave Me Everything Until I Had Nothing Left to Give
Tags: tech, foss, psychology, productivity, life
This is an account of how dark things can become when you align your identity with your contributions. Stay healthy, stay safe!
https://kennethreitz.org/essays/2026-03-18-open_source_gave_me_everything_until_i_had_nothing_left_to_give
How Can Governments Pay Open Source Maintainers?
Tags: tech, foss, business, fundraising
Let’s help them help us. There are a few things to have in place for governments to be able to pay maintainers.
https://shkspr.mobi/blog/2026/03/how-can-governments-pay-open-source-maintainers/
The price of accountability: corruption erodes social trust more in democracies than in autocracies
Tags: politics, democracy
This is definitely a disturbing result. It indeed makes democracies more fragile, all the more reason to build more democratic resilience.
https://www.frontiersin.org/journals/political-science/articles/10.3389/fpos.2026.1779810/full
Age Verification Lobbying: Dark Money, Model Legislation & Institutional Capture
Tags: tech, gafam, facebook, law, lobbying, surveillance
It looks more and more likely that the current age verification fever has dark origins…
https://tboteproject.com/
Rep. Finke Was Right: Age-Gating Isn’t About Kids, It’s About Control
Tags: tech, politics, law, surveillance
The commentaries and analysis of those unjust laws continues. The motives behind the people pushing for them are getting clearer and it isn’t pretty.
https://www.eff.org/deeplinks/2026/03/rep-finke-was-right-age-gating-isnt-about-kids-its-about-control
Ageless Linux — Software for Humans of Indeterminate Age
Tags: tech, law, surveillance
Good initiative to push these unjust laws to their limits. Hopefully it’ll show how absurd they are.
https://agelesslinux.org/
Lotus Notes
Tags: tech, history, email
On the little known history of Lotus Notes. Crossed its path as a teenager during an internship at a bank. Can’t say I remember it fondly though.
https://computer.rip/2026-03-14-lotusnotes.html
The Most Important Software Innovations
Tags: tech, innovation, history
Interesting list and way to frame the problem. It’s important to maintain this resource, an update is likely needed.
https://dwheeler.com/innovation/innovation.html
Wayland has good reasons to put the window manager in the display server
Tags: tech, wayland, x11, history, complexity, input
Let’s not forget where we’re coming from and why window managers tend to be merged with display server. It removes some complexity and some latency.
https://utcc.utoronto.ca/~cks/space/blog/unix/WaylandAndBuiltinWindowManagers
Containers Are Not Automatically Secure
Tags: tech, containers, security
Kind of obvious I think, but this likely bears repeating. Containers are not a magical recipe for security. There are many attack vectors to keep in mind and evaluate.
https://www.lucavall.in/blog/containers-are-not-a-security-boundary
Why WebAssembly components
Tags: tech, webassembly, rust
Good explanation of where WebAssembly is going and why the current initiatives are important to its success.
https://blog.yoshuawuyts.com/why-webassembly-components/
How many branches can your CPU predict?
Tags: tech, cpu, hardware, performance
Not all CPUs are born equal in term of branch prediction. Interesting little benchmark.
https://lemire.me/blog/2026/03/18/how-many-branches-can-your-cpu-predict/
C++26: Span improvements
Tags: tech, c++, standard
Nice little quality of life improvements coming to std::span in C++26.
https://www.sandordargo.com/blog/2026/03/18/cpp26-span-improvements
More Speed & Simplicity: Practical Data-Oriented Design in C++
Tags: tech, data-oriented, object-oriented, design, architecture, c++, performance
A very good talk which walks you through how to move from object-oriented design to data-oriented design. Shows quite well how you must shift your thinking and the difficulties you might encounter with data-oriented designs. I appreciate a lot that it’s not just throwing object-oriented design out of the window, indeed you have to pick and choose depending on the problem space. Also it’s interesting to see how C++26 reflection might make some of this easier.
https://www.youtube.com/watch?v=SzjJfKHygaQ
Minecraft Source Code is Interesting!
Tags: tech, 3d, graphics, game, portability, refactoring
Lots of interesting tricks in this code base. Gives also a good idea of the shape and tradeoffs of such ports.
https://www.karanjanthe.me/posts/minecraft-source/
Oxyde ORM
Tags: tech, python, rust, orm
Looks like an interesting ORM which brings advantages of the Django one without all the bagage. It’s still young, let’s see how it evolves.
https://oxyde.fatalyst.dev/latest/
Python 3.15’s JIT is now back on track
Tags: tech, python, performance, jit
Interesting read on how the CPython JIT effort has been saved.
https://fidget-spinner.github.io/posts/jit-on-track.html
The Optimization Ladder
Tags: tech, python, performance, optimisation
Here are the main levers to make Python code faster. Tries also to distinguish the effort level of each approach.
https://cemrehancavdar.com/2026/03/10/optimization-ladder/
XML is a Cheap DSL
Tags: tech, data, declarative, xml, portability
Interesting lesson here. It looks like XML still has its place in our modern tool belts. We should stop dismissing it too quickly.
https://unplannedobsolescence.com/blog/xml-cheap-dsl/
JPEG compression
Tags: tech, graphics, compression
Wondering how JPEG works? Here is a primer.
https://www.sophielwang.com/blog/jpeg
A Decade of Slug
Tags: tech, graphics, fonts, shader, patents
Nice algorithm for rendering fonts. Turns out it’s not patent encumbered anymore, this is good news.
https://terathon.com/blog/decade-slug.html
Video Encoding and Decoding with Vulkan Compute Shaders in FFmpeg
Tags: tech, video, codec, vulkan, computation
Vulkan compute shaders are very much capable nowadays. Exemplified by its use in FFmpeg.
https://www.khronos.org/blog/video-encoding-and-decoding-with-vulkan-compute-shaders-in-ffmpeg
The Best Darn Grid Shader (Yet)
Tags: tech, 3d, graphics, shader, mathematics
Good exploration on how to make grid shaders. It’s definitely not a simple problem.
https://bgolus.medium.com/the-best-darn-grid-shader-yet-727f9278b9d8
A sufficiently detailed spec is code
Tags: tech, ai, machine-learning, copilot
Or why this latest trend in genAI hype is a fool’s errand.
https://haskellforall.com/2026/03/a-sufficiently-detailed-spec-is-code
Rob Pike’s 5 Rules of Programming
Tags: tech, programming, optimisation, performance, complexity
These are good rules. Take inspiration from them.
https://www.cs.unc.edu/~stotts/COMP590-059-f24/robsrules.html
Invest Your Political Capital
Tags: tech, architecture, organisation, politics
Interesting model for bringing architectural and organisational changes. This is indeed at least in part political games… so you need some political capital to spend.
https://architectelevator.com/transformation/political-capital/
Bye for now!
Last week we released version 1.5 of Marknote, a fast and free
alternative to existing slow and pay-walled note-taking apps. Today we announce a release that fixes some issues and improves a few things across the app.
So here is a list of the most notable changes and improvements:
Pasting text in Source mode no longer clears document content.
Pasting images from clipboard works really well too.
Find and replace text shortcuts are brought back.
Note names are now properly elided.
Markdown syntax highlighter is added to the Source mode.
Code blocks now have their own background.
Items in the Table of Contents will follow active paragraphs.
Edit button is shown in compact mode (for when the format bar is hidden).
Fullscreen mode is brought back for those who need full immersion
(Ctrl+Shift+F on Linux or Alt+Enter on Windows).
The KRunner plugin now works pretty well inside Flatpak.
Single note loading is much faster now.
We optimized image loading and reduced video memory usage by almost
50%.
The future is bright
To address some of the questions since the last release:
Yes, code blocks will have proper highlighting in upcoming versions (please
keep in mind that we don't have the staff of a large enterprise company, and
we probably don't need one either ;)).
Yes again, quotes and some embedded content types are planned to be added too.
Yes once more, cross-platform support is set to be improved. We will release
stable versions for all the major platforms once they get through proper
testing.
And one more thing: the all-new and shiny block editor is a work in progress,
and it will be done when it's done™.
Thank you all
Thanks to everyone for making Marknote your software of choice. We will make sure to keep Marknote up and running at lightning speed for everyone. As always, you can get the latest version of the app via Flatpak, Snapcraft or your favorite package manager. Stay tuned!
The second and third betas for Krita 5.3.0/6.0.0 have been released, with the final release drawing near. There was also a hotfix stable release, 5.2.16, to fix a regression causing problems with HEIF files.
Read on for a look at development news and the Krita-Artists forum's featured artwork from last month.
Development Report
5.2.16 Hotfix Release
This release contains exactly two regression fixes: some HEIF files not loading properly (bug), and the Move Tool movement shortcuts not working until clicking the canvas (bug).
If you're encountering either issue, update to 5.2.16.
Manual Updated Ahead of Release
The Krita Manual has been updated with all the new features in 5.3.0, thanks to the efforts of manual writer Wolthera and others.
Having trouble figuring something out? The friendly documentation is there to guide you in multiple languages, thanks to the ongoing work of all the translators!
Second and Third Betas for 5.3.0/6.0.0 Released
The second beta and third beta for 5.3.0/6.0.0 were released, with many bug-fixes and a look at the new splash screen artwork by Tyson Tan.
Thanks to everyone who tested! The beta period is at an end with the final release right around the corner, but you can keep testing the latest nightly builds (found at the bottom of this post), and keep reporting bugs!
Fixes in Beta 2
Zoom In/Out to Cursor is the default canvas input zoom again, and Zoom In/Out to Center is the alternatively configurable action. (bug; change by Carsten)
Qt6 Fixes
Some Krita 6 bugs were caused using an outdated version of Qt6. As updating Qt would cause too many issues before the final release, Dmitry backported the fixes to our version.
On Windows, Krita won't crash when news is enabled (bug; change) and menus won't instantly close when using a stylus with WinTab (bug 1, bug 2; change).
On Linux with Wayland, issues with incorrect stylus cursor position (bug 1, bug 2; change 1, change 2), wrong cursor shape (change), and shortcut keys being auto-repeated (bug; change) are fixed.
The Help menu's Report Bug item is back, so don't be shy to report bugs! (bug; change by Luna)
Fixes in Beta 3
File Layers now allow Inherit Alpha and Layer Styles (change), .kra files used as File Layers now use their color profiles (bug; change), and renaming File, Filter, and Generator Layers is now undoable (bug; change), all thanks to Dmitry.
Agata fixed some regressions. Tools that auto-scroll when dragged to the edge of the canvas, such as the Selection tools, no longer scroll too much when zoomed in (bug change); Liquify Transform Masks no longer appear different than before (bug; change), plus the new Comics Panel Editing Tool no longer affects text (rather than turning characters into blocks) (bug; change)
On Android, a saving issue where the file is claimed to be unwritable was fixed by Carsten (change).
On Linux with X11/XWayland, there have been reports of Krita 6 running at a low framerate. The fix for this is to switch the OpenGL interface from GLX to EGL. This switch needs testing, so please read the EGL backend testing thread on how to do that and leave some feedback on whether it works or not.
Fixes in the Upcoming Final Release
Crashes were fixed when making a new vector layer after switching to a session (bug; change by Wolthera), converting the only layer of a group into a selection mask (bug; change by Dmitry), or on startup after removing a bundle containing tags. (change by Carsten)
More issues loading and saving HEIF images were fixed (bug; change 1, change 2 by Dmitry).
The Selection Actions Bar was fixed by Luna and Carsten to work with stylus or touch again, and have the right colors. (change 1, change 2; change 3)
More fixes to the Comic Panel Editing Tool by Agata (change): Only cut shapes the cut goes all the way through. Remove shapes that are small enough to be inside the cut gap. Work properly when using Shift for a straight line and putting the cursor on the end of the line. Don't add to the undo stack when nothing happened. The buttons and options have explanatory tooltips now (CCbug; change 1, change 2).
Krita 6 no longer crashes when loading window layouts. (bug; change by Gregg Jansen van Vuren)
On Linux with Wayland, pasting images with multiple sources in the clipboard no longer crashes. (bug; change by Luna)
Krita 6 on Windows no longer crashes when trying to open the background color selector. (bug; change by Dmitry)
A regression in beta 3 that broke translations on Android and Krita 6 has been fixed by Carsten and Freya (bug; change 1, change 2).
Missing translations in Krita 6 were fixed by Dmitry and Ivan (change 1, change 2).
Translations for some standard menu items such as 'New File' or 'About Krita' were also fixed for all versions. (bug; change by Dmitry)
The G'MIC plugin has been updated by Ivan to version 3.7.2 (change) and a crash when using the 'Layers Blend [Seamless]' filter was also fixed by Carsten (bug, change).
Text
The usual plethora of text fixes by Wolthera:
In the Text Properties Docker, Line Height property is now visible by default (change) and the dropdowns are touch-scrollable (change by Carsten). The Style Presets preview now shows properly in paragraph mode (bug; change).
The Text Tool won't modify hidden or locked layers (bug; change). Rendering issues when undoing/redoing text modifications have been fixed (bug; change 1, change 2).
Text-on-path now works properly with RTL and end-anchors (change). Gradients are properly positioned on text-in-shape (change), and flow-text-in-shape only happens for filled shapes (change). Text-on-path can't also be inside a shape (bug; change).
Instead of crashing when loading a font on startup fails, a fallback font is loaded (bug; change). Try harder to load some fonts (CCbug; change 1, change 2).
And Even More!
If that wasn't enough bugfixes for you, there's even more listed in the "Additional Changes" section near the bottom of this post.
Roadmap Revealed
The next major release is almost here! But the work to improve Krita never ends, so the development team got together to decide their next priorities.
Read the 2026 Krita Roadmap post to find out what problems the team wants to address after 5.3/6.0.
Community Report
February 2026 Monthly Art Challenge Results
The winner of the "Alien World Building" challenge is…
Birth in the Depths by Rhea_Asma
Join This Month's Art Challenge!
For March's theme, last month's winner has chosen "An unforgettable scene – 5 seconds before". Maybe you've got an artwork just waiting to happen?
Featured Artwork
This month's featured forum artwork, as voted in the Best of Krita-Artists - January/February 2026:
Skeleton and Cat by ShangZhou0
Pennywise Fan-art by Devin_Lopez
We are going to have to defend it with machete by Joseiby_Tapia
Why.. So.. Serious? by TBs_thename
Bad opal by Sineater
Nominate and Vote For Next Month's Featured Artwork!
Participate in next month's nominations and voting to voice your opinion on the Best of Krita-Artists - February/March 2026.
Krita is Free - But You Can Contribute!
Krita is free to use and modify, but it can only exist with the contributions of the community. A small sponsored team alongside volunteer programmers, artists, writers, testers, translators, and more from across the world keep development going.
If this software has value to you, consider donating to the Krita Development Fund. Or Get Involved and put your skills to use making Krita and its community better!
Additional Changes
5.3.0/6.0.0 Beta 2 (Stable pre-release):
Freehand Brush Tool: Properly remember Stabilizer sample count values. (bug; change by Dmitry Kazakov)
Dockers: Palette: Don't scroll the palette view when the foreground color changes with select nearest palette color on. (change by Carsten Hartenfels)
Android: Fix the UI font being too big with the Enable HiDPI setting disabled. (bug; change by Carsten Hartenfels)
Android: Fix the Add Style Preset dialog being a white box. (bug; change by Carsten Hartenfels)
Android: Go back to the previous way of working around the window not updating when first opening an image. (bug; change by Carsten Hartenfels)
Linux Wayland: Fix a crash when running with --nosplash. (change by Dmitry Kazakov)
Python Plugins: Batch Exporter: Fix script error when exporting. (bug; change by Freya Lupen)
Qt6: Fix line-edits having an unreadable placeholder text color. (bug; change by Freya Lupen)
Qt6 macOS: Fix the SVG Text Editor's background always using macOS style. (change by Freya Lupen)
5.3.0/6.0.0 Beta 3 (Stable pre-release):
Selection Tools: Improve Selection Actions Bar. Switch between light and dark icons. Show the cursor when hovering over it. (change by Luna Lovecraft)
Text Tool: Make sure text selection highlight is synced to changes. (bug; change by Wolthera van Hövell)
Text Tool: Fix double ends being drawn in type setting mode. (change by Wolthera van Hövell)
Text: Avoid crash by testing bounds for cursor pos. (change by Wolthera van Hövell)
Type Setting Mode: Don't maintain pos when there's no selection. (change by Wolthera van Hövell)
File Formats: PNG: Fix the 'Assume sRGB' setting to actually use sRGB for PNG images without a color profile. (bug; change by Dmitry Kazakov)
Input Profiles: Bind mouse button 6 to Eraser Mode in the Krita Default input profile and Eraser Preset in the other default profiles. Bind middle-click on Android to mouse button 6. (change 1 change 2 by Carsten Hartenfels)
Bundle Creator: Fix thumbnails of selected resources to not be blank in thumbnails view mode. (bug; change by Dmitry Kazakov)
Plugins: Workflow Buttons: Fix settings button not being visible. (bug; change by Timothée Giet)
Scripting: Avoid crashing if another version of PyQt is on Python's search path, by removing its containing folder (which may contain other modules) from the search path. This also adds a new script function, 'pykrita.qt_major_version()'. (bug; change by Freya Lupen)
Qt6 Dockers: Specific Color Selector: Fix saturation and value/lightness not updating in HSV/HSL mode. (bug; change by Freya Lupen)
Linux Wayland: Fix deploying Wayland client-side-decoration (change by Dmitry Kazakov)
Linux Wayland: Fix error when opening Settings on compositors without the 'wp_color_manager_v1' extension. (change by Luna Lovecraft)
Linux: Make sure Dr.Konqi has a bugreport address (bug; change by Dmitry Kazakov)
Linux Wayland: Fix the Pop-up Palette's docker config dialog not appearing. (bug; change by Luna Lovecraft)
Krita Plus (Stable, 5.3.0/6.0.0):
Tools: Make non-mouse multi-clicks in tools such as Crop and Polyline work. (bug 1, bug 2; change by Carsten Hartenfels)
Freehand Brush Tool: Improve Pixel Smoothing mode and fix it to work with sensor dynamics. (change by Carsten Hartenfels)
Brush Engines: Fix brush speed lurching. (bug; change by Carsten Hartenfels)
Crop Tool: Show negative coordinates in grow mode, snap to the canvas bounds when not in grow mode. (change by Luna Lovecraft)
Comics Panel Editing Tool: Fix the last edge being missing when merging shapes by removing a gutter. (change, by Agata Cacko)
Pasting: Fix missing colorspace with Paste into New Image with a selection. (bug; change by Luna Lovecraft)
Layer Stack: When switching to a mask with a shortcut, show its name in the floating message instead of its parent layer's. (bug; change by Dmitry Kazakov)
Resources: Fix being able to save resources that are inside a subfolder into a document. (bug; change by Dmitry Kazakov)
Palettes: Save modifications to palettes saved in documents. (change by Mike Will)
Palettes: Make the 'Default' palette the default in the FG/BG color selector. (bug; change by Dmitry Kazakov)
Touch Input: Don't touch paint when multiple fingers were down. (bug; change by Carsten Hartenfels)
Touch Input: Disable pointless long-press on the FG/BG color selector. (change by Carsten Hartenfels)
Text Properties Docker: Fix right-clicking slider-spinboxes selecting the text label instead of only the value. (bug; change by Luna Lovecraft)
General: Speed up start-up by making the Text Properties Docker load color theme faster. (change by Carsten Hartenfels)
Krita Next (Unstable, 5.4.0/6.1.0-prealpha):
Pop-up Palette: Add option to not rotate the triangular color selector; 'Settings->Pop-up Palette->Fix sRGB Triangle Selector Rotation'. (change by Dat Le)
Scripting: Add brushFade get/set to the View class. (change by Aqaao Aqaao)
Toolbox Docker: Add horizontal layout and compact mode (remove separators) options to the context menu. (change by Mike Will)
Nightly Builds
These pre-release versions of Krita are built every day.
Note that there are currently no Qt6 builds for Android.
Test out the upcoming Stable release in Krita Plus (5.3.0/6.0.0-prealpha): Linux Qt6 Qt5 — Windows Qt6 Qt5 — macOS Qt6 Qt5 — Android arm64 Qt5 – Android arm32 Qt5 – Android x86_64 Qt5
Or test out the latest Experimental features in Krita Next (5.4.0/6.1.0-prealpha). Feedback and bug reports are appreciated!: Linux Qt6 Qt5 — Windows Qt6 Qt5 — macOS Qt6 Qt5 — Android arm64 Qt5 – Android arm32 Qt5 – Android x86_64 Qt5
Bind QML Values across an Arbitrary Number of Elements
A while back I was writing a program that could instantiate an arbitrary number of windows containing controls synchronized across them. How a control would be synchronized would depend on a condition that determined which window instances would be linked to other instances. There are a few ways this could be implemented. In this entry I'll share my approach, in which I used a singleton C++ class serving as a message broker to bind properties across window instances.
Properties bound across multiple instances of a window
The App: Display to Light PanelsThe software I wrote this for is a small app that allows you to have many windows open, all synchronized to display a single color on a per-monitor basis. The idea behind this is for users to adjust the light that comes off their monitors and use it to illuminate their faces when recording a video or taking pictures. By having individual windows be synchronized, users can continue to interact with the computer through their displays (rather inconveniently), while simultaneously using them to illuminate themselves.This is, by no means, a replacement for a proper recording setup. Some of you will know that a light source placed in front of the subject can serve as either a nice "fill light" or a "scary spotlight", depending on the height and size of the source. Therefore, this should be complemented with other sources of light; ideally ambient light and a top light, to achieve a nice look. If the app seems useful to you, there's a link to it at the end of this article. That's enough gaffer speak for today. Let's talk about the code.The CodeWhen writing code, one of my main concerns is always long-term maintainability. For that reason, I prefer to connect different parts of code in explicit, and easy to follow ways. One of such ways is passing values through a hierarchy of components; that is generally easy to track and produces well performing code. However, that approach can become unviable when connecting dynamically instantiated items to other dynamically instantiated items. A better solution in this instance is to use signals and slots to interconnect the items via a message broker class, done in C++. Each item would have a model or backend class in C++ and those classes would have the message broker in common. Lastly, the properties would be exposed to QML through Q_PROPERTY and updated via your control's signal handlers.Message Broker SingletonThe message broker needs to be a singleton. That way there's only one instance of the broker in memory and all instantiated objects interface with the same broker. Our message broker only needs to provide the signals that will be used for routing properties. The actual connections that the routing involves are to be done from the outside. As such, a broker class would look like this:
// internalmessagebroker.hpp
// Singleton broker class contains signals that serve as pipes
// for different parts of a program to communicate with each other.
#pragma once
#include <QObject>
class InternalMessageBroker : public QObject
{
Q_OBJECT
// Hide regular constructor
private:
InternalMessageBroker() = default;
public:
// Disable copy constructor
InternalMessageBroker(const InternalMessageBroker& obj) = delete;
InternalMessageBroker& operator=(InternalMessageBroker const&) = delete;
static std::shared_ptr<InternalMessageBroker> instance()
{
static std::shared_ptr<InternalMessageBroker> sharedPtr{new InternalMessageBroker};
return sharedPtr;
}
// This is where all the signals would go
signals:
void broadcastAPropertyChange(int value, bool broadcast);
};
Connecting PropertiesThen we have the class or classes that would connect the properties together. On my Display Panels app, all controls and visual features come from QML, meaning I only have to concern myself with interconnecting the properties. To that end, I've created a class based on QObject and instantiated it within the delegate of a QML Instantiator. This class is only for managing property data, so I refer to it as a model class, called PropertiesModel:
// Main.qml
// Here are 3 windows, each with a PropertiesModel,
// that allows them all to share a binding to aProperty
// across all window instantiatons.
import QtQuick
import QtQuick.Window
import QtQuick.Layouts
import QtQuick.Controls
import com.kdab.example
Item {
Instantiator {
model: 3
delegate: Window {
PropertiesModel {
id: propertiesModel
aProperty: 1
}
ColumnLayout {
anchors.fill: parent
Text {
text: propertiesModel.aProperty
}
Slider {
id: hueSlider
value: propertiesModel.aProperty
Layout.fillWidth: true
onMoved: {
propertiesModel.aProperty = value;
}
}
}
}
}
}
Each property of our class is to be declared using a Q_PROPERTY macro with a getter, a setter, and a notifier. The getter and the notifier have nothing out of the ordinary...
// An ordinary getter
int PropertiesModel::aProperty()
{
return m_aProperty;
}
// An ordinary notifier, form propertiesmodel.h
signals:
void aPropertyChanged();
However, the setter must be able to distinguish between when its call is the product of a user interaction and when it comes from the message broker. We accomplish this by having the setter accept a boolean argument (broadcast) that will be used to determine whether the value being set should be sent through the message broker or notified back to QML for the UI to be updated. When a setter is first called, the value being set should be broadcasted and only on its way back should the UI be updated.There are a few ways we could make sure that the value is always broadcasted first. We could set broadcast to true by default, or have two setter functions: a private one taking in both the value and broadcast arguments and a public one that only takes-in the value and calls the private function with broadcast set to true. Another option is to have broadcast be an enum with only two possible values. That would produce more readable code, however, I didn't worry about that in my code because broadcast is only to be used on calls to the private setter.Upon the private setter being called by the public setter, it will emit the broker's broadcast signal and that signal will in turn call the calling private setter for a second time (as well as the private setters of all other instances of PropertiesModel; those being called for the first time). When the private setter calls the broker that calls back to the private setter, it also passes broadcast set to false. All other instances will then evaluate the value of broadcast to be false determining that the UIs should be updated and preventing an infinite loop.
// Private setter implementation for a property that's being broadcasted
void PropertiesModel::setAProperty(const int value, const bool broadcast)
{
if (broadcast)
emit m_broker.get()->broadcastAPropertyChange(value, false);
else if (m_currentScreen == screenName) {
m_aProperty = value;
emit screenSaturationChanged();
}
}
// Publicly exposed setter prevents the broadcast argument from being
// specified by other callers
void PropertiesModel::setAProperty(const int value)
{
// Always broadcast properties not being set by the message broker
setAProperty(value, true);
}
To complete this loop as described, we need to connect the signal from the broker to the private setter of the PropertiesModel class whenever a new copy is instantiated. The best place to accomplish that is from the class' constructor, like so:
// The constructor is used to connect signals from the broker to setter properties
PropertiesModel::PropertiesModel(QObject* parent)
: QObject { parent }
{
m_mb = InternalMessageBroker::instance();
// Connections take place after the class has been instantiated
// and its QML properties parsed.
QTimer::singleShot(0, this, [this] () {
connect(m_mb.get(), &InternalMessageBroker::aPropertyChange,
this, &ScreenModel::setAProperty);
});
}
QTimer to Delay InitializationIf you've been reading the blocks of code that accompany this article, you may be wondering "Why is there a singleShot QTimer there?" When the PropertiesModel class is instantiated via QML, any connected properties that have values assigned from QML code will trigger the Q_PROPERTY's setter function. This will happen once per instantiation. If the broker were connected, it would broadcast the value set to all currently instantiated instances every single time that a new instance is added. To prevent that, we must not make the connection to the broker until after a class has been fully initialized. A single shot timer can be used to accomplish that; setting its delay to 0 will ensure that it is run immediately after all properties have been evaluated.In the end, this is what the PropertyModel header would look like:
// propertiesmodel.h
#pragma once
#include "internalmessagebroker.hpp"
#include <QQmlEngine>
class PropertiesModel : public QObject {
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(int aProperty READ aProperty WRITE setAProperty NOTIFY aPropertyChanged FINAL)
public:
explicit PropertiesModel(QObject* parent = nullptr);
int aProperty();
void setAProperty(const int value);
signals:
void aPropertyChanged();
private:
void setAProperty(const int value, const bool broadcast);
std::shared_ptr<InternalMessageBroker> m_mb;
int m_aProperty;
};
Conditional propagationIf a condition must be met for the propagated value to result in an update, then, in addition to value and broadcast, you should also broadcast any other values that are required to for such condition to be met. Pass those as arguments to the setter's and the broker's signal. Condition validation would then take place within the base case of the private setter. Here's a commented snippet of what that looks like on the Display to Light Panels app that this article was based on:
// In the original code what here I named broadcast used to be named spread.
void ScreenModel::setScreenHue(const int hue, const bool spread=true, const QString &screenName="s")
{
if (spread)
emit m_mb.get()->spreadHueChange(hue, false, m_currentScreen);
// The incoming value is only accepted if screenName matches the screen
// that the window is at and discarded otherwise.
else if (m_currentScreen == screenName) {
m_screens[m_currentScreen].hue = hue;
emit screenHueChanged();
}
}
Properties bound across instances of a window
Real World ExampleFor a real world application, you can read the code for Display to Light Panels, the app that inspired this article, at: https://github.com/Cuperino/Display-to-Light-PanelsIf you need help solving architecture problems, such as this one, reach out to us and we will gladly find ways in which we can help.The post Bind QML Values across an Arbitrary Number of Elements appeared first on KDAB.
Embedded World 2026 in Nuremberg showcased the growing dominance of open source technologies and ecosystems. Various stacks, tools, and frameworks saw increased adoption in embedded systems. Discussions heavily focused on two emerging topics: cybersecurity regulations and artificial intelligence, pointing to major future investments despite some hype.
This article explains the syntax of SWHIDs, describing how the core identifier and optional qualifiers are structured. It shows how SWHIDs can reference software artifacts such as files, directories, revisions, and releases, and how their design enables precise comparison of software
An amazing journey of 8 weeks full of code, new experiences, and interactions.I had an amazing time at the Season of KDE 2026. All the guidance from my mentors, Benson Muite and Srisharan VS, really helped me work on Mankala and also helped me learn new skills.
So, lets summarize things a bit, what I was able to achieve during the span of these two months at KDE.
Complete GUI redesign
I have made major changes in the MankalaNextGen GUI, introducing Kirigami to have different light and dark themes. Improved the design for different pages, MainMenu, Rules, About, Profile, and much more, where I worked to introduced better colors and geometry to the shapes, like buttons or display boxes.
For the main Game interface, we made new boards and shells. I worked on integrating the logic for displaying the shells and fixing the Board based on the exact numbers shown from Mankala.
I tried generating a board using Perlin noise, which can be later integrated into MankalaNextGen to design the boards more efficiently based on variants. Added new code to generate a calm background music and a wooden click sound to make it look more authentic.
Translations and LocalizationI started learning about Lokalize, KDE’s own translation software. I had successfully made translations for Mankala Engine and MankalaNextGen in Tamil and Hindi using Lokalize.
Artworks and KDE review
I have started working on the KDE review tasks and started with the fix to correct GitLab CI Build pipelines.
In the last few weeks, I started learning about Krita and made cover images for the three variants Bohnenspiel, Oware, and Pallanguzhi using their cultural Mankala boards and traditional motifs.
The journey doesn’t end here. Season of KDE has been a much-needed experience to improve my commitment towards projects and open-source. I plan to work with Mankala Engine and the KDE Community much more and make many other contributions.
Thanks to my mentors, my fellow contributors, and to the entire community for helping me so far. 🚀
Tuesday, 17 March 2026. Today KDE releases a bugfix update to KDE Plasma 6, versioned 6.6.3.
Plasma 6.6 was released in February 2026 with many feature refinements and new modules to complete the desktop experience.
This release adds two weeks’ worth of new translations and fixes from KDE’s contributors. The bugfixes are typically small but important and include:
View full changelog
It’s been an eon since I’ve had anything meaningful to talk about in the world of Open Source, so maybe it’s time to post about some nonsense I’ve been working on!
I have a love/hate relationship with progressive web apps. My job these days is in a corporate environment, and there are some things you can’t escape. Outlook. Teams. Other web-based applications. Be it Chrome or Firefox, there’s just so many things PWAs don’t do well. No persistent system tray icons. No break-away from the browser. Odd menu entries. What’s worse is that the PWA standard itself is limited in a lot of ways, and it really does feel like an afterthought by every browser vendor. Also, you can’t exactly get PWAs easily listed in app stores.
There’s Linux-y solutions. Electron-based apps. But those are an incredible time investment to maintain, and there’s about a dozen apps they don’t cover.
My C++ fu has atrophied, having been replaced with Java as my daily working language, and I haven’t kept up with KDE frameworks and Qt… But this itch was driving me crazy, and I just wanted to see some proof-of-concept that the entire situation could be just a little bit better!
Here’s the moronic idea: We split the difference between browser-based PWAs and hyper-tailored Electron apps. We just have… A pure “PWA Browser.”
So, this weekend I decided to give this “Vibe Coding” thing a try, see if this idea is viable. After hacking with Claude over the weekend, I did manage to get some decent results… So, see for yourself!
YouTube Music running as a PWA outside of a browser, no Electron wrapper.
The result is something I’m calling “Strand Apps”, because if you can’t have the whole web, maybe you can have a Strand of it.
Everything needs an icon.
How does it work? “Strand Apps” are basically just .desktop files that live in your .local/share/strand-apps folder. These simple manifests gives you the basics like name, description, home location, a few safe links the app should trust, default permissions, and a couple behaviors… Like so!
Don’t worry, the wildcards are built to be safe, but ownership of code is still key; Claude was ready to let wildcards resolve into vulnerable domain patterns.
Ideally we simply define what would be “natural” for the application in a configuration file, and let the host provide exactly that. Would the app be persistent in the background? Sure. Turn on the tray icon. Does it need a toolbar? If not, turn it off. We get that “Near native” behavior, but without forcing people to maintain an entire electron container. Once we have that configuration then anyone with that config gets a top-tier experience.
The first time you launch a strand, you’ll get onboarded for that app. Pictures below is the Outlook 365 Strand…
It’s not pretty, but for now it lets you see what the app wants, and you can choose what you give it. There’s a lot to do with this to improve the onboarding experience, but it’s a start. Before I even get into it – no, basically none of these do anything. Don’t read too much into it, I just looked at what Chrome gives PWAs and ripped off that list.
Another thing on my todos is having it create launcher .desktop files in the menu as an option in the onboarding window. I have the ingredients there, just haven’t put em’ together.
That’s not to say it’s all wall-dressing. The applications each run in their own little silos, unable to read or see what the others are doing, the host system separating their browser persistence completely. I can be signed into an alternate Google account for my Gmail strand, and my main account on my YouTube strand. Each application can also manage its cache and storage separately, kinda like Android apps.
Apps using this don’t share settings. If you need to tweak one strand app, you don’t need to commit everywhere. This was a major problem I had with traditional PWAs, because I explicitly needed to disable hardware acceleration on one app (can’t remember why), but everything followed the parent Chrome installation. I remember I had Chromium installed just for that one specific PWA.
One of the key motivations I had was something small – tray icons and background persistence. Question: How do you get a fully functional Outlook app on Linux? I’m sure someone has a solution, but I never found a satisfactory one myself. Ultimately, I had a webview widget in my system tray purely for the icon and persistence, and a Chrome PWA for an actual app window that wasn’t locked to the corner of my screen. I’d use both interchangeably, but I was always annoyed by the solution – and resource usage.
This fixes that problem. That manifest snippet you saw has a “CloseToTray” value. Tells the app that it’s goanna persist. It does. These are the sorts of integration features I’m focused on. Here’s Gmail showing its proper indicator count in the tray:
My vast number of unread emails, hanging out with my lovely music strand. Plasma has a fix for Electron coming because its tray icons could not be toggled independently. Luckily, this doesn’t have that issue.
Beyond the tray, I’ll be thinking about what other behavior settings an app might have, such as the config that removes the toolbar for “safe” apps, or for apps to specify if they’re single-window or multi-window by nature. What I really want is a solution where you can easily distribute apps that behave “as you expect”, and not like something with one foot in the browser.
Speaking of the tray… MPRIS works. Interestingly, navigation was borked in Chrome proper but somehow it “just works” with the strand. I didn’t even mean for that to happen.
Right now I have 3 Strand Apps; Gmail, Outlook, and YouTube Music. If I launch Strand without specifying a profile, it’s kind enough to give me a basic list of my installed apps. It also lets you launch the config for them before running, so if you break a web application profile you can recover. E.g. something has freaky WebGL that crashes the renderer.
This needs serious visual TLC.
The code is QT/KDE Frameworks. I didn’t wind up using Kirigami, ideally these apps won’t have much interface to them anyway, and I also wanted to use the fastest path from launch-to-application.
So… Perfect, right!?! NOTHING wrong with this setup? Push it up tomorrow?
This is where I get real about AI. Claude is pretty good, but it’s still an amateur chef in a professional kitchen. Even by my substandard C++ skills it’s apparent. At best I’d describe this work as wonderful scaffolding, but it’s still in need of a serious audit. I caught no less than 3 significant security risks it tried to give me, and it needs serious organization at minimum. Progress-wise none of the permissions are hooked up, and I want to dive into the PWA spec “proper” because I basically ignored it, and it might be able to streamline things. There’s also a lot of UX work to be done.
Beyond even that, there’s also the core design. The .desktop manifest format I designed is built around the concept that someone will make a bespoke configuration file for every app worth having. This has the strength that a properly configured strand will be a stellar out-of-box experience, and with YouTube Music as my dog food it almost feels nicer than the Electron version… But how do we distribute these weird files? Does someone even want to distribute them? Is my silly little experiment giving people reading this headaches because infrastructure and distribution is always the bigger problem? Who makes them? Is my flagrant disregard of the .desktop file spec going to cause problems? Should I brace myself for the lynching that using AI has earned me? No matter what, the one thing I know is that, somehow, these can be distributed.
This is something I’m going to futz with for a while. I figure I’ll do a serious code review next weekend, maybe re-org it, then get it into a git repo somewhere when I’m satisfied it won’t eat anyone’s cat.
KDE Gears 26.04 hit beta phase just a few days ago, so it is time to give an update on the new features in KJournald.
For 26.04, the main release goal was to have a natural integration of systemd user services and system services in the log view workflow. This means:
When opening a journald database on a system, from now on per default both the system and user service log records are opened and both will be displayed in a joint view. — If you do not like this, got to “Current Journal” -> “Limit Accessed Logs” and choose your preference. That configuration then is also stored persistently over several boots.
Revisiting the overall UI with this feature in mind, we need few more changes to really make it fly:
User units often are templated systemd services. This means, there is a single service definition but multiple instances of the service template with different parameters can be created. Using the traditional way to list every unique service in the filter criteria view (left side view) makes the filtering hard to use due to the number of services. So, as a new (opt-out; enabled per default) feature, templated services are grouped. So, for example, all my “app-org.kde.dolphin@[…].service” services can be enabled/disabled at once in the filter view. In the service name hover-info in the log view however, they still are displayed as full service names.
Typically, due to user units being user workflow specific, there are a lot of systemd services that are not started in every boot, because a user can control their startup individually. For this reason, services and executables are now being pre-filter according to the selected boot. Log priorities are not (yet) taken into account for this pre-filtering, but at least only useful filter entries are shown, which should be a major usability gain on its own.
If you interested in the features, try out the KDE Gears beta release or just install the latest nightly build of org.kde.kjournaldbrowser from the KDE Flatpak nightly CI.
Another month has gone by since the last time I wrote about KDE Linux, KDE’s upcoming new operating system. The project hasn’t stood still! Here’s an assortment of what’s gone on recently:
Real sizes for system updates
Aleix Pol Gonzalez and Harald Sitter built the machinery to allow update sizes to be calculated for delta updates. This means the sizes listed in Discover are no longer “Unknown”. Instead, you’ll see a real number:
Better tools for extending the OS
Lasath Fernando started building out the new Kapsule system, which is a tool for installing software in long-lived containers with great integration with Konsole and the rest of the OS. Before this, we experimented multiple options for experts to extend the system — including Homebrew, Distrobox, and Nix — but none really hit the sweet spot. They were too limited, too dangerous, too complex, too ephemeral, or too something else.
Kapsule deeply integrates with Konsole, which makes sense because a terminal window is a major interface for touching or extending the system in this way. Integrations with Kate and Discover are planned, too. In other words, we want to go all in on this promising new technology for the “extending the system” story for experts and software developers.
You can read more about Kapsule in these blog posts.
Moving to better infrastructure
Harald did a lot of work to upload KDE Linux images to a better location, in preparation for far higher server loads in the future as the OS gains users and rolls out a user-focused edition.
Pre-installed backup system
I pre-installed KDE’s Kup backup system, which is really quite nice! Basic documentation can be found here.
APFS filesystem support
Hadi Chokr turned on support for reading from and writing to disks formatted with Apple’s APFS filesystem.
Safer Homebrew, ydotool, and AMD GPUs
renner03 put in place a safety mechanism that prevents Homebrew packages from breaking the system in case you install Homeberew and any of its packages would otherwise conflict with system files. Now, the Homebrew packages break instead.
Note that we still don’t recommend Homebrew. But now you can use it without endangering the rest of the system.
I made the ydotool automation tool safer; now it’s an off-by-by-default system service you need to authenticate to turn on.
I also put in place a workaround for total system freezes affecting AMD GPU users. This stubborn AMD driver issue has been unfixed for months, so a workaround here is appropriate.
More languages in pre-installed Flatpak apps
Guilherme Marçal Silva fixed an issue that made the pre-installed Flatpak apps only usable in English.
Longer time for installation
Jonar Harer bumped the installation timeout from 30 minutes to 1 hour to account for slower devices.
Outstanding issues
KDE Linux is still an alpha product with lots of bugs and rough edges. We had our second dev call yesterday and discussed the road to a beta release, which will include user builds. We’re going to be focusing on a number of high priority issues and will consider the other beta-milestoned issues to be done on an “if we can” basis.
Get Involved!
Progress on KDE Linux is steady but nonetheless rather slow. Help is greatly appreciated. In addition to installing it and reporting issues, there are lots of development task that need doing:
High priority tasks for technical experts
Other tasks to make the user builds better
Tasks for newcomers
We feel how dependencies can hurtThere is a lot of talk about digital sovereignty. Being able to act as a state or as a company is obviously important. But there are real dependencies, and given the current geopolitical dynamics, there are real risks. Unfortunately, there are no easy answers. Digital sovereignty matters, but so do stability, efficiency, and innovation. Fortunately, there are options and some good examples of how to deal with it. I collected some material in an awesome list on digital sovereignty.While it is complex at the state level, it is merely complicated at the personal level. Reaching something like personal digital sovereignty is possible. If you are informed about the technical landscape, you probably already have a good intuition about it. You feel the pain of having to stop using a service because the provider decided to discontinue it without you having a say. You can decide whether it feels right to upload your personal diary to a server in a jurisdiction you do not control.Free Software provides a pathThere is a clear path to personal digital sovereignty. The goal is nicely expressed in KDE's mission: "A world in which everyone has control over their digital life and enjoys freedom and privacy." The path is provided by Free Software. The freedoms to use, study, share, and improve give you exactly what you need to be in control.For software you run yourself, this works well. Running Free Software on your personal computer gives you control. It feels good. It becomes more complicated when you use services you do not and cannot run yourself. The software freedoms do not transfer easily. There are a lot of services, which are mostly based on Free Software, but only the service providers enjoy the freedoms, not their users. I have written about this before when working on my Fair Web Services project.A good testament to personal digital sovereignty is the Blue Angel for software. Its focus on resource and energy efficiency is one side of responsible software use. Maybe even more important is its emphasis on user autonomy: being able to use software without ads being forced on you, being able to choose what to install, and having transparency about what you run. These are the ingredients of personal digital sovereignty.Finding the balanceFreedom is one side, but convenience is another. Sometimes it is easier to just use something a vendor has invested heavily in providing, even if you pay with your data and some independence. It is also a question of where you spend your time: do you build something for yourself, or do you use something that already exists? And sometimes it is about the limits what you can do yourself. Powerful tools can give you leverage so you can focus on your actual mission.So it is also about compromise. One very important aspect for me is that I am still able to choose. That is the core of personal digital sovereignty. Sovereignty does not mean doing everything yourself. It means preserving the ability to leave, even if you choose not to.Federated services make it easy to migrate. For git, for example, it does not matter so much where the server is or who runs it, because switching is as simple as changing the remote. For a proprietary note-taking service, this looks different. You may need special exports, format conversions, and you might lose functionality because it is not based on open standards. Choose your dependencies wisely.It is important to remember that dependencies are not bad per se. We know this from Free Software. We know what it feels like to stand on the shoulders of giants. We rely on the collective strength of a global community. It is not about rejecting all dependencies or doing everything on your own. It is about creating alternatives and shaping an ecosystem based on openness, so that we can choose and act on our own terms.My personal stackI am quite happy with my personal stack, which gives me the control I need. My 12-year-old desktop runs Linux and KDE. I pay to host my own email, Nextcloud, and git services. One project I particularly like is GitJournal, which gives me control over my note-taking across all my devices. This covers the core of my computing needs, with my family, my friends, and what I decide to keep private.To stay connected to the wider world, there is no way around being present on large networks. GitHub and LinkedIn are the compromises that give me reach without requiring me to abandon all my principles. I would not publish my writing only on LinkedIn, though, because I want to own what I produce.AI is a difficult question right now. It is easy to switch between services, and with rapid development it is changing quickly what the best choice is. And it can provide tremendous leverage. So it remains an evolving compromise. An ideal future would offer open models powerful enough to serve your needs and that you can run locally.Building digital sovereigntyOn a personal level, you can decide for yourself. There are limitations, and you will have to build on the environment available to you. But there are alternatives, and you can choose to build your personal digital sovereignty.At the corporate and state level, it is more difficult. The systems are more intertwined, but the pain of dependencies you cannot control and the risks of others making decisions for you are just as real. Alternatives exist there as well, often the same ones available on a personal level. It can be worth taking bold decisions.Digital sovereignty at the state level is about national security. At the personal level, it is about personal freedom. Free Software provides a powerful path to maintaining control over our digital lives.I am not arguing for tools. I am arguing for agency.
Welcome to a new issue of This Week in Plasma!
This week something very special landed for Plasma 6.7: the ability to type characters not on your physical keyboard by pressing-and-holding the keys that it does have:
The feature lives in the plasma-keyboard module, so you’ll need to have that installed and turned on in System Settings > Keyboard > Virtual Keyboard. After that, just press-and-hold keyboard keys!
Kristen McWilliam wrote this wonderful feature, and it’ll ship with Plasma 6.7. Kristen has written a whole blog post about it if you want to know more.
But that’s not all! We’ve got some more features, a lot of user interface polishing, and some bug-fixing and performance work. All in all, a good week!
Other notable new features
Plasma 6.7
You can now install custom sound themes from downloaded files. (Sam Crawford, plasma-workspace MR #6115)
The Global Menu widget now shows menus for the active window even if it’s on another screen. This is configurable and can be turned off if you preferred the old behavior. (Trevor Jex, KDE Bugzilla #420418)
Notable UI improvements
Plasma 6.6.3
Did a round of polish on the “Add Widgets” sidebar to make sure the widget count numbers are always correct and the on-demand delete button disappears the moment it’s no longer useful. (Tobias Fella, plasma-workspace MR #6378)
The “Configure” button on an unconfigured desktop widget now always fits within it, even if it’s very, very small. (Tobias Fella, plasma-workspace MR #6374)
The Clipboard widget no longer shows you QR codes for non-text items, for which they didn’t actually work. (Tobias Fella, plasma-workspace MR #6392)
Browsing through categories in Discover now highlights the active one in the sidebar as expected. (Akseli Lahtinen, discover MR #1280)
Made Spectacle’s magnifier better at being pixel-aligned. (Noah Davis, KDE Bugzilla #517274)
Plasma 6.7
In System Tray’s Clipboard and Networks widgets, the normal back button now lets you go back a page, so sub-pages no longer have two back buttons. (Tobias Fella, plasma-workspace MR #6393, plasma-workspace MR #6391, and plasma-nm MR #542)
Plugging in a USB printer now shows only one notification about it, not two. (Mike Noe, print-manager #312)
The “Kate Sessions” KRunner plugin no longer advertises results if Kate isn’t installed or is installed as a Flatpak where its functionality doesn’t currently work — though that could change in the future. (Nicolas Fella, kdeplasma-addons MR #1018)
Quick tiling two adjacent windows now centers them in the available area excluding any panels, rather than squeezing the window closest to the panels. (Anthony Flammia, KDE Bugzilla #484975)
Notable bug fixes
Plasma 6.6.3
Fixed an issue that could prevent the system stats collector from working properly on Raspberry Pi devices. (Ben Murdoch, ksystemstats MR #127)
Fixed a few sources of glitchy behavior when resizing widgets on the desktop. (Tobias Fella, plasma-workspace MR #6373)
Worked around a bug in Samsung LS24D60xU monitors (yes really, a bug in the monitors themselves) that made them turn on and off again in a loop. (Xaver Hugl, KDE Bugzilla #516605)
Fixed a stubborn issue causing the Arch/CachyOS updaters’ System Tray context menus to sometimes be mis-positioned. (Vlad Zahorodnii, KDE Bugzilla #517093)
It’s now possible to change the keyboard shortcut used for KWin’s Mouse Mark effect. (Nicolas Fella, KDE Bugzilla #501537)
The reset button in System Settings’ SDDM configuration page now resets a few more things it had missed in the past. (Chandradeep Dey, sddm-kcm MR #103)
Plasma 6.7
Implemented a fix in Plasma code to prevent Electron apps’ System Tray icons from all following each others’ settings. This is an upstream bug in Electron which has been fixed, but most Electron apps haven’t yet been updated to include the fix, so for them, this new Plasma-side fix should also stop the issue from happening. (Nekto Oleg, plasma-workspace MR #6400)
wxWidgets 3.3.3
Fixed a bug in the wxWidgets library that broke certain copy-paste operations in wxWidgets apps, such as KiCad and Audacity. (David Edmundson, KDE Bugzilla #514317)
Notable in performance & technical
Plasma 6.6.3
Reduced CPU and GPU load for full-screen windows (also known as “direct scan-out”) for screens using more fractional scale factors. (Błażej Szczygieł, KDE Bugzilla #517264)
Plasma 6.7
Improved the robustness with which sandboxed apps can initiate screencasting and remote desktop requests. (Gabriel Maizo, xdg-desktop-portal-kde MR #526)
If you happen to have multiple GPUs and any of them don’t actually support OpenGL 3D acceleration, this no longer prevents the more capable ones from providing 3D acceleration. (Xaver Hugl, KDE Bugzilla #441409)
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.
It’s been a busy few months for the development team! We’ve been focusing
heavily on turning Marknote into a much more robust knowledge base while
keeping the interface as clean and distraction-free as possible. Today,
we're releasing version 1.5, and it’s packed with major additions and
quality-of-life improvements.
Here is a rundown of what we’ve added to this release.
Source Mode
One of the most highly requested features is finally here: Source Mode.
Thanks to some fantastic work from our Season of KDE (SoK) contributor,
Siddharth Chopra, you can now bypass the rich-text WYSIWYG interface
entirely. If you’re the type of person who prefers looking at the raw
Markdown syntax while structuring your thoughts, you can now seamlessly
toggle into a dedicated source editing view.
Note links
Notes are rarely isolated thoughts, so we’ve added internal wiki-style links with
cross-notebook lookup. You can now easily link documents to one another,
making it much simpler to build out a connected web of ideas.
Note management
We made it easier to manage your growing number of notes. Each notebook will now show you how many notes it contains. If you need to move notes between notebooks, it is now easy to do that via drag and drop. And finally, we added a new “Duplicate Note” action to make it simple to create templates and copy existing notes.
KRunner plugin
To help you get to those ideas faster, we also added a KRunner plugin.
You don't even need to have Marknote open—just pull up KRunner on your Plasma
desktop, type what you’re looking for, and jump straight into your note.
Search and replace
Full-text search and replace functionality is also here to make your life much easier.
UI polish and under-the-hood work
We added beautiful, all-new animations for note and notebook items, for the search bar, and brought back the smooth sidebar transitions to make navigation feel dynamic.
We added full Undo/Redo functionality to the Quick Sketch dialog.
We added several improvements to table formatting and actions to make managing grids much less frustrating.
On the technical side, we bumped our Kirigami Addons dependency to 1.11.0, fixed an annoying issue where opening a note updated its modification timestamp, and resolved a Flatpak bug that prevented notes from opening via file managers.
Try it out
Marknote 1.5 is rolling out now! You can grab it on Linux via Flatpak and Snapcraft. A massive thank you to everyone who contributed code, translations, and bug reports for this cycle. Happy note-taking!
Let’s go for my web review for the week 2026-11.
Joint statement of scientists and researchers on Age Assurance
Tags: tech, law, surveillance
This is (IMNSHO) a very important open letter. This confirms to me that the whole set of age verification laws we’re seeing popup everywhere is severely misguided. Had my suspicions before of course but it’s getting clearer with this one. We should stay clear from those laws as a profession, it’s important to not comply, it’d be a disservice to our users.
https://csa-scientist-open-letter.org/ageverif-Feb2026
Secure Communication, Buried In A News App
Tags: tech, cryptography, security, privacy, journalism
Not sure it’ll keep being efficient if the political heat keeps going up. Still this is a nice idea.
https://hackaday.com/2026/03/09/secure-communication-buried-in-a-news-app/
LibreOffice criticizes EU Commission over proprietary XLSX formats
Tags: tech, data, foss, law, europe
We should indeed put an end to those proprietary formats. It’s sad to see the EU Commission contradict itself there.
https://www.heise.de/en/news/LibreOffice-criticizes-EU-Commission-over-proprietary-XLSX-formats-11202165.html
Is legal the same as legitimate: AI reimplementation and the erosion of copyleft
Tags: tech, foss, ai, machine-learning, copilot, values, commons, law
Excellent piece, indeed legal is not the same as legitimate. More often than not the law is lagging behind and things might be wrongly “fixed” at a later date. In that interval that’s when our communities need to build its own tools to protect the commons. We’re clearly reaching such an inflection point. Interestingly, I think there’s is a difference of reaction between the people with a Free Software culture and the ones with an Open Source culture.
https://writings.hongminhee.org/2026/03/legal-vs-legitimate/
Do the Illegible
Tags: tech, programming, engineering, ai, machine-learning, copilot
Obviously the essay from Peter Naur keeps popping up lately. It feels like an important piece, especially in the current atmosphere of vibe coding. This article lays out quite well why vibe coding is the opposite of what we should be doing.
https://ashwinsundar.com/posts/legibility-and-programming/
Moonforge
Tags: tech, linux, embedded
An initiative to monitor I guess. There’s clearly a need for a more “opinionated” setup for Yocto based embedded systems, this is going in that direction.
https://moonforgelinux.org/
The hidden compile-time cost of C++26 reflection
Tags: tech, c++, reflection, metaprogramming
Interestingly the issue for the compile time is not so much the feature itself but the STL headers required. It makes PCH pretty much mandatory.
https://vittorioromeo.com/index/blog/refl_compiletime.html
How to stop fighting with coherence and start writing context-generic trait impls
Tags: tech, rust, type-systems
Looks like an interesting approach to lift some of the limitations around the Rust trait system. The learning curve doesn’t look too great though, clearly requires effort to get into.
https://contextgeneric.dev/blog/rustlab-2025-coherence/
Parametricity, or Comptime is Bonkers
Tags: tech, zig, rust, type-systems, generics
Interesting look at Zig’s comptime feature. It’s not a purely Zig post though, does a good job of explaining parametricity and the implications of loosing it.
https://noelwelsh.com/posts/comptime-is-bonkers/
Ensuring correctness through the type system
Tags: tech, type-systems, safety
A good illustration of making illegal states unrepresentable. This definitely helps with code safety.
https://lindbakk.com/blog/ensuring-correctness-through-the-type-system
SPA vs. Hypermedia: Real-World Performance Under Load
Tags: tech, web, frontend, complexity
Probably somewhat self serving so the numbers would need to be confirmed with other experiments. That said that case gives a good idea of the price in terms of complexity and resources when choosing to go for an SPA.
https://zweiundeins.gmbh/en/methodology/spa-vs-hypermedia-real-world-performance-under-load
FontCrafter: Create Your Handwriting Font for Free
Tags: tech, fonts
This is definitely a cool project. I like the idea.
https://arcade.pirillo.com/fontcrafter.html
Code Reviews Do Find Bugs
Tags: tech, codereview, science
In praise of code reviews. This article does a good job showing all the advantages if properly managed. Teams have to pay attention to latency but otherwise you get lots of benefits for not so much time spent.
https://entropicthoughts.com/code-reviews-do-find-bugs
On The Need For Understanding
Tags: tech, programming, culture, hacking, debugging, complexity, foss
Yes, we have lots of layers nowadays. But you can read them to figure out when something doesn’t work like you expect. This is one of the most important skills of the trade.
https://blog.information-superhighway.net/on-the-need-for-understanding
The story of one of my worst programming failures
Tags: tech, system, programming, failure
There’s always an interesting lesson in this kind of failures. Here clearly it is in part a story of unchecked trust, and not planning for a bigger system. It came with real consequences too.
https://utcc.utoronto.ca/~cks/space/blog/programming/DevelopedTooSmallFailure
Prioritize Relatively
Tags: leadership, management, project-management
The point is interesting. Priorities are indeed relative and dynamic. It’s impossible to put an “absolute priority value” on what needs to be done.
https://boz.com/articles/prioritize-relatively
Autonomy and Clarity in Leadership Styles
Tags: leadership, management, organisation
Interesting framework of different leadership styles. They all come with their own pros and cons of course.
https://bjorg.bjornroche.com/management/autonomy-vs-clarity/
Bye for now!
Plasma Keyboard has interesting news to share!
Plasma Keyboard started out life as KDE's virtual / on-screen keyboard, and now
it is evolving to also support tools and features for our physical keyboards.
FLOSS/Fund
Plasma Keyboard was granted funding from the FLOSS/Fund program's second
tranche, for which we are very grateful! This funding has ensured we will be
able to put some sustained effort towards refining and improving the project —
and I have been doing just that for the past couple of months.
I began by getting more familiar with the codebase, lists of open bugs, and
feature requests. I also did some refactoring and cleanup, improved the CI and
MR review process, etc.
Diacritics
https://invent.kde.org/plasma/plasma-keyboard/-/merge_requests/83
The first feature I tackled is the first one that is for physical keyboards
rather than virtual/on-screen keyboards: diacritics — the variants of a
character that indicate a difference in pronunciation, such as ç, ñ, or ü.
Though it is more than just diacritics, because it also supports common/popular
symbols, such as ™, — (em-dash), →, ¡, ‽, ¼, ≥, ≠, etc.
If you'd like an idea of which diacritics and symbols are currently included,
you can check out the
base mapping json.
Further mappings are included depending on which language(s) you have enabled
for Plasma Keyboard in your system settings.
This feature allows users to long-press a key on their physical keyboard to
access a popup menu of diacritics and symbols related to that key, and select
one to input it. This is a common feature on mobile keyboards, and I personally
think this is a great improvement over using something like a compose key for
the same purpose.
Selecting an option from the popup menu can be done multiple ways:
Pressing the associated keyboard number key shown below the option
Clicking on the option with the mouse
Using the arrow keys to navigate to the option and pressing Enter
This was pretty challenging to implement; I previously had no experience with
Wayland protocols or input methods, so it required a lot of research, reading,
learning, and experimentation to figure it out. Difficult, but rewarding!
One of the really cool things about Plasma Keyboard is that it is available as a
Flatpak — so if you are adventurous and want to try out the diacritics feature
before it is released to the stable version, you can do so with the nightly
Flatpak builds!
flatpak install --user --or-update https://cdn.kde.org/flatpak/plasma-keyboard-nightly/org.kde.plasma.keyboard.flatpakref
Then simply enable Plasma Keyboard in System Settings → Keyboard →
Virtual Keyboard! 🤯 If you already have a version of Plasma Keyboard
installed, a quick restart or log out/in might be needed for the new version to
take effect.
Future Plans
In addition to the diacritics feature itself, I also laid the groundwork with it
for future features that will make use of the same overlay/popup system and
physical keyboard integration — stay tuned for more news on that! 😉
There are a bunch of other plans for features and improvements that we'd like to
work on, for example: swipe typing, voice typing, making the on-screen keyboard
movable and resizable, adding tests and improving performance and reliability,
etc.
There is a lot of work to be done, and we are excited to keep improving Plasma
Keyboard and making it even more powerful and user-friendly — just like the rest
of Plasma! 🚀
If you are interested in contributing, please check out the project on KDE's
GitLab: https://invent.kde.org/plasma/plasma-keyboard
I’m happy to announce the new release of KPhotoAlbum, the photo management software for KDE/Linux – version 6.2.0!
Also, I’d like to introduce our new contributor Randall Rude (a.k.a. rsquared), who already worked quite hard on improving our beloved project – welcome to the team :-)
The following changes have been documented in the ChangeLog:
Added
Display number of images on collapsed stacks (#223213)
Add commandline option --find-new-files as a synonym for --search. In the future, --search may become deprecated at some point.
Add support for QtMultimedia video backend
Make default annotation mode in viewer configurable (#474317)
Improved diagnostic messages for JPEG decoding errors
Improved diagnostic messages for invalid file names in database
Changed
Thumbnail cache and video thumbnail cache directories are now always ignored while searching for new images.
Do not automatically select an image cluster on the map when moving the map if the mouse action started on an image cluster.
Fixed
Allow large images up to an in-memory size of 2GB (#500200)
Make "Clear form" button in search dialog actually clear all form fields.
Allow setting keyboard shortcuts for "Clear Form" and "Options..." items in Annotation/Search dialog (#306044)
Fix detection of KDcraw during build time
Fix appearance of mouse cursor in the map view (i.e. indicate clickable items on the map)
Fix display of EXIF date/time data (#511546)
Fix several warnings in the console output (#505015)
Use embedded 'creation_time' data in video files instead of file creation time (#472520)
Allow saving the Annotation Dialog's layout either globally (as a template for all databases) or per-database (#513933)
Prevent unnecessary entries in the block list (#512207)
Prevent creation of .kim files over 4GB (mitigates bug #512199)
Fix compilation without Marble
Improved formatting of "time ago" texts
According to git log, the following individuals contributed code (in alphabetical order):
Johnny Jazeix
Tobias Leupold
Randall Rude
Andreas Sturmlechner
Friedrich W. H. Kossebau
Johannes Zarl-Zierl
Justin Zobel
Thanks to everybody for putting work in this release!
— Tobias
Friday, 13 March 2026
KDE today announces the release of KDE Frameworks 6.24.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
Attica
QtPlatformDependent: hide static thread local var in accessor. Commit.
Delete QtPlatformDependent if needed. Commit.
QtPlatformDependent: Simplify NAM handling. Commit.
Baloo
[Extractor] Remove Document from FailedIdDb on success. Commit.
[Extractor] Open the DB in ReadWrite mode from the beginning. Commit. Fixes bug #515918
[Engine] Protect against opening a ReadOnly database in ReadWrite mode. Commit.
Add missing include for syscall(). Commit.
Breeze Icons
Fix kleopatra-symbolic icon. Commit.
Create symbolic version of krfb icon. Commit.
Extra CMake Modules
With get_filename_component use DIRECTORY instead of legacy alias PATH. Commit.
KDECompilerSettings: Add option to force asserts. Commit.
KArchive
7zip: insert al the values at once instead of one by one. Commit.
KCompressionDevice: avoid asserting on using unbuffered open. Commit.
KAuth
Fix memory leaks in BackendsManager. Commit.
Enable LSAN in CI. Commit.
KCalendarCore
With get_filename_component use DIRECTORY instead of legacy alias PATH. Commit.
Fix wrong iCal component parenting when serializing timezone information. Commit.
Fix memory leaks in unit tests. Commit.
KCMUtils
Mark Kirigami QML module as dependency. Commit.
KCodecs
[KEncodingProber] Replace nsCharSetProber raw pointer with unique_ptr. Commit.
[KEncodingProber] Replace SMModel external with internal linkage. Commit.
[KEncodingProber] Replace nsCodingStateMachine raw pointer with unique_ptr. Commit.
[KEncodingProber] Remove unused header files. Commit.
[KCharsets] Remove no longer used include. Commit.
[KCharsets] Verify entity table is sorted at build time. Commit.
[KCharsets] Fix sort order in entity table. Commit.
[KCharsets] Add benchmark for entity lookup. Commit.
[KCharSets] Specify the fromEntity input format more explicitly. Commit.
[KCharSets] Fix numeric encoding for toEntity(...). Commit.
[KCharSetsTest] Move test class declaration to implementation file. Commit.
[KEncodingProber] Switch state machine tables to plain uint8_t. Commit.
[KEncodingProber] Remove runtime unpack state machine. Commit.
[KEncodingProber] Use same class table for UTF16 BE and LE state models. Commit.
[KEncodingProber] Fix reset() method. Commit.
[KEncodingProber] Actually check if reset() works. Commit.
[KEncodingProber] Reduce variable scope. Commit.
Remember where to re-try RFC 2047 word decoding. Commit.
[KEncodingProber] Default empty constructors/desctructors. Commit.
[KEncodingProber] Remove unused unexported member functions. Commit.
[KEncodingProber] Remove unused member variable. Commit.
[KEncodingProber] Remove no longer used include. Commit.
[KEncodingProber] Drop declaration of unused GetDistribution method. Commit.
KConfig
Fix bounds check in KConfigPrivate::expandString. Commit.
Kdesktopfile: do not needlessly cascade desktop files. Commit.
Add oss-fuzz integration. Commit.
Remove old, commented out code. Commit.
With get_filename_component use DIRECTORY instead of legacy alias PATH. Commit.
KDesktopFileTest: Update testActionGroup. Commit.
KDesktopFile: Check for Name since it is required field. Commit. Fixes bug #515694
KConfigWidgets
ShortcutStyleDelegate: Init styleOption. Commit.
KRecentFilesAction: Avoid temporary allocations. Commit.
KRecentFilesAction: Avoid allocation when reading/writing config. Commit.
KCoreAddons
Autotests: increased safety margins for unstable tests. Commit.
KCrash
Metadata: make sure the KCrashComplete group has an entry. Commit. Fixes bug #516658
Avoid using qEnvironmentVariableIntegerValue. Commit.
KDeclarative
Ungrab the pointer when the widget goes disabled or invisible. Commit. See bug #509859. See bug #416909
KFileMetaData
Ffmpegextractor: Extract Artist metadata. Commit.
Fix finding of poppler-version.h (Bad include). Commit.
KGuiAddons
Clipboard: Use buffered writes for data transfer. Commit.
Add manual large clipboard tests. Commit.
Ksysteminhibitor: Support Windows through PowerCreateRequest API. Commit.
Remove unneeded Qt version check. Commit.
Kiconutils: remove now unnecessary Qt version check. Commit.
Clipboard: Hold mutex before dispatching any wayland events. Commit. Fixes bug #515465
Mark WindowInsetsController as singleton in the documentation. Commit.
CMake: Find Qt6::GuiPrivate when USE_DBUS is enabled. Commit.
KKeySequenceRecorder: Accept some more keys that can be used with Shift. Commit.
KHolidays
Add more holidays to Bulgaria. Commit.
Quiet compiler warnings using inline pragmas. Commit.
DE: From 1954 to 1990, there was a “Tag der deutschen Einheit” (note the lowercase “d” in “deutschen”) in West Germany. Commit.
DE: Before 1990, there was no "Tag der Deutschen Einheit". Commit.
DE: Before 1990, there was no "Tag der Deutschen Einheit". Commit.
Generate the bison/flex code. Commit.
KI18n
KI18N_WRAP_UI macro: drop now unneeded support for unique image data names. Commit.
KI18N_WRAP_UI macro: inject klocalizedstring.h include by uic argument. Commit.
KIdletime
Remove unneeded Qt version check. Commit.
KImageformats
JP2: fix possible Undefined-shift. Commit.
IFF: fix buffer read overflow. Commit.
Fix Heap-buffer-overflow WRITE. Commit.
Fixed excessively frequent warning messages. Commit.
Ossfuzz: update aom, libavif, openjpeg. Commit.
ANI: fix possible QByteArray allocation exception. Commit.
Jxl: adjust metadata size limits. Commit.
RGB: fix a possible exception on the new. Commit.
TGA: fix Undefined-shift. Commit.
PSD: improve conversion sanity checks. Commit.
IFF: fix compilation warnings. Commit.
ANI: check for array allocation size. Commit.
KIO
Refactor and improve paste dialogs. Commit.
Add title for dialogs opened when pasting content. Commit.
KNewFileMenu: Strip proper ellipsis, too. Commit.
KFileItemDelegate. Commit.
Trash: fix typo and use correct device id for home dev. Commit.
Visual changes to KFileWidgets to bring it closer to Dolphin. Commit. Fixes bug #516063
Widgets: Make use of nanosecond timestamps when appropriate. Commit.
Workers: Populate nanosecond timestamps in KIO workers. Commit.
Core: Extend UDSEntry with nanosecond precision timestamps. Commit.
FilePreviewJob: Stat MountId and use it to look up the mount. Commit.
KMountPoint: Add findByMountId. Commit.
Filewidgets/placesview: add mountpoint tooltips for network mounts. Commit.
KFileItemActions: Use OpenUrlJob::isExecutableFile for "Run executable". Commit.
Kfileitemactions: Add i18n context inmenu. Commit.
Trashimpl: use mnt_id as trashId instead of dev_id. Commit. Fixes bug #513350. Fixes bug #386104. See bug #490247
Kmountpoint: expose mnt_id_unique and isPseudoFs. Commit.
KFileItemActions: Add API for service menu keyboard shorcut. Commit.
Drop Worker::workerProtocol. Commit.
Kpropertiesdialog: Use MIME type we already have for default icon. Commit.
Core: Drop unused code. Commit.
Filepreviewjob: Add timeout. Commit. Fixes bug #504067
Deleteortrashjob: Remember whether AutoErrorHandling was enabled. Commit.
Deleteortrashjob: Don't overwrite job delegate, if it exists. Commit.
Gui/openurljob: Stops job on missing Type in desktop files. Commit.
Core/mimetypefinderjob: Fix missing early return in KIO::MimeTypeFinderJobPrivate::scanFileWithGet. Commit.
Trashsizecache: Fix look up of directory size cache. Commit. See bug #434175
Drop WorkerConfig::setConfigData. Commit.
Simplify SimpleJob::slotMetaData. Commit.
Drop special handling for internal metadata. Commit.
Storedtransferjob: Drop secret OverriddenPorts option. Commit.
Kirigami
Workaround crash due to QTBUG-144544. Commit. Fixes bug #514098
Platform: Deprecate PlatformTheme::useAlternateBackgroundColor. Commit.
Platform: Move useAlternateBackgroundColor from Theme to StyleHints. Commit.
Platform: Introduce StyleHints as common API for extra style behaviour. Commit.
InlineViewHeader: Create a template and utilize it. Commit.
NavigationTab Bar/Button: Create templates. Commit.
Heading: Create a template, base control on top of it. Commit.
Mark QML singletons in documentation. Commit.
Remove duplicate since documentation. Commit.
Add missing documentation module dependency. Commit.
Autotests: Mark test_absolutepath_recoloring of tst_icon.qml as skipped. Commit.
Controls: Port kirigamicontrolsplugin to use Qt::StringLiterals. Commit.
Controls: Use componentUrlForModule for looking up controls files. Commit.
Platform: Port BasicTheme to use StyleSelector::componentUrlForModule. Commit.
Platform: Greatly simplify StyleSelector::styleChain. Commit.
Platform: Deprecate componentUrl, rootPath and resolveFileUrl in StyleSelector. Commit.
Platform: Simplify StyleSelector::resolveFilePath. Commit.
Platform: Add StyleSelector::componentUrlForModule. Commit.
Move all controls in own import. Commit.
Fix Kirigami.InputMethod.willShowOnActive. Commit.
Fix placeholder. Commit.
Reduce text duplication for shortcut tooltips in action toolbar. Commit. Fixes bug #515958
Show keyboard shortcut in action toolbar tooltips. Commit.
Work around Qt bug causing kirigami components to not load when multiple qml engines are involved. Commit.
KJobWidgets
Don't show empty error notifications in KNotificationJobUIDelegate. Commit.
KService
Make updateHash slightly faster. Commit.
Ksycoca: do not allow for recursive repairs. Commit. Fixes bug #516426
Kservice: correctly type the unused legacy field as 8 bits. Commit.
Ksycocafactory: do not crash when failing to find a factory stream. Commit.
Ksycocafactory: guard against integer underflow. Commit.
Enable LSAN in CI. Commit.
Fix KServiceAction+KService memory leak. Commit.
KTextEditor
Search: add a way to clear the history. Commit. Fixes bug #503327
Enable Werror on CI. Commit.
Reduce QLatin1Char noise. Commit.
Fix clipboard warning, check if QClipboard::Selection is supported. Commit.
Ensure we write a BOM if wanted for empty files, too. Commit.
Avoid temporary allocations when saving the file. Commit.
Properly pass parent pointer for document. Commit.
KTextTemplate
With get_filename_component use DIRECTORY instead of legacy alias PATH. Commit.
KUserFeedback
Don't report nonsensical screen information. Commit.
KWallet
Fix TRANSLATION_DOMAIN. Commit.
Fix Messages.sh to cover all of src/runtime. Commit.
Added translation_domain. Commit.
KWidgetsAddons
Kacceleratormanager: Avoid unnecessary allocations when searching for used shortcuts. Commit.
Kactionmenu: Be more forgiving about menu ownership. Commit.
Kactionmenu: Fix ownership of default menu. Commit.
Enable LSAN in CI. Commit.
Avoid mem-leak in KDateTimeEditTest::testDateMenu. Commit.
KAcceleratorManager: Avoid unnecessary allocation. Commit.
Kmimetypechooser.h: Remove default arguments from an overlapping constructor and mark it as deprecated for 6.24. Commit.
KWindowSystem
Remove unused include. Commit.
Port createRegion to QNativeInterface. Commit.
Port surfaceForWindow to QNativeInterface. Commit.
Wayland: Don't try to export window that isn't xdg_toplevel. Commit. Fixes bug #516994
Port xdgToplevelForWindow to QNativeInterface. Commit.
Wayland: Fix importing window that's not exposed but already has surface role. Commit.
Remove unneeded Qt version check. Commit.
Platforms/wayland: Manage blur, contrast, and slide globals with std::unique_ptr. Commit.
Platforms/wayland: Add missing initialize(). Commit.
Platforms/wayland: add missing blur capability with ext-background-effect. Commit.
Wayland: implement background effect protocol. Commit.
Platforms/wayland: ensure we always react to surface destruction. Commit.
Run clang-format on all files. Commit.
Modem Manager Qt
Add new cell broadcast interfaces from MM API. Commit.
Update modem firmware interface to latest MM API. Commit.
Update modem voice interface to latest MM API. Commit.
Update call interface to latest MM API. Commit.
Update modem interface to latest MM API. Commit.
Update bearer interface to latest MM API. Commit.
Update modem messaging interface to latest MM API. Commit.
Update modem signal interface to latest MM API. Commit.
Update modem location interface to latest MM API. Commit.
Prison
Bump minimum ZXing version from 1.2.0 to 1.4.0. Commit.
Make zxing and libdmtx required dependencies by default. Commit.
Purpose
Add missing CI dependencies. Commit.
Fix QML module dependencies. Commit.
QQC2 Desktop Style
Use Kirigami.StyleHints for tick marks in Slider. Commit.
Use Kirigami.StyleHints for useAlternateBackgroundColor in list item background. Commit.
Use Kirigami.StyleHints for icons in ComboBox. Commit.
Use Kirigami.StyleHints to determine ScrollView background visibility. Commit.
Menu: make sure implicitWidth/height is never 0. Commit. Fixes bug #516151
Make sure that the default behaviours of onPressed and onLongPressed are not trigger if the even is accepted. Commit.
Solid
Devicemanager.cpp replace "Ok" with "OK". Commit.
Mark network mounts as ignored if user is missing rights for it. Commit.
Fstabhandling: add static wrapper method for '_k_isFstabNetworkFileSystem'. Commit.
Use directory name as displayName for fstabdevices. Commit. Fixes bug #501658
Syntax Highlighting
Move comment after white space for some shells and Perl. Commit. Fixes bug #510666
The latest Qt release, Qt 6.11, is just around the corner. This short blog post series presents the new features that QML tooling brings in Qt 6.11. You can find part 1 on new qmlls features here.
We are happy to announce the release of Qt Creator 19!
Release 19 for the Qt Creator IDE adds a minimap for text editors, easier configuration of remote devices, a basic MCP server, lightweight support for various project types for various languages, and many more improvements.
In two sessions, the Krita developers discussed what they want to work on in 2026, after Krita 5.3 and Krita 6.0 are released. That is, actually, one release, but one version is built with Qt5 and one with Qt6. The release is planned for next month.
Krita Sketch User Interface
Last year, Timotheé created a prototype for a mobile user interface for Krita (there is an APK you can install to play with). At the same time Wolthera finished her work on the new text shape and text tools. Both projects use the QML and QtQuick features of Qt to implement the user interface.
This year, we intend to work on replacing the tool option dockers with QML so we can use those both in the mobile and in the desktop version of Krita.
Alvin Wong experimented in 2025 with embedding an OpenGL based canvas inside a QML application. Dmitry and Carsten will continue that work and see whether we can use Krita's canvas to show an image inside Timotheé's prototype.
Agata has already started work to make the current user interface more suitable for tablet use.
Working with Files
There are a couple of plans we have with regards to file handling. On Android, working with the file sandboxing is seriously complicated, and we're looking into a solution for that.
The Krita .kra file format is pretty old by now (not 25 years, since it came into being a few years after Krita started being developed). It can, obviously, load and save everything Krita can handle, but it is not a particular fast file format. Carsten proposed to look into an SQLlite based file format. This could potentially mean that we could save the image after every change without the user noticing, making saving completely transparent.
Agata is already working on improving the autosave dialog. There is already a mockup for this.
Ivan is looking into sharing settings and resources across a user's devices, ideally in a cross-platform way.
Color Management
While Krita supports HDR displays, there are issues with the user interface. Wolthera wants to start improving there.
Now that Qt 6 includes support for color management, CMYK and higher-bit depth images, it should be possible to add color management to Krita's vector layers, and that's something we are eager to implement.
We also discussed Wayland. We now support color management on Wayland on Linux, but there are plenty of problems there. We decided to only support the KWin Wayland compositor that comes with KDE Plasma for now.
Performance
Dmitry wants to work on "region based updates", and has already started on that: this will make working with large images faster.
Ivan and Wolthera are interested in using vectorization in filters, possibly replacing the use of LittleCMS for color transformations.
Continuous integration
Continuous integration is how we build Krita: after changes, Krita is built automatically for every platform. Now that we've access to Windows ARM hardware, we need to find a way to extend our builds to Windows ARM, but the CI factory doesn't have an ARM builder, so we'd need to cross build.
We also intend to update all Krita's dependencies to the latest version, but only after we release Krita 5.3 and Krita 6.0. And of course, we intend to keep releasing bugfix and feature releases this year! For now, Krita 5.3 is the standard release, and 6.0 is considered experimental, but that should have changed by the end of the year.
Qt World Summit 2026 is moving to a virtual format. After careful evaluation with key stakeholders, we've decided to transition the event from an in-person gathering in Germany to an online experience.
Today we are releasing GCompris version 26.1. It contains bug fixes and improvements on many activities. It is fully translated in the following languages: Arabic Bulgarian Breton Catalan Catalan (Valencian) Greek Spanish Basque French Hebrew Croatian Italian Lithuanian Latvian Malayalam Dutch Polish Brazilian Portuguese Russian Slovenian Albanian Swedish Turkish Ukrainian It is also partially translated in the following languages: Azerbaijani (87%) Belarusian (83%) Czech (98%) German (93%) UK English (96%) Esperanto (96%) Estonian (86%) Finnish (92%) Galician (97%) Hungarian (97%) Indonesian (98%) Georgian (88%) Kannada (85%) Macedonian (81%) Norwegian Nynorsk (89%) Portuguese (85%) Romanian (97%) Sanskrit (97%) Slovak (78%) Swahili (88%) Tamil (84%) Chinese Traditional (85%) You can find packages of this new version for GNU/Linux, Windows, Android, and Raspberry Pi on the download page. Also this update will soon be available in the Android Play store, the F-Droid repository and the Windows store. Thank you all, Timothée & Johnny