26 Aug 2026

feedPlanet KDE | English

Re-Introducing KQuickImageEditor: New Features and Design Philosophy

KQuickImageEditor is an image editing library for Qt Quick applications. It was created by fellow KDE developer Carl Schwan. It can crop/mirror/resize/rotate images, it has undo/redo history, and it comes with QML components that make it easy to set up a basic image editor. NeoChat and Photos (aka Koko) have used it since 2020 and 2021.

Screenshot of KQuickImageEditor in NeoChat
Screenshot of KQuickImageEditor's original UI and capabilities in NeoChat

In version 0.6, I added a new image editing system from Spectacle. On top of the existing features, the new system can draw shapes, write text, blur and pixelate. It will also be able to do a wide range of color adjustments soon (likely 0.7). Spectacle and Koko have been using the new image editing system since 2025. It was Spectacle's to begin with, so you could say Spectacle has been using it since 2023. NeoChat and others might use the new system once the number of GUI components have expanded. The old image editing system will remain available for the foreseeable future so that apps using it will not break.

Screenshot of KQuickImageEditor in Spectacle
Screenshot of KQuickImageEditor's annotation capabilities in Spectacle. There isn't just one UI anymore.

My design philosophy for the new system is based on the idea that APIs should be minimal, but highly flexible by reusing existing components. It's supposed to be like how you can buy a LEGO set and make many different things with the same pieces. For example, the upcoming color adjustment API takes a QMatrix4x4 to apply linear adjustments to RGB channels with the top 3 rows and non-linear/perspective adjustments with the 4th row. It's just like using a QMatrix4x4 or mat4 (GLSL) for 3D graphics, except your dimensions are red, green and blue. I could have made the API just for brightness and contrast effects (to be used by Koko), but the choice to use a QMatrix4x4 means you can do a lot of things just with Qt's existing APIs. From there, I can still add APIs to create 4×4 matrices for specific effects, but apps don't need to wait for KQuickImageEditor to have an API for the color adjustment they need. They can make their own 4×4 matrices by applying general mathematical concepts.

The core components of the new system are AnnotationDocument and AnnotationViewport. AnnotationDocument has all of the APIs for manipulating QImage objects and undo/redo history. AnnotationViewport is a custom QQuickItem subclass that can render images, update in response to changes from AnnotationDocument and provides QPainterPath/SVG path data for outlining annotations when using the selection tool. There are also a few QML components for features that most viewport implementations can be expected to implement the same way, such as outlines for annotations that are selected or hovered over. The only truly necessary part is AnnotationDocument. Although KQuickImageEditor is for Qt Quick apps, you could connect AnnotationDocument to a custom viewport made with Qt Widgets.

At the moment, there aren't many GUI components in the API because apps may have different needs and I don't want to force the use of a particular UI. I might add standard action components for each tool type in the future to make setting up toolbars, floating toolbars or toolboxes easier, but there are still a lot of things to decide on before adding more visual GUI components to the API. There is a documentation website, but the documentation needs quite a lot of work, so reading the header files and looking at how Koko and Spectacle have used the system are currently the best ways to understand it.

The API of the new annotation system is considered unstable. As an example, AnnotationDocument and AnnotationViewport have names that no longer match the scope of what they are for, so they might change before stabilizing the API. However, I don't break apps on a whim. If the API or ABI has to have a breaking change, it will be communicated and there will be a path to prevent KDE apps on the Gear and Plasma release schedules from breaking in between their releases.

Just so it's clear, even the new image editing system is not supposed to compete with advanced image editing systems like what Krita and GIMP have. The exact scope is not firmly defined, but it's pretty likely that certain features like layers or a wide variety of brushes will not be implemented.

I intend to make more posts about the new image editing system and its history within Spectacle in the future.

26 Aug 2026 7:06pm GMT

Week 10 + Week 11: Subsetting for freetext annotations is merged

Hello fellow KDE contributors and users!

The Font Subsetting for FreeText annotations merge request got merged today and this means Poppler now supports font subsetting for FreeText annotations.

You can try it out by using Poppler from the master branch or wait for the next release. You can enable/disable it by passing -DENABLE_HARFBUZZ=ON/OFF when running CMake although it is enabled by default.

We worked on the following in the past 2 weeks,

What's remaining:

Watch out for a demo video/blog showcasing the results after doing font subsetting soon!

Thank you,
Ojas

26 Aug 2026 9:39am GMT

Dolphin 26.08, and KIO perf improvements

Dolphin 26.08 has been released. Here is more of what changed in it, and in the KIO framework underneath it.

The version of KIO that shipped alongside Dolphin 26.04 was 6.25. The one that ships alongside 26.08 is 6.29, four framework releases and 294 commits later. A fair part of this post is about that, because the largest performance change of this cycle is not in Dolphin at all. If you only read one thing, read Making KIO copy many files fast, which is the story behind why copying a folder of small files in 26.08 takes less than half the time it did in 26.04.

New features

Grouping is no longer tied to sorting. Ramil Nurmanov added an explicit group role, so grouping by type no longer forces you to sort by type as well. The old "Show in Groups" toggle is replaced by a "Group By" menu, which lets you turn grouping off, keep the old "Same as Sort" behaviour, or pick a criterion outright. Inside each group the normal sort role is still used as a secondary key. (989c0f4f0)

The filter bar tells you what it is doing. Alessio Bonfiglio replaced the hidden auto-detecting regex behaviour with an explicit mode selector offering Plain Text, Glob and Regular Expression, plus a case-sensitivity toggle. The old behaviour tried to guess: typing a name containing *, ? or [ silently switched the bar to a regular expression, which made a file genuinely named [draft].txt impossible to filter for. An invalid expression now turns the bar red instead of quietly doing something else. (3084a4e11)

A "Folder Name" column in the details view, by Jussi Räsänen, closing a request from 2021. It is most useful when a search or an expanded tree puts files from several folders on screen at once. (4a7be9f25)

Per-folder zoom, by Wagner Soares. When you are not using global view properties, the zoom level is now remembered per folder like the other view properties are. (0f7a9c681)

"Focus Other View", by Felix Ernst. The "Switch between views with Tab key" setting is gone, replaced by a real action you can bind to whatever you like. It moves focus to the inactive split view, and opens a split if there is not one yet. (12b4a8a91)

Close tabs to the left or right, by Ramil Nurmanov. (91e7c0c1e)

A button to restore view properties to their defaults, which I added for the per-folder view properties case. It enables and disables itself depending on whether the current folder already matches the defaults. (70f34211c)

Type-ahead feedback in the status bar, by Felix Ernst. As you type, the status bar shows the keys you have typed and which file name they selected, so a type-ahead that lands somewhere unexpected is no longer silent. (1e13c6abb)

The terminal panel can be resynchronised with F5, by Antti Savolainen, closing bug 510557. When a foreground program is running in the panel, the terminal and the view can drift apart. Konsole does not signal when that program exits, so responding to F5 is the practical answer. (07baa7bb6)

KDE Connect integration, by Kai Uwe Broulik: an "Open KDE Connect" button when browsing the kdeconnect scheme (d5903bd81), and a proper placeholder for a KDE Connect folder (dfef28748).

Session restore for the first instance, by Sergey Katunin, closing bug 464693. If Dolphin is not already running and something launches it with --new-window, as browsers and Kate do, the session is restored rather than discarded. (173794ce1)

Behaviour changes

These are the changes most likely to surprise you, so they are worth naming explicitly.

Who wrote it

Counting commits that are new in 26.08 and not already in a 26.04.x release, and leaving the translation robot out of it:

commits 207, of which 97 code changes
lines 3822 added, 772 removed, net +3050
contributors 22
first time in Dolphin 13 of those 22
returning 9

The busiest by a wide margin:

Contributor commits added removed
Sebastian Englbrecht 31 1145 87
Méven Car 29 706 236
Pan Zhang 6 424 58
Felix Ernst 5 250 165
Ramil Nurmanov 2 428 54
Alessio Bonfiglio 2 406 22
Kai Uwe Broulik 2 58 4
Akseli Lahtinen 2 49 42
Antti Savolainen 2 37 12
Filip Fila 2 13 5
Oleksandr Bondar 2 11 6
Sergey Katunin 2 11 5

Commit counts and line counts do not rank people the same way. Ramil Nurmanov and Alessio Bonfiglio wrote two commits each and still added more lines than anyone except the top two, because grouping by a separate criterion and the filter bar modes each arrived whole. Ryan Nosurname's single commit is the opposite shape: removing the video preview play arrow takes away 43 lines and adds none.

Thirteen people landed their first Dolphin commit this cycle: Antti Savolainen, Areeb Faisal, Brijesh krishna, Evgeniy Harchenko, Filip Fila, Florian RICHER, Jussi Räsänen, Ketal Wang, Oleksandr Bondar, Ramil Nurmanov, Ryan Nosurname, Sebastian Englbrecht and Wagner Soares. Kudos to them! Several are long-standing KDE contributors who had simply not touched this repository before, so read it as new to Dolphin rather than new to KDE.

The other 110 commits were mainly translation commits. Thank you, translators!

Bugs fixed

Nineteen bugs are fixed in 26.08 that were not already fixed in a 26.04.x point release. Ten of them are the changes described above, so here are the other nine:

Bug What Who Commit
492298 Menubar visibility applied after the UI has loaded Oleksandr Bondar c3ef613f
506884 Inline rename preserved when the item scrolls out of view Pan Zhang 5e35194b
508465 Item widgets use style primitives instead of custom painting Akseli Lahtinen 61b6e173
509150 Wrong item count in the Size column for folders of 200+ entries Pan Zhang 914cd901
510469 Animated-height widgets no longer scroll the viewport Pan Zhang cde91dd7
514401 Re-triggering an inline rename made robust Méven Car 7ca6daea
515236 No spurious history entry when leaving search results Pan Zhang 35b309aa
518285 Non-Breeze styles may style the non-toolbar navigation bar Filip Fila 76f6eb07
523348 Delete action shown in selection mode in the trash Méven Car d392e6b5

Two regressions worth knowing about

Icons could be missing entirely. On a freshly opened view every item drew a blank where its icon should be, and it stayed that way until the view mode was switched or the zoom slider moved (bug 523228). A regression from per-folder zoom, fixed in 9c652faca. That fix brought one of its own, turning previews off in icons view rendering at 16 pixels rather than the 32 that mode is set to (bug 524606), fixed in 57c6b10e1. Both are on the release/26.08 branch and ship in Dolphin 26.08.1, due in the first half of September 2026.

Service submenus disappeared from the context menu. Entries that a service menu file groups into a submenu were missing from the context menu, in any application that builds one with KFileItemActions, Dolphin included (bug 524239). A regression from 148b9253d in 6.29, fixed by Luis Bocanegra in 774defb94, which ships in KDE Frameworks 6.30, due in the first week of September 2026.

Neither was found by a test, and both have one now: dolphinitemlistviewtest, which is new, and three cases in dolphinviewtest for the per-folder cache, and testServiceMenuSubmenuActions with a submenu.desktop fixture in KIO.

Closing

If you want to help, the leak and lifetime work above is a good way in, and so is picking a bug from the list. The KIO copy path still has more in it than 6.29 ships: the batching that closes most of the remaining gap to cp is written and measured in Making KIO copy many files fast but not yet finished.

That's all, folks.

26 Aug 2026 12:00am GMT

25 Aug 2026

feedPlanet KDE | English

What’s Happening In KDE Remote Desktop – Improved Unattended Mode and More

Remote desktop has been one of the weaker areas of the transition to Wayland. There's a lot of software written exclusively for X that has a direct Wayland equivalent. Within KDE, we already have a Plasma-native RDP and VNC solution for Wayland, but we're aware that it hasn't yet reached the level we want it to.

Throughout the path to Plasma 6.8 it has been an area of focus, with contributions from me, Shouvik Kar, Nick Haghiri, Oliver Beard and Wensheng Tang.

Improved Unattended mode

There are a few different use cases for remote desktop:

Support Mode

This is the typical remote session. You see exactly the same thing on the remote client as on the host, with the contents matching the size of the monitors on the host machine.

This is great when there's someone at the host machine and someone else remoting in, and you want to work together while both seeing the same content.

Unattended mode

The above mode isn't so great when there's just you. If I'm connecting to my home PC from a tiny laptop, it's very unergonomic to have the remote screen be larger than my laptop display and have to scroll around it.

Additionally if my remote PC is in an office, I don't want my colleagues to see my cursor moving around clicking on windows when I'm not there.

We have a new UX that solves all of these issues:

The underlying work also sets us up nicely for the full headless case.

Clipboard

Clipboard support has been massively improved with bi-directional text snippets and upcoming work for file transfers, including support in KRDC.

Performance

We've been cutting down latency throughout the system. A new timing mechanism tracks every frame throughout the entire process, letting us see where delays build up, from receiving the raw frame and encoding it, through transmission over the network, to rendering on the client and finally receiving the acknowledgement.

We now coalesce frames that are still waiting to be sent to the client. A new algorithm determines the optimal number of frames to keep in flight, while improved backpressure handling keeps latency lower during network dropouts.

There's also work happening to send multiple streams or even areas of the same desktop at once.

A graph taken midway through optimising

KRDC will also benefit from improved performance in 26.12 as an extra source of latency compared to the xfreerdp3's model performance has been addressed.

Better compatibility

One of the core reasons we have an RDP server is that there's a huge range of existing clients out there. That only helps if we actually support those clients, which isn't trivial given how much variation there is between them.

We now support both RemoteFX Progressive encoding as well as full hardware accelerated H264 encoding with improved fallback for when H264 encoding fails. We also fixed NLA authentication for Windows clients.

libei port

Another large refactor is the port to libei: a library/protocol for sending emulated input to the compositor that's a lot more fleshed-out than the basic 'move mouse' 'send keysym' that existed directly in the XDG Portal specification. libei is far more robust: it can support any number of devices at once and provides the infrastructure for us to also support remote tablet and touch.

We also have massively improved support throughout the stack for sending any keysym that isn't in the current keymap. i.e even if the host keyboard is set to US, you can still input on the remote side characters like ẞ, to even fully composed UTF-8 strings like "안녕 👋".

What's next

Multi-user headless

Whilst I am confident that we will have a great single-user story in time for Plasma 6.8 even for truly headless setups, it is unlikely we will deliver a remote server that handles multiple concurrent users at this time. It is far from trivial, and feature freeze for Plasma 6.8 is upon us.

Standardisation

Ultimately, it's frustrating that we're in a situation where we have to maintain this entire service at the KDE level, when much of it should be a solved and shared problem.

Having our own implementation has been useful to work out how to provide tight integration with Plasma, but there are many competing remote-desktop services that should be able to benefit from the same underlying infrastructure.

Others feel the same way, and there is some effort to start standardising the work for headless setups. I hope to have more news on that front shortly.

Call to action

As this remains a critical path for X11 holdouts, we need people to test and contribute. If you can, please run master builds and report any bugs you find. The final merge-requests for the parts mentioned above should be landing soon. Bug reports help; patches even more so!

25 Aug 2026 6:29am GMT

Redesigning Lokalize's Translation Memory Tab - GSoC Week 9

After working on the UI of TM Tab in Lokalize during the first phase of GSoC, I got back to work on the backend. Currently, only a single TM can be searched in TM Tab. My changes enable querying across multiple selected TMs as per translators' feature request.

A little about threads and mutexes before I share week-wise updates. The GUI runs on the main thread, while TM operations (querying, opening/closing databases, removing files) run as jobs on a separate worker thread pool, TM::threadPool(). This pool is explicitly capped to a single worker thread at startup- setMaxThreadCount(1). This means TM jobs never actually run concurrently with each other, they queue and execute strictly one at a time (this can be changed given my new changes but will have to be careful).

QSqlDatabase connections can only be used on the thread that created them, which is why each job looks up or clones a connection specific to the current thread before querying.

A queued connection is what lets a signal emitted on the worker thread safely invoke a slot on the GUI thread: rather than running the slot's code immediately on the emitting thread.

A mutex protects shared or concurrently-accessed data.

Week 7

I spent week 7 exploring other approaches for quering multiple DBs and merging the results. QSqlQueryModel is only useful to get query results from a single db. It just enabled std::move(*job->query) and there was no way to append results from other TMs.

I felt that my proposed approach, to fire N ExecQueryJobs, merge them in an in-memory SQLite db, and then pass it on to the view, was making things unnecessarily complex and somewhat redundant. I'm sharing the discarded ideas as well in case it helps someone in the future.

Week 8

I decided upon QAbstractTableModel. Unlike QSqlQueryModel (which is a subclass of it), it's more flexible and I had to refactor some of the code. This also meant lazy fetch couldn't be preserved and the results would be stored in QSqlRecords (to preserve all the existing usage on results).

Manually tested against a single TM. Rewrote the TMJob Test too. I find it strange that we always write a test for it to pass. Also from one of the articles I read: "Use test driven development. When you write the test just before the production code, you would never write a monster test, would you?"

Week 9

setFilter() is modified such that ExecQueryJob is fired for each TM. slotQueryExecuted() accumulates each job's rows into the model as they arrive, and only fires resultsFetched() once every selected TM's job has reported back. Row count is also reported directly at the end.

Well, contrary to what I wrote in the last blog, I did end up with an approach quite similar to what TMView does. Are mentors always right?

The part on which I spent a lot of time was what happens if someone retypes their query, or checks/unchecks a TM, while the previous search's jobs are still mid-flight. Stale results shouldn't be allowed to land on top of a newer search's rows. The fix is a generation counter to keep track.

After a lot of coding and debugging, seeing the resuts from multiple TMs made the entire hard work finally pay off.

While testing, the bug mentioned in the previous blog kept pestering me so I fixed it too. I was so fixated on empty/short string that I did not think that the place it was being used could be a problem. It's nice to see the Art of Debugging materialize out of pages of Roger S. Pressman's textbook.

I'll begin to work on TM View once these changes are reviewed and merged.

25 Aug 2026 12:00am GMT

24 Aug 2026

feedPlanet KDE | English

Sovereign Tech Fellowship for Freedesktop Tasks

In 2025 I was honored to be selected for the first cohort of Sovereign Tech Fellows, a program by Germany's Sovereign Tech Agency to improve the resilience of the open source ecosystem by supporting maintainers directly (complementing their existing support for larger FOSS organizations). Back in 2025, I was only working very limited hours - however, this has changed in 2026.

For the second half of 2026, I am working again as a Sovereign Tech Fellow, but this time with significantly increased hours. After finishing my PhD, I do have time now for new tasks (and new jobs!), and the fellowship presents an amazing opportunity to really advance projects that I maintain or am part of. This also has a very nice effect on contributors and bug reporters, as their feedback gets addressed a lot faster. With some luck, this ultimately will help finding new (co)maintainers for projects as well (although in the age of AI, a lot of how open source used to work is much more uncertain, but that is a matter for a different blog post).

The fellowship is time-limited, so I am intending to make the time I currently have count!

So, what's planned?

I am involved in many projects, but three of them will be getting attention as part of the fellowship. I know I am notoriously slow at blogging, but expect more details on each of them very soon. Here's an overview:

Freedesktop.org, Specifications and Organization

I maintain the Freedesktop Specifications, which is an area of Freedesktop that has traditionally been a bit chaotic. This "worked" in the past, because Freedesktop was never intended to be a formal standards body, but more a shared space where people could throw a lot of code and ideas over the wall and see what sticks and what people can collaborate on.

While I very much love the spirit of this and want to keep it in some form, we definitely would benefit not just from more formalization and better procedures, but also from better organization of the specifications in general. A lot of conflicts can be avoided by that. I will work on improving procedures, crunching through the (lots!) of pending bug reports and MRs, and to make the specifications site better searchable and accessible (similar to how Mozilla's MDN presents information, but I am not sure if we will get quite that far). I also intent to add a compatibility matrix for specifications, so if a desktop opts out of any one of them (or does not implement them yet) that fact is documented and authors of applications know what they can expect. This will allow us to move a lot faster and avoid a lot of conflict, because there is no implicit assumption that "everybody will implement everything" anymore (which has never been quite true anyway).

Hopefully, this will ultimately result in a Freedesktop that is both a lot more useful for application authors who want to bring their project to Linux, as well as developers of desktop environments who need to see which specifications are available and which ones are current.

In addition to that, I have also worked on a Freedesktop.org website refresh, which is pretty much done in its first iteration (pending sysadmin action). The aim there is to have a more official website, separate from user-contributed wiki content, that showcases what Freedesktop is and which projects are using it for hosting. Once the new website is live, I will also review every page again, archive dead projects in their own section and reorganize the software and specifications directory. Those sections are severely outdated and are missing recent efforts from the community, while still containing long-dead old projects (remember HAL? 😉).

AppStream

A lot of extra maintenance work will be (has been!) done on it. This includes things such as JPEG-XL support (blog post soon), sandboxed media processing, support for newer specification additions, better OARS integration (and potentially migrating it to fd.o infrastructure), improvements and API stabilization for libappstream-compose and a lot of bugfixing and resolution of issues found by AI code review.

AppStream was originally designed to parse only trusted data from vetted Linux distribution sources - this is no longer the case in today's world and in the way Flatpak uses it, so we need to increase resilience of the project.

I am also exploring a project that could vastly improve search accuracy for AppStream. Stay tuned for that.

PackageKit & System Upgrades

Many years ago, people thought we would all migrate to atomic Linux distributions and slowly not need PackageKit anymore. This has not turned out to be the case, and there are still plenty of reasons to use a package-based OS, especially in development environments. At the same time, PackageKit has been basically the same for years, and its older architecture is beginning to show. It being a daemon who's literal job it is to modify the entire system also makes it one of the most security-sensitive components that a Linux system can have, while simultaneously making it near-impossible to sandbox.

My plan is to create PackageKit 2.0 by building on the great foundation of PackageKit 1.0, but modernizing it. This will include simplifying its code and removing a bunch of features that have no more use in modern desktops, while also adding some features that PackageKit never had but that would be useful to expose to frontends (still no to interactivity an terminal-progress forwarding though!). PK 2.0 will also allow me to solve a few design issues that have been worked around in the past, by replacing them with better solutions. This will be a painful transition, as PackageKit 2.0 will break all interfaces PackageKit has - and those interfaces have been frozen for more than a decade. However, I do fully expect this change to be worth the effort.

In addition to that, I intend to look into the offline-update procedure again and improve it. The current multi-reboot operation comes with downsides, that newer systemd features such as soft-reboot can alleviate. The end result should be a much smoother, less annoying offline-update experience for users (I especially want to get rid of updates running on system startup, which I consider quite bad from a usability perspective). The new behavior is in the early drafting stages and may need direct support from systemd. I will share more about it once I can.

That's a lot of tasks!

Yes! I will see how far I get. I am moving project-by-project though, to allow me to focus on one project at a time, rather than scattering my attention continuously. Amazingly, this means that the major tasks for AppStream are already almost done, and we are nearing the 1.2.0 release. AppStream got priority, because the new Freedesktop Flatpak runtime will be released soon, and because I want FlatHub/Flatpak to have access to the new AppStream release sooner. Freedesktop and PackageKit are next on the task list.

Either way, a lot of progress is coming - if you have any feedback or want to help out, please don't hesitate to reach out! All work is happening fully in the open, so you can also chime in on the respective GitHub/GitLab tasks 😀.

You can also expect blog posts about key features or interesting changes, so stay tuned! 🙂

24 Aug 2026 9:00pm GMT

22 Aug 2026

feedPlanet KDE | English

Tellico 4.2.2 Released

Tellico 4.2.2 is available, with some improvements and bug fixes.

Improvements:

Bug Fixes:

22 Aug 2026 1:29am GMT

This Week in Plasma: UI and Performance Improvements

Welcome to a new issue of This Week in Plasma!

This week was heavy on improvements for both the user interface and also performance, helping Plasma 6.8 to shape up quite nicely:

Notable new features

Plasma 6.8

When using the system in a language other than English, you can now search for and find System Settings pages using keywords in English as well as the current language. (Sergey Katunin, systemsettings MR #418)

Search for “mouse” and it finds “souris” (“mouse” in French)

You can now disable entries on System Settings' Autostart page without having to fully delete them. (Ramil Nurmanov, plasma-workspace MR #6951)

Disable-able autostart entries

Notable UI improvements

Plasma 6.8

You can now select on the lock screen which authentication type you want to use when multiple types are available, and each one gets a nicer UI. This is an experimental change that just landed, and there's no GUI yet to set up all the authentication types. We're working on documenting it, for a start! (Harald Sitter, plasma-desktop MR #3689, plasma-workspace MR #6542, and kscreenlocker MR #318)

Selectable authentication methods on the lock screen

You can no longer set the resolution to a value so low that you'll probably break your system and be unable to recover without the intervention of an expert. (Xaver Hugl, kwin MR #9765)

Improved the alignment of the buttons on the lock screen, which is especially visible in some languages. (Ramil Nurmanov, plasma-dsktop MR #3951)

New New
Old Old

Discover now remembers which reviews you've rated as useful or useless and doesn't let you submit new ratings for them later, because the reviews server doesn't support this, and it would emit an ugly error code in response to you trying. (Taras Oleksyn, KDE Bugzilla #521866)

Auto-hide panels now hide themselves only 50 milliseconds after the pointer leaves them - reduced from the previous value of 500 milliseconds. This makes them feel much more responsive. (Seb Jo, plasma-workspace MR #6885)

The automatic brightness feature now adjusts in a smarter way to any manual brightness changes you make, so the system does a better job of learning your screen brightness preferences in various lighting conditions over time. (Matt Whitlock, kwin MR #9237)

When an Audio Volume widget is placed on a panel in standalone form, its popup now starts out large enough to accommodate everything in it without scrolling. (Nate Graham, KDE Bugzilla #522654)

New New
Old Old

Improved the way error messages from the audio subsystem are communicated to the user while using the microphone tester feature. (Nate Graham, plasma-pa MR #419)

Implemented highlighting for non-default settings on System Settings' Remote Desktop page. (Tobias Ozór, krdp MR #232)

Cursor feedback effects now dodge screen edges, so they are always fully visible. (Oliver Beard, KDE Bugzilla #498068)

KWin's notifications about GPU resets now trigger for all GPUs, not just the primary one. (Xaver Hugl, kwin MR #9768)

Improved the Breeze styling for GTK 4 apps' menus and window borders. (Rocket Aaron, breeze-gtk MR #104)

Notable bug fixes

Plasma 6.6.7

Fixed multiple issues relating to Discover failing to terminate all of its processes after quitting, which would lead to it being unable to launch properly later. (Aleix Pol Gonzalez, discover MR #1393)

Fixed multiple issues relating to System Settings not switching its sub-category sidebar view when expected during various less-common modes of interaction. (Mradul Pal, systemsettings MR #415)

The Digital Clock widget's tooltip no longer lets really long text overflow; instead it expands to make room. (Luis Bocanegra, plasma-workspace MR #6950)

The Weather Widget no longer shows info buttons for alerts that do nothing when clicked; now they only appear if they'll do something. (Nate Graham, KDE Bugzilla #519676)

Plasma 6.7.5

Fixed multiple cases where the "KDE daemon" background process could crash while reading to or writing from the system's password storage system when network conditions changed in various ways. (Mickaël Thomas, plasma-nm MR #624)

Fixed an issue where Task Manager window thumbnails could sometimes go missing. (Vlad Zahorodnii, plasma-desktop MR #3959)

The Calendar widget no longer oddly changes the date it's showing when dragged from one screen to another. (Antti Savolainen, KDE Bugzilla #472360)

Plasma 6.8

Screen readers can now read all of the UI elements on the Activities sidebar. (Nate Graham, KDE Bugzilla #519306)

Using the clipboard's "Keep the selection and clipboard the same" setting no longer breaks the ability to copy multi-cell data between sheets of a spreadsheet in LibreOffice Calc. (Tomáš Hnyk, KDE Bugzilla #505209)

When a remote desktop connection is unexpectedly severed, the System Tray icon notifying you about it now disappears as expected, instead of sticking around until the system is restarted. (Nick Haghiri, krdp MR #234)

Fixed two issues where the Audio Volume widget would show the wrong panel icon under some unusual conditions. (Seth Morris, plasma-pa MR #422)

Frameworks 6.30

The "Do you really want to permanently delete this item?" dialog for items on the desktop no longer percent-encodes special characters in file names, because it looked ugly. (Nate Graham, KDE Bugzilla #522470)

Notable in performance & technical

Plasma 6.8

Discover's background notifier process now uses much less memory when it checks for updates. (Méven Car, KDE Bugzilla #509180)

Improved Plasma's startup speed a bit by doing less unnecessary work when loading wallpapers. (Nicolas Fella, plasma-workspace MR #6898)

Further improved the speed and efficiency of KWin's "take a screenshot" functionality. (Zhora Zmeykin, kwin MR #9756)

Improved the smoothness of screen recordings made on high-refresh-rate screens. (Fililip, KDE Bugzilla #524129)

The microphone tester feature now records audio at the system's current sample rate rather than forcing a 44.1kHz sample rate, which could have ramifications elsewhere on the system if you're doing audio production. (Dan Fi, KDE Bugzilla #523693)

Frameworks 6.30

Improved the way SVG images are cached, which slightly increases speed and reduces video memory usage. (Méven Car, ksvg MR #115)

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.

22 Aug 2026 12:00am GMT

GSoC 2026: Building Join.Kde.Org

Intro

Helloooooo,
it's me again, Ansh! , the mentee who has been working on the Join.kde.org
This is the final update within the official timeline of GSoC 2026 for my project: Building Join.KDE.org.

A quick summary:
Over the past 12 weeks, I have worked on creating, designing and implementing the join.kde site into a platform that can answer most of the basic questions a new contributor has. In this post, I'll mainly focus on the progress from Week 6 to Week 12 along with my final thoughts.

For a short summary, checkout this status report.


Week 6: Contribute/suggest

This week I worked on the ADD section which got renamed to contribute, it includes several sub sections which allows people to contribute based on their interests.

Routed the explore section to KDE.org for you section so people can explore and find their own use for KDE softwares.

Created the suggest section which contains the information on how to report bugs/request for features.


Week 7: Navbar

This week was more about improvements on the navbar, I noticed with all the text the nav-bar looked way too cluttered, and simply overwhelming so with the advice from Anish and how he changed the navbar for the mentorship website, I worked up something similar and made dropdowns for the navbar so it can still have more content when clicked.


Week 8: Work on Projects

For this week I worked on the work on projects section which allows people to find groups of projects in invent based on skillset or the programming languages one knows.

I added all the groups available in KDE invent in this section which little tags of skillset.


Week 9: Incubate projects

Worked on designing Incubate projects section: which basically explains what kind of projects fit in KDE and what are the benifits of it. Linked it through a call-to-action button to the relevant resources to incubate project into KDE.


Week 10: read page/ suggest page improvement

Designed the read page with 3 main blog sites

This week was something new, the cards for the read page were simple but the new design of dropdown in suggest page took some time figuring out. added konqi images to the cards because duh it's konqi (but hey we can change them eventually).


Week 11: Divulge Page

Created the Divulge page which is more for people who want to create content for kde whether it be promo material, tutorials or whether help in promotion itself.

It's kind of a copy of the read page but it can always be changed.


Week 12: Events Page

Created the Events page, which included akademy as the main event and then a section for event's KDE hosts which had some sprints and conf.in and then added the section for the events KDE participates in which will likely be expanded eventually.

Fixed some tiny typos and dead link issues.


Related Merge Requests


My Own Development

I learned a lot from this project, both in coding and beyond. Here are the things I remember right now, though the list could go longer:


Conclusion

Overall, GSoC 2026 has been a great experience for me. Over these 12 weeks I got the chance to work on issues that i faced myself and fix them in a way that helps everyone joining KDE.

Along the way I learned some technical skills, learned how to work across different timezones, to communicate better, and most importantly realized that long discussions are often more necessary than jumping straight into implementation, especially in open source communities.

Big thanks to my mentors Anish and umm Conulting mentor Paul

This wraps up my GSoC journey, but I will be sticking around KDE and plan to explore other projects, especially in the mentorship side of things. See you around in the community.


How to Reach Me

22 Aug 2026 12:00am GMT

21 Aug 2026

feedPlanet KDE | English

KDE Linux experiences

I daily drove KDE Linux for almost a year and I liked it, but I'm also switching back to Fedora KDE. Here's my ramblings about it all.

KDE Linux is the hot new Linux distro from KDE themselves. At the moment it uses Arch Linux as it's base but with heavy modifications and changes. You can read more about it on the site, but to sum up: It's an atomic/"immutable" distro that does not have any kind of package management outside of installing flatpaks. (Do note that they're experimenting on using buildstream instead of Arch Linux.)

As one of the KDE devs I've been daily driving it on my desktop, which I use for both work and leisure (gaming).

The following text can be quite technical as I am viewing this through my developer workflow lense, though I will also touch on regular user things.

Upsides

My lizard fursona making an smile face.

For general purpose computing and KDE dev, things are looking great!

Honestly, it works rather well, considering the alpha status. And for development purposes, the nightly builds of the newest hottest stuff from our git repos is very nice: I don't have to build everything myself every morning.

Though there are some issues with that too: Sometimes the servers are not producing a new image, for reason or another, so I may end up building things myself anyway. Some other times, there is an image that just has some broken change in. Luckily in those situations I can just boot a previous image and use that.

What I really liked though was the systemd-sysext workflow. Sysext is a tool that allows me to layer my changes to the system on top of the previous stuff. So when the system is running /usr/bin/konsole it actually runs my self-built /home/akseli/Projects/kde/usr/bin/konsole. As far as the system is concerned, it's in the same path.

What we currently do in other distros is some environment flag magic to run things from the build-path, instead of /usr/bin/. It also works fine, but can be a bit more brittle, especially when testing something like a login manager.

The workflow is simple:

It feels more robust and easier to manage.

So on this front, KDE Linux has been really fun to work with. Perfect for testing and development of all the KDE Plasma stuff.

When it comes to applications from flatpaks, they usually work fine, but they can have the typical flatpak issues: Some app needs a permission to a folder that it can't see, so you have to turn off the app, add permissions, turn back on the app, yadda yadda. Apps that use XDG portals properly usually work fine, though there's a bug somewhere in the stack that when the system updates (the atomic image of the OS changes), the portal forgets the folder paths and you have to reopen the file for the path to refresh.

When it comes to gaming stuff, Steam Flatpak has worked really well. I have not noticed any issues compared to the native package. Same with Bottles, all has been just fine and nice. Though sometimes there has been bugs with running games, such as games not locking your cursor properly, but they're often gone with the next update as more people spot these bugs now.

Downsides

My lizard fursona making an sad face.

With anything more complex than what the system is intended for, things get difficult.

As an atomic distribution, it is expected that any dev tools that are not already installed on the machine, such as your favorite terminal tools or text editors, you will have to either to download them from the internet like a Windows user (plop the binary in ~/.local/bin), or use Distrobox/Kapsule/Toolbox... etc.

Container workflow feels cumbersome to me most of the time. For KDE work, since all the tools to build and run applications are already installed on the system, it's rather effortless. But when I want to continue a game project like my Artificial Rage game project, I would have to enter a distrobox, install all the things, then edit and build the application inside that container. And when I switch a project, it's expected I create a new container for that, and so on.

I don't really like that. I prefer my tools to just be available on the host so I can run them without messing with containers: I have bad memory and am terrible with context switching, so I keep forgetting changing or creating containers.

What I did instead was create bunch of dumb scripts called dbi that are a wrapper for installing tools and "exporting" them from the distrobox so I can use them on host without having to enter them. By exporting I mean they use the distrobox-export command that creates a symlink to your ~/.local/bin with the app name, so you can just run them from terminal like always.

It's not ideal, but it works. Sadly this comes with a performance deficit when running programs like eza, which is ls alternative that shows icons. I like my little icons. :) When running eza directly on host, it runs immediately, but when using the distrobox version, it will take 1-2 seconds, which gets surprisingly annoying when going through folders. No idea if that could be improved somehow, but the speedbump is likely from the part where it enters the container.

This reveals the larger downside: Lack of "blessed" package management, especially for commandline applications.

I have tried multiple tools, but all of them had some issues:

Which left me with always just using distrobox and accepting the performance and UX penalty.

Another thing I miss is having KMail and KOrganizer just installed on my system, talking with my digital clock applet so when I click on it, I would see my calendar event. It's very small thing, but it's huge quality of life feature for me. The Kontact flatpak can't do that, and it's sadly really broken in general.

Lastly, as I work on the Union style engine, flatpak applications will not see the Union styles yet. This means I will have either to build a separate KDE platform for it myself using the CI, which can be super slow. Especially if I have to build it multiple times to see the changes. I can build some apps myself but more complex ones such as KMail will take a lot of time for me. This is where I miss just installing an app from dnf on Fedora, as it can just use the styles on my computer, as the app is also installed on the host like the Union style is.

Regular use and my use

For regular user, who plays video games and uses a web browser and never really touches terminal, I think KDE Linux will do very fine, especially when it starts having stable releases that do not update every night. At it's current iteration, it's more a developer tool than something I would recommend for regular user, unless you're super enthusiastic or have spare machines.

But me, being the nerd that writes blogposts about Linux and KDE that I am, I like having more control over the system. I don't mind having all my dev tools cluttered on my host system. (However if it touches NPM, it's going into a container. Luckily I rarely have to bother with that.) And in general, atomic distributions can be rather opinionated: If those don't match your view of the distribution, it can be hard to get along as you can't really modify it for your usecase. (Yes I know about ostree.)

So I would say that the more complicated your usecase gets and if you need tools that are not already in the base system, it can get quite cumbersome.

So that's why I'm switching back to Fedora KDE: It gave me all the control I needed. I will likely stil use flatpaks for almost all apps on my machine though, as I do find sandboxing rather useful at times.

I highly encourage anyone who wants to test newest KDE stuff to run KDE Linux on a VM or a secondary machine. I will keep using KDE Linux on my laptop as there I don't have so many different needs, and I want to just install the new shiny stuff from git, not build on it, as building anything on that laptop is super slow.

This whole thing has also made me realise something..

My lizard fursona making an smile face.

All distros have their own strenghts, weaknesses and tradeoffs. It's all about choosing what works for you and your system.

My desktop system will benefit from Fedora KDE, but my laptop will benefit from KDE Linux.

I will keep observing how the story of KDE Linux develops. I may try it again on my desktop later, we will see.

Some of you reading might ask: "But why Fedora KDE?"

It's one of the nicest distros I've used when it comes to KDE stuff. The people working on Fedora KDE are some of the nicest folks I've met with, and they work very closely with KDE upstream. Fedora KDE follows KDE releases really closely so it feels like I'm always on current release, making the development workflow very easy.

Thanks for reading!

ps. Friend sent me this and I cackled like a hyena.

Dumb meme about me liking the popup more than security features

21 Aug 2026 3:49pm GMT

20 Aug 2026

feedPlanet KDE | English

Final week: Wrapping Up My GSoC Journey

The last two weeks were spent polishing the mobile-friendly selection mode based on Marco Martin's review feedback, wrapping up the multi-select work that's been the focus since weeks 9 and 10.

Selection Mode Refinements (!46)

The first version of Selection Mode had a few issues. The checkbox was not properly aligned with the entry text, so I changed the delegate to use a RowLayout. This keeps the checkbox directly next to the label and vertically centered.

Marco Martin also suggested that the whole row should be clickable, not just the checkbox. I moved the selection logic into a shared page.toggleSelection() function and used it for both mouse and touch taps. This makes selection work the same way on both devices.

For the toolbar, only "Delete Selected Secrets" and "Exit Selection Mode" should be available during selection mode. I added visible: !page.selectionMode to the other actions so they are completely hidden, including from the overflow menu.

20 Aug 2026 9:52am GMT

OLE-Dispatch When Doing MFC/Qt Migration

OLE-Dispatch When Doing MFC/Qt Migration

Most people who have ever ported an application from MFC to Qt know that at some point they have to integrate a QWidget into an MFC part of the user interface. Or the other way around, but that's a different story. Normally you would simply use a QWinWidget for that to do exactly what you want. But what happens if your application created the old MFC window as an OLE Control Extension (OCX)? In that case the easiest solution is to intercept the control name and provide it to your own factory providing the correct widget, which can then be embedded in a QWinWidget. Or you could use plugins to stick to the idea of it being DLLs. All roads lead to Rome. But what if your OLE based application uses the OLE-Dispatch way of initializing the controls? Setting properties, invoking methods, and so on?

I had exactly that problem and came up with a solution which glues OLE's IDispatch interface together with Qt's QMetaObject. That means you can access your QWidget's (or any other QObject) properties via the IDispatch interface provided by my QObjectDispatcher class. They only need to be declared via Qt's Q_PROPERTY macro. The same applies to slots and methods marked with Q_INVOKABLE.

Let's see how this is being used:

// This is the widget we're working with:
QWidget* someWidget = ...;
// Lets' create our dispatcher:
// You have to delete it yourself or let COM do it for you via IUnknown::AddRef/Release
QObjectDispatcher* dispatcher = new QObjectDispatcher(someWidget);
// The code until this point is the only part which is new in your application, as
// far as dispatching the calls/properties is involved. From here, it's exactly the same;
// from the OLE MFC application's perspective we often only have an IUnknown:
IUnknown* pUnknown = dispatcher;
// Now get the interface and start playing with it:
CComQIPtr<IDispatch> pDispatch(pUnknown);
// First we have to retrieve the index of the property we change
LPOLESTR name = "windowTitle";
DISPID dispId = -1;
pDispatch->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_SYSTEM_DEFAULT, &dispId);
// Now that we have the index, we change the property
VARIANT varTitle = CComVariant("New window title");
DISPSPARAMS dispParams = { nullptr, nullptr, 0, 0 };
dispParams.rgvarg = &varTitle;
dispParams.cArgs = 1;
pDispatch->Invoke(dispId, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT,
&dispParams, nullptr, nullptr, nullptr);

As you can see the API of IDispatch is not fun to work with and there's no reason to use this except of making that kind of stuff work in existing MFC/OLE-applications while porting. I strongly advise against using it in new code.

How does that work? Well, the IDispatch interface works in two steps. First, you have to request the ID of the method/property you want to access via GetIDsOfNames. You can request several IDs at the same time. QObjectDispatcher traverses the methods of the handled QObject via the corresponding QMetaObject. It then returns the index of the method. If there's no method found, it checks for a property. If it's found, it returns the index of the property plus the number of methods, to be able to recognize the type afterwards. If neither a method nor a property by that name is found, an error is reported.

Let's have a short look at how GetIDsOfNames roughly works. That example code cannot be used directly but gives you a rough idea of the implementation:

HRESULT QObjectDispatcher::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cnames, LCID, DISPID* rgDispId)
{
// GetIdsOfNames supports requesting several at the same time
for (uint i = 0; i < cNames; ++i) {
// note you cannot use QMetaObject::indexOfMethod directly,
// since it expects the fully qualified name
auto indexOfMethod = []() { /* ... */ };
const int methodIndex = indexOfMethod(rgszNames[i]);
if (methodIndex != -1) {
rgDispId[i] = methodIndex;
continue;
}
}
// now do the same for the properties...
// [...]
return S_OK;
}

In the second step you can call Invoke to either invoke a method or to access a property. For this you need to pass a struct DISPSPARAMS which contains the arguments. rgvarg is an array to several arguments which are stored in reverse order. QObjectDispatcher will now pick the method or property (depending on the id passed and whether you passed DISPATCH_PROPERTYPUT, DISPATCH_PROPERTYGET, or DISPATCH_METHOD) and call it. For this it has to translate the arguments. For method calling, they need to be translated to QMetaMethodArgument or QMetaMethodReturnArgument for the return value. For properties, we have to go through QVariant to be able to read/write the property via Qt's Meta Object System.

Let's also have a look at how Invoke works internally. Even here, this code piece is not complete and won't work directly:

HRESULT QObjectDispatcher::Invoke(DISPID dispIdMember, REFIID riid, LCID, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO*, UINT*)
{
if (wFlags == DISPATCH_METHOD) {
const QMetaMethod method = metaObject->method(dispIdMember);
// translate return argument
auto returnArgument = translateReturnArgument(method, pVarResult);
// then call the method, translating all the arguments
invokeMethod(method, m_object, returnArgument, translateArgument(0), ...);
return S_OK;
}
// [...]
}

So, in your application, which expects a CWnd generated by some factory, you do the following:

  • Create a wrapper CWnd which you actually return to the caller. This CWnd will in some way provide access to an IDispatch instance like it was doing before your port
  • Create a QWinWidget residing inside of the CWnd.
  • Put your portedQWidget into the QWinWidget
  • Create a QObjectDispatcher working on your ported QWidget
  • Make your CWndreturn this QObjectDispatcher as IDispatch

Now your application should threat your ported widget as it was never ported. Of course, you have to provide the same properties and methods as the system expects using Qt's Meta Object System (Q_PROPERTY, Q_INVOKABLE).

There are, of course, some limitations:

  • You cannot overload names of methods as OLE doesn't allow that
  • Optional parameters are not supported, as QMetaMethod doesn't reflect that (or I simply haven't figured out, who knows…)
  • You have to provide a type-mapping for the argument types. The example project linked below provides only IUnknown*, int, and QString as these are the most common ones and show how it works
  • The example solution is not thread-safe

Find the complete code as a little example project on KDAB's GitHub repository at: https://github.com/KDABLabs/blogs-qt/tree/main/MFC-Migration-OLE-Dispatch

The post OLE-Dispatch When Doing MFC/Qt Migration appeared first on KDAB.

20 Aug 2026 8:32am GMT

Monthly Report - August 2026

Animation on Android and new Transform Tool and Color Sampler features? Read on for a look at development news and the Krita-Artists forum's featured artwork from last month.

Development Report

Krita 5.3.3 Released

Krita 5.3.3 was released with various fixes as well as revamped Android supporter donations.

Developments in Krita Plus

Animation rendering on Android is now possible, via MediaEncoder and LibAV. (change by Carsten Hartenfels)

Support for the XCF file format native to GIMP has been removed, as the xcftools library that was used is long outdated and unmaintained. It's recommended to instead use GIMP to load XCF, and use the OpenRaster (.ora) interchange format for exchanging files between programs. (change)

Some font-related crashes at startup have been fixed. (bug; change 1, change 2 by Wolthera van Hövell)

The new menu options on Android for interface scaling and supporter options not appearing if toolbars had previously been customized has been fixed. (change by Carsten Hartenfels)

A crash when redoing joining and then deleting paths with the Edit Shapes tool has been fixed (bug; change by Elena Sagalaeva), as well as deleting subpaths deleting the wrong ones due to shifted indices (bug; change by Luna Lovecraft). Additionally, path segments can now be deselected with Shift-click (change by Luna Lovecraft).

Developments in Krita Next

The Transform Tool's Liquify mode has a new mode. "Restore Shape" undoes previous distortions while keeping the new position of a shape, and optionally keeping the rotation, scale, and stretch. (change by Moritz Staudinger)

Using the Transform Tool to rotate, distort, and move a triangle, then using Restore Shape to remove the distortions while keeping the new rotation, position, and scale.

The Color Sampler can now show a zoomed in preview in order to precisely pick a pixel, when using the circle color preview. This "Zoom Preview (Pixel-Perfect Color Sampler)" option is in preferences under General->Cursor alongside the option to switch between the circle and rectangle preview. (change by Đạt Lê)

Using the zoomed color sampler preview to pick Kiki's eye color from the Krita 5.3/6.0 splash artwork without zooming in on the entire image.

Various HDR metadata can now be saved into .kra files and viewed in Image Properties. This HDR metadata will also be used when rendering animations. (change by Wolthera van Hövell)

Community Report

July 2026 Monthly Art Challenge Results

The winner of the "An Imaginary Friend" challenge is…

Join This Month's Art Challenge!

For August's Kiki-focused theme, last month's winner has chosen "Kiki's Epic Adventure". The optional challenge is to create separate assets for textures or repetitive elements and paste them into the scene. Build up Kiki's story and take us on a dramatic adventure!

Featured Artwork

This month's featured forum artwork, as voted in the Best of Krita-Artists - June/July 2026:

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 - July/August 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!

Krita's mascot Kiki putting money in a piggy bank

Additional Changes

Krita Plus (Stable, 5.3.4/6.0.4-prealpha):

Krita Next (Unstable, 5.4.0/6.1.0-prealpha):

Nightly Builds

These pre-release versions of Krita are built every day.

Note that there are currently no Qt6 builds for Android.

Get the latest bugfixes in Stable Krita Plus (5.3.4/6.0.4 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

20 Aug 2026 12:00am GMT

KDE Gear ⚙️ 26.08

A script element has been removed to ensure Planet works properly. Please find it in the original post.

Okular

Okular is KDE's flagship document reader most commonly used for reading, signing, and annotating PDFs while also being an excellent eBook and comic reader that can also render Markdown.

In this new version, we have reinforced the signing features resulting in the process becoming more secure and streamlined. We have also melded both settings dialogs (Configure Backends and Configure Okular) into one, making everything less confusing.

More visible features include changes to the text selection: a triple click now selects a whole line, and annotations: Okular will automatically include any highlighted or underlined text in an associated note. You can also copy and paste some of your annotations (notes and inline comments) within the same document or onto another.

Dolphin

Dolphin is KDE's powerful file/folder/server explorer. Version 26.08 goes even further and improves its integration with KDE Connect. When exploring files on your phone from Dolphin, click on the Open KDE Connect button at the top of the window to make the KDE Connect app appear.

If you are browsing a busy directory, open the Filter Bar with Ctrl + i to use plain text, globbing (like you would use with the ls command in the terminal), or Regular Expressions to sort through the files.

The filter bar can now take plain text, globbed text, and regexes.

In a similar vein, you can now group files and folders independently from the sorting criterion. This means you can order files alphabetically by name and then group the files by type.

And if the number of tabs you have open gets out of hand, right click on a tab and you can choose to close the tabs to the right, left, or both.

Konsole

Konsole is KDE's terminal emulator and comes with many features and utilities.

A feature that has been around for some time is that you can hold down the Alt key, click on an underlined file name, and drag it somewhere else. For example, you can drag an image onto an image editor to open it ready for editing, or drag it onto a text editor and it will copy the path to the file.

The same can now be done with links, email addresses, and color terms too. Drag a link to an empty tab in your browser and it will open the page the link points to. Move the link onto a text editor, and it will download the HTML of the page ready for editing. Drag a color code onto an image in Krita and it will flood the layer with that color. Or drag the same color code onto a text editor and the color's hexadecimal code will be typed out for you.

Kdenlive

Kdenlive is KDE's feature-rich video editor. 26.08 comes with lots of quality of life improvements and polishing.

In the effects department for example, you can now move the Transform effect's rotation axis wherever you want, instead of having it fixed to the center of the item you need to rotate.

The Gradient Map effect now lets you add multiple stops to a gradient, and you can now adjust the curves in the Curves (avfilter) effect independently to get the color hues you need.

Down on the timeline, you can copy a selection to a new sequence, or have Kdenlive create audio tracks automatically as needed for your clips. You can also reorder tracks and configure different colors for each item type - video, image, title, etc.

Choose the colors to use with different kinds of clips.

In the Titler, you can now copy and paste objects, give rectangles rounded corners, and snap objects to the center and edges of the screen as well as to other items. This feature includes a visual guide to help you.

Minuet

Minuet is KDE's application for music education. It helps students and musicians train their ears with exercises for intervals, chords, scales, and rhythms.

Minuet has a new interface built to work well on both desktop and mobile screens. The home page and navigation drawer make exercise categories easier to find while making the exercise browser present each activity as a card with a short description. Your current category remains highlighted, and the new search field filters exercises by their translated names and descriptions. Exercise pages have also been reorganized to use the available space better on narrow windows and phones.

Full changelog here

Where to get KDE Apps

Although we fully support distributions that ship our software, KDE Gear 26.08 apps will also be available on these Linux app stores shortly:

Flathub
Snapcraft

If you'd like to help us get more KDE applications into the app stores, support more app stores and get the apps better integrated into our development process, come say hi in our All About the Apps chat room.

20 Aug 2026 12:00am GMT

19 Aug 2026

feedPlanet KDE | English

Btrfs Snapshot Integration in KDE

I have been working on integrating Btrfs snapshots into KDE software. The central part of this work has been realized in the form of KIO Snapshot, which has just been released. Here I want to discuss what it is, how it works, how it was developed, and the surrounding work across KDE.

Background

Among the key features of Btrfs is the ability to take efficient snapshots of subvolumes

. They are efficient because Btrfs makes snapshots share file extents with the originals, so snapshots only take up additional space where they differ from the original. Thus it is cheap to take snapshots frequently without worrying about disk space.

This can be used to build very handy universal "undo" or "time travel" functionality for the user. Yet, though there are graphical tools to work with Btrfs snapshots such as Btrfs Assistant, these are separate from normal file browsing, and are rather technical tools concerned with the orchestration of snapshots. Direct integration of snapshots into the file browser itself for mundane end-user purposes, like Windows has with Previous Versions or macOS with the famous Time Machine, has been lacking in the Linux world. The aim of KIO Snapshot is to build that kind of direct integration for KDE.

What it is

KIO Snapshot lets Dolphin (indeed any KDE software) list and access Btrfs snapshots of a file or subvolume.

You can right-click on a file and go to a folder view showing you all the distinct past versions of it as saved in your snapshots. (At first, I wrote the snapshots-for-file case as a dialog with buttons to open or restore (like Windows' Previous Versions feature), but I changed it to be a full virtual folder, since that would be much more flexible - now a user could select multiple previous versions and open them in a comparison tool, or copy them somewhere, or check their metadata easily, or whatever else they wished.)

Screenshot showing the filesnapshots KIO worker, listing the versions of a file

You also have views into entire directory trees of subvolumes at their various snapshots.

Screenshot showing the snapshot KIO worker, listing the snapshots of a subvolume

Note that it does not take snapshots, it only allows access to them. To take snapshots, you would have to do it manually, or through an orchestrator like Snapper

.

How it works

Mainly it uses libbtrfsutil from btrfs-progs to talk to the filesystem, and KDE Frameworks' Solid to query filesystems and mounts on a more meta level.

Now, the Btrfs API is quite conservative in what it allows non-superusers to do with it. Even a question as seemingly innocuous as "what subvolume is this path in?" cannot be answered for a non-superuser directly. The consequence of this is that on my first attempt at building this integration, I had one component running as a system-level DBus service which would let users query stuff like this for files they owned.

Luckily, a nudge from Méven Car made me realize that with some working-around, I could build out all the features without anything running as root. For example, while Btrfs is loath to let you get the subvolume ID for a path or vice versa, it will happily give you a listing of the subvolumes (that you can access) under a path. From there you can derive all the information needed.

Using this, KIO Snapshot implements a KIO worker that provides the snapshot:// protocol, which will be understood by all programs which use KDE Frameworks. This protocol provides a virtual view into the snapshots in a filesystem along two dimensions: the snapshots for a given subvolume, each of which is a browsable directory tree in itself; and the snapshots for a given file across all snapshots of its containing subvolume.

Allied work

Aside from KIO Snapshot itself, I also worked on some small things in other parts of KDE to support it.

KDE Linux

KDE Linux will soon ship with Snapper and KIO Snapshot out-of-the-box.

Hadi Chokr did a lot of excellent integration work here: migrating the filesystem layout to make all user homes subvolumes, and automatically integrating and configuring Snapper for all users seamlessly.

This is part of a broader initiative in KDE Linux to improve data backup and restore systems, which has also overseen improvements elsewhere, such as in the Kup backup system.

Release

The first stable release of it was made today (thanks to Bhushan Shah for helping with the release process). I imagine it should be getting packaged into distros fairly soon, thanks to the infrastructure that comes with being a KDE project, but even then it should be easy enough to compile from source. Please use it and report bugs and requests, thank you!

19 Aug 2026 6:30pm GMT

Linux Samba server and Linux Samba client tutorial

I want to share from the server a directory, and use that directory share on the client computer. Using the Microsoft Windows "Server Message Block" (SMB)/CIFS directory sharing protocol.
I have created two Kubuntu 26.04 virtual machines: a Samba server and a Samba client.

Samba server: 192.168.122.202. Computer name: ASERVER. User name: sadmin.
Samba client: 192.168.122.92. Username: administrator.

A video version of this tutorial is available https://www.youtube.com/watch?v=mNgBZtunNnE .

1.Configure the Samba server computer

Kubuntu 26.04 by default uses the ufw firewall solution and ufw is disabled. Configuring a firewall is another topic.
Create the directory /home/sadmin/smbshare . Put some files there.

# Become the user root.
sudo su
ufw status
# Says "Status: inactive".
apt update
apt install samba smbclient
cat > /etc/samba/smb.conf
[linux_smbshare]
comment = Linux smbshare
path = /home/sadmin/smbshare
browseable = yes
read only = no
guest ok = no
valid users = sadmin
create mask = 0660
directory mask = 0770
EOF
testparm
systemctl restart smbd
smbpasswd -a sadmin
# I use the same password for the user sadmin. Both for the
# Linux user account and for the Samba user account.
pdbedit -L
# Stop being the user root.
exit
smbclient //localhost/linux_smbshare -U sadmin
ls
# Exit smbclient shell/REPL.
exit

Note that two parts of NETBIOS protocol are disabled by default: the one similar to DNS (hostname to IPv4 conversion) and the one where the Samba server advertises itself on the Local Area Network (LAN) as an SMB server.

testparm
says:
[global]
disable netbios = Yes

Bonus points if the Samba server computer has an IPv4 address that does not change.
Restart the Samba server computer.

2.Configure the Samba client computer

sudo apt update
sudo install smbclient cifs-utils avahi-utils

The information that, years ago, we could get using the NETBIOS protocol can now be accessed from a Samba client computer using other technologies:

* When listing SMB servers on the LAN. Instead of using NETBIOS. We can use the DNS-Based Service Discovery (DNS-SD) protocol (avahi).

$ smbtree -N
main: This is utility doesn't work if netbios name resolution is not configured.
If you are using SMB2 or SMB3, network browsing uses WSD/LLMNR, which is not yet supported by Samba.
SMB1 is disabled by default on the latest Windows versions for security reasons. \
It is still possible to access the Samba resources directly via \name or \ip.address.
$ avahi-browse -rtp _smb._tcp
+;virbr0;IPv4;ASERVER;Microsoft Windows Network;local
=;virbr0;IPv4;ASERVER;Microsoft Windows Network;local;aserver.local;192.168.122.202;445;

* Converting from "ASERVER" to an IPv4 address does not work. Converting from "ASERVER.local" to the IPv4 address 192.168.122.202 works because of avahi DNS-SD DNS server/client, mdns4_minimal.

$ ping ASERVER
ping: ASERVER: Temporary failure in name resolution
$ ping ASERVER.local
PING ASERVER.local (192.168.122.202) 56(84) bytes of data.
64 bytes from 192.168.122.202: icmp_seq=1 ttl=64 time=0.110 ms
$ cat /etc/nsswitch.conf | grep hosts
hosts: files mdns4_minimal [NOTFOUND=return] mymachines dns
# Continue configuring the Samba client.
sudo mkdir -p /media/192_168_122_202_linux_smbshare
# Without file with SMB username and password.
sudo mount -t cifs //192.168.122.202/linux_smbshare /media/192_168_122_202_linux_smbshare \
-o username=sadmin,uid=administrator,gid=administrator
sudo umount /media/192_168_122_202_linux_smbshare
# With file with SMB username and password.
# As the user administrator.
cat  /home/administrator/.smbcredentials
username=sadmin
password=pass123
EOF
sudo mount -t cifs //192.168.122.202/linux_smbshare /media/192_168_122_202_linux_smbshare \
-o uid=administrator,gid=administrator,credentials=/home/administrator/.smbcredentials
sudo mount /media/192_168_122_202_linux_smbshare
sudo umount /media/192_168_122_202_linux_smbshare

Append to /etc/fstab the line:

//192.168.122.202/linux_smbshare /media/192_168_122_202_linux_smbshare cifs noauto,uid=administrator,gid=administrator,credentials=/home/administrator/.smbcredentials 0 0

Note that "//192.168.122.202/linux_smbshare" will not be mounted automatically because of "noauto" in /etc/fstab.
Each time you reboot your Samba client computer and want to use the shared directory, run:

sudo mount /media/192_168_122_202_linux_smbshare

Advantages: if the Samba server is down or configured incorrectly or if the network connection between Samba server computer and Samba client computer is not great. The Samba client computer will not be affected.

3.I test the KDE app smb4k

https://apps.kde.org/smb4k is a KDE GUI app that acts as an SMB client. It can list SMB servers available on the LAN. It can determine the "SMB domain" of a computer. It can get the list of shared directories. It can list the contents of shared directories. It can mount a shared directory using "mount.cifs".

kde-builder smb4k
kde-builder --run smb4k

I have encountered some issues:

A. If server is Kubuntu 26.04, smb4k cannot get the list of shares of the SMB server. https://invent.kde.org/network/smb4k/-/merge_requests/24
This is because "ping ASERVER" does not work, but "ping ASERVER.local" works correctly.

B. In smb4k when hovering on top of a SMB server, a tooltip is shown that says "Workgroup: LOCAL" instead of "Domain: WORKGROUP".
From the command line, we can get the correct "SMB domain" for an SMB server:

$ rpcclient -U % -c "lsaquery" 192.168.122.202
Domain Name: WORKGROUP
Domain Sid: (NULL SID)

A fix for this issue is more complicated because each time dnssd/kdnssd notifies smb4k that an SMB server named A exists on the LAN. smb4k should decide if this computer was received previously. If not, smb4k should run the command line above and get the "actualDomain" from the STDOUT of the process. Bonus points if getting the correct SMB domain is non blocking, creates at most 5 "rpcclient" sub processes at the same time.

19 Aug 2026 6:07pm GMT