17 Feb 2026

feedPlanet KDE | English

AGL’s Business Intelligence Journey – Understanding Activity

Measuring activity is not about producing more metrics. It is about supporting better decisions and enabling continuous improvement. We restricted our analysis to main/master to observe validated flow and kept visualizations simple to promote adoption across the community.

17 Feb 2026 7:00am GMT

Kapsule v0.2.1: sponsored by my wife's horror movies

In my last post, I made a solemn vow to not touch Kapsule for a week. Focus on the day job. Be a responsible adult.

Success level: medium.

I did get significantly more day-job work done than the previous week, so partial credit there. But my wife's mother and sister are visiting from Japan, and they're really into horror movies. I am not. So while they were watching people get chased through dark corridors by things with too many teeth, I was in the other room hacking on container pipelines with zero guilt. Sometimes the stars just align.

coding while untold horrors occur in the next room


Here's what came out of that guilt-free hack time.

Konsole integration: it's actually done

containers in new tab menu


The two Konsole merge requests from the last post-!1178 (containers in the New Tab menu) and !1179 (container association with profiles)-are merged. They're in Konsole now. Shipped.

Building on that foundation, I've got two more MRs up:

!1182 adds the KapsuleDetector-the piece that actually wires Kapsule into Konsole's container framework. It uses libkapsule-qt to list containers over D-Bus and OSC 777 escape sequences for in-session detection, following the same pattern as the existing Toolbox and Distrobox detectors. It also handles default containers: even if you haven't created any containers yet, the distro-configured default shows up in the menu so you can get into a dev environment in one click.

!1183 is a small quality-of-life addition: when containers are present, a Host section appears at the top of the container menu showing your machine's hostname. Click it, and you get a plain host terminal. This matters because once you set a container as your default, you need a way to get back to the host without going through settings. Obvious in hindsight.

The OSC 777 side of this lives in Kapsule itself-kapsule enter now emits container;push / container;pop escape sequences so Konsole knows when you've entered or left a container. This is how the tab title and container indicator stay in sync.

Four merge requests across two repos (Konsole and Kapsule) to get from "Konsole doesn't know Kapsule exists" to "your containers are in the New Tab menu and your terminal knows when you're inside one." Not bad for horror movie time.

Configurable host mounts: the trust dial is real

In the last post, I talked about making filesystem mounts configurable-turning the trust model into a dial rather than a switch. That's shipped now.

--no-mount-home does what it says-your home directory stays on the host, the container gets its own. --custom-mounts lets you selectively share specific directories. And --no-host-rootfs goes further, removing the full host filesystem mount entirely and providing only the targeted socket mounts needed for Wayland, audio, and display to work.

The use case I had in mind was sandboxing AI coding agents and other tools you don't fully trust with your home directory. But it's also useful for just keeping things clean-some containers don't need to see your host files at all.

Snap works now

Here's a screenshot of Firefox running in a Kapsule container on KDE Linux, installed via Snap:

screenshot of firefox in snap in kapsule


I expected this one to be a multi-day ordeal. It wasn't.

Snap apps-like Firefox on Ubuntu-run in their own mount namespace, and snap-update-ns can't follow symlinks that point into /.kapsule/host/. So our Wayland, PipeWire, PulseAudio, and X11 socket symlinks were invisible to anything running under Snap, resulting in helpful errors like "Failed to connect to Wayland display."

The fix was straightforward: replace all those symlinks with bind mounts via nsenter. Bind mounts make the sockets appear as real files in the container's filesystem, so Snap's mount namespace setup handles them correctly. That was basically it.

While I was in there, I batched all the mount operations into a single nsenter call instead of running separate incus exec invocations per socket. That brought the mount setup from "noticeably slow" to "instant"-roughly 10-20x faster on a cold cache. And the mount state is now cached per container, so subsequent kapsule enter calls skip the work entirely.

NVIDIA GPU support (experimental)

jensen huang with nvidia logo and chip


This one's interesting both technically and in terms of where it's going.

Kapsule containers are privileged by design-that's what lets us do nesting, host networking, and all the other things that make them feel like real development environments. The problem is that upstream Incus and LXC both reject their NVIDIA runtime integration on privileged containers. The upstream LXC hook expects user-namespace UID/GID remapping, and the default codepath wants to manage cgroups for device isolation. Neither applies to our containers.

So I wrote a custom LXC mount hook that runs nvidia-container-cli directly with --no-cgroups (privileged containers have unrestricted device access anyway) and --no-devbind (Incus's GPU device type already passes the device nodes through). This leaves nvidia-container-cli with exactly one job: bind-mount the host's NVIDIA userspace libraries into the container rootfs so CUDA, OpenGL, and Vulkan work without the container image shipping its own driver stack.

There's a catch, though. On Arch Linux, the injected NVIDIA libraries conflict with mesa packages. The container's package manager thinks mesa owns those files, and now there are mystery bind-mounts shadowing them. It works, but it's ugly and will cause problems during package updates. I hit this on Arch first, but I'd be surprised if other distros don't have the same issue-any distro where mesa owns those library paths is going to complain.

So NVIDIA support is disabled by default for now. The plan: build Kapsule-specific container images that ship stub packages for the conflicting files, and have images opt-in to NVIDIA driver injection via metadata. Two independent flags control the behavior: --no-gpu disables device passthrough entirely (still on by default), and --nvidia-drivers enables the driver injection.

Architecture: pipelines all the way down

turtles all the way down meme


The biggest behind-the-scenes change in v0.2.1 is the complete restructuring of container creation. The old container_service.py was a 1,265-line monolith that did everything sequentially in one massive function. It's gone now.

In its place is a decorator-based pipeline system. Container creation is a series of composable steps, each a standalone async function that handles one concern:

Pre-creation: validate → parse image → build config → store options → build devices
Incus API call: create instance
Post-creation: host network fixups → file capabilities → session mode
User setup: mount home → create account → configure sudo → custom mounts → host dirs → enable linger → mark mapped

Each step is registered with an explicit order number and gaps of 100 between steps, so inserting new functionality doesn't require renumbering everything. The decorator handles sorting by priority with stable tie-breaking, so import order doesn't matter.

This pattern worked well enough that I plan to extend it to other large operations-delete, start, stop-as they accumulate their own pre/post logic.

On the same theme of "define it once, use it everywhere": container creation options are now defined in a single Python schema that serves as the source of truth for the daemon's validation, the D-Bus interface (which now uses a{sv} variant dicts, so adding an option never changes the method signature), and the C++ CLI's flag generation. Add a new option in Python, recompile the CLI, and you've got a --flag with help text and type validation. Zero manual C++ work.

The long-term plan is to use this same schema to dynamically generate the graphical UI in a future KCM. Define the option once, get the CLI flag, the D-Bus parameter, the daemon validation, and the Settings page widget-all from the same schema.

First external contributor

Marie Ramlow (@meowrie) submitted a fix for PATH handling on NixOS-the first external contribution to Kapsule. I don't have a NixOS setup to test it on, so this one's on trust. That's open source for you: someone shows up, fixes a problem you can't even reproduce, and you merge it with gratitude and a prayer.

Testing

The integration test suite grew substantially. New tests cover host mount modes, custom mount options, OSC 777 escape sequence emission, and socket passthrough. The test runner now does two full passes-once with the default full-rootfs mount and once with --no-host-rootfs-to verify both configurations work.

Bugs caught during testing that would have been embarrassing in production: a race condition in the Incus client where sequential device additions could clobber each other (the client wasn't waiting for PUT operations to complete), and Alpine containers failing because they don't ship /etc/sudoers.d by default.

CI/CD: of all the things to break

oil pipeline fire


I finally built out the CI/CD pipelines. They use the same kde-linux-builder image that builds KDE Linux itself-mainly because it's one of the few CI images with sudo access enabled, which we need for Incus operations.

The good news: the pipeline successfully builds the entire project, packages it into a sysext, deploys it to a VM, and runs the integration tests. That whole chain works. I was pretty pleased with myself for about ten minutes.

The bad news: when the first test tries to actually create a container, the entire CI job dies. Not "the test fails." Not "the runner reports an error." The whole thing just... stops. No exit code, no error message, no logs after that point. Nothing.

I'm fairly sure it's causing a kernel panic in the CI runner's VM. Which is, you know, not great.

Debugging this has been miserable. I can't get any logs after the panic because there are no logs-the kernel is gone. I tried adding debug prints before each step in the container creation pipeline to isolate exactly where it dies. The prints don't come through either, probably because of output buffering, or maybe the runner agent doesn't get a chance to stream the output to GitLab before the entire VM goes down.

The weird part: it's not a nested virtualization issue. Regular Incus works fine on the same runner-you can create containers interactively, no problem. And it doesn't reproduce on KDE Linux at all. Something about the specific combination of the CI environment and Kapsule's container creation path is triggering it, and I have no way to see what.

I've shelved this for now. The pipeline is there, the build and deploy stages work, and the tests would work if the runner didn't kernel panic when Kapsule tries to create a container. If anyone reading this has ideas, I'm all ears.

What's next: custom container images

shipping containers


The biggest item on my plate is custom container images. Right now, Kapsule uses stock distribution images from the Incus image server. They work, but they're not optimized for our use case-things like the NVIDIA stub packages I mentioned above need to live somewhere, and "just install them at container creation time" adds latency and fragility.

Incus uses distrobuilder for image creation, so the plan is straightforward: image definitions live in a directory in the Kapsule repo, a CI pipeline invokes distrobuilder to build them, and the images get published to a server.

The "published to a server" part is where it gets political. I talked to Ben Cooksley about hosting Kapsule images on KDE infrastructure, and he's-understandably-not yet convinced that Kapsule needs its own image server. It's a fair pushback. This is all still experimental, and spinning up image hosting infrastructure for a project that might change direction is a reasonable thing to be cautious about.

So for now, I'll host the images on my own server. They probably won't be the default, since the server is in the US and download speeds won't be great for everyone. But they'll be available for testing and for anyone who wants the NVIDIA integration or other Kapsule-specific tweaks. I'll bug Ben again when the image story is more fleshed out and there's a clearer case for why KDE infrastructure should host them.

Beyond that: get the Konsole MRs (!1182 and !1183) reviewed and merged, and figure out why CI kills the kernel. The usual.

17 Feb 2026 4:15am GMT

Plasma 6.6

Plasma 6.6 makes your life as easy as possible, without sacrificing the flexibility or features that have made Plasma the most versatile desktop in the known universe.

With that in mind, we've improved Plasma's usability and accessibility, and added practical new features into the mix.

Check out what's new and how to use it in our (mostly) visual guide below:

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

Highlights

On-Screen Keyboard

Enjoy this new and improved on-screen keyboard

Spectacle Text Recognition

Extract text from screenshots in Spectacle

Plasma Setup

Set up a user account after the operating system has been installed

New Features

Those who like tailoring the look and feel of their environment can now turn their current setup into a new global theme! This custom global theme can be used for the day and night theme switching feature.

A more subtle way of modifying the look of your apps is by changing the color intensity of every frame:

Choose emoji (Meta+.) skin tones more easily with a new skin tone selector:

A major focus of Plasma 6.6 has been speeding up common workflows. So if the system has a camera, you can quickly connect to a new Wi-Fi network simply by scanning its QR code:

Hover the pointer over any app's icon playing sound in the task manager, and scroll to adjust its volume:

And save yourself a click by enabling Open on hover in your Windows List widget. You can also filter out windows not on the current desktop or activity:

Hold down the Alt key and double-click on a file or folder on the desktop to bring up its properties:

Accessibility

To help everyone use and enjoy Plasma, we've improved accessibility across the board.

If you have colorblindness, check out the filters on System Settings' Accessibility page, under Color Blindness Correction. Plasma 6.6. adds a new grayscale filter, bringing the total to four filters that account for different kinds of colorblindness:

Still in the area of enhancements for the visually impaired, our Zoom and Magnifier feature has gained a new tracking mode that always keeps the pointer centered on the screen, bringing the total to four modes:

In addition, we added support for "Slow Keys" on Wayland, and the standardized "Reduced Motion" accessibility setting.

Screenshots and Screen Recording

Speaking of accessibility, Spectacle can now recognize and extract text from images it scans. Among other use cases, this makes it easy to write alt texts for visually-impaired users:

You can also filter windows out of a screencast by choosing a special option from the pop-up menu that appears when right-clicking a window's title bar:

Virtual Keyboard

Plasma 6.6 also features a new on-screen keyboard! Say hello to the brand-new Plasma Keyboard:

Plasma Setup

Plasma Setup is the new first-run wizard for Plasma, and creates and configures user accounts separately from the installation process.

With Plasma Setup, the technical steps of operating system installation and disk partitioning can be handled separately from user-facing steps like setting up an account, connecting to a network, and so on. This facilitates important use cases such as:

  • Companies shipping Plasma pre-installed on devices
  • Businesses or charity organizations refurbishing computers with Plasma to give them new life
  • Giving away or selling a computer with Plasma on it, without giving the new owner access to the previous owner's data

But That's Not All…

Plasma 6.6 is overflowing with goodies, including:

  • The ability to have virtual desktops only on the primary screen
  • An optional new login manager for Plasma
  • Optional automatic screen brightness on devices with ambient light sensors
  • Optional support for using game controllers as regular input devices
  • Font installation in the Discover software center, on supported operating systems
  • Choose process priority in System Monitor
  • Standalone Web Browser and Audio Volume widgets can be pinned open
  • Support for USB access prompts and a visual refresh of other permission prompts
  • Smoother animations on high-refresh-rate screens

To see the full list of changes, check out the complete changelog for Plasma 6.6.

In Memory of Björn Balazs

In September, we lost our good friend Björn Balazs to cancer.

An active and passionate contributor, Björn was still holding meetings for his Privact project from bed even while seriously ill during Akademy 2025.

Björn's drive to help people achieve the privacy and control over technology that he believed they deserved is the stuff FLOSS legends are made of.

Björn, you are sorely missed and this release is dedicated to you.

17 Feb 2026 12:00am GMT

16 Feb 2026

feedPlanet KDE | English

Rain effect with Quick3D Particles

Here is an overview on the new features added to the Quick3D.Particles module for Qt 6.10 and 6.11. The goal was to support effects that look like they are interacting with the scene and to do this without expensive simulations/calculations. Specifically we'll be using rain effect as an example when going trough the new features.

16 Feb 2026 6:48am GMT

15 Feb 2026

feedPlanet KDE | English

Tellico 4.2 Released

Tellico 4.2 is available, with some improvements and bug fixes. This release now requires Qt6 (> 6.5) as well as KDE Frameworks 6. One notable behavior change is that when images are removed from the collection, the image files themselves are also removed from the collection data folder.

Users have provided substantial feedback in a number of areas to the mailing list recently, which is tremendously appreciated. I'm always glad to hear how Tellico is useful and how it can be better. Back up those data files!

Improvements:

Bug Fixes:

15 Feb 2026 9:57pm GMT

This fortnight in Bouncy Ball: custom images and sounds

A new version (3.4) of Bouncy Ball has just been released on the KDE Store. You can update through Discover, or by heading over to the store: https://store.kde.org/p/2344070 Previous posts:Bouncy Ball will always bounce backThis week in Bouncy Ball - new features land I'm happy to share that this version now includes support for custom...... Continue Reading →

15 Feb 2026 8:24am GMT

Parallelizing Game AI: A Deep Dive into Multi-Threading Libraries for Search Algorithms

Game AI engines, particularly those using tree search algorithms like alpha-beta pruning and MTD(f), are computationally intensive. As modern devices from desktops to mobile phones feature multi-core processors, parallelizing these algorithms has become essential for creating stronger AI opponents without sacrificing response time.

Parallel computing visualization

This blog explores various parallelization libraries and threading models suitable for game AI that I'm exploring to integrate with KDE's Mancala Engine, with a focus on cross platform compatibility and mobile architecture considerations.

Game tree search visualization

The Challenge: Parallelizing Tree Search

Tree search algorithms like alpha-beta pruning are inherently sequential due to their dependency on pruning decisions. However, several parallelization strategies exist:

Each approach has trade-offs between speedup efficiency, implementation complexity, and scalability.

Multi-core processor architecture

Library Options for C++ Parallelization

1. C++ Standard Library Threading (std::thread, std::async)

Overview: Native C++11+ threading support with no external dependencies.

Pros:

Cons:

Mobile Considerations:

Best For: Simple parallelization patterns, root parallelization, projects wanting minimal dependencies


2. OpenMP

Overview: Compiler-based parallelization using pragmas. Supported by GCC, Clang, MSVC, and ICC.

Pros:

Cons:

Mobile Considerations:

Best For: Quick parallelization wins, data-parallel loops, prototyping


3. Intel Threading Building Blocks (oneTBB)

Overview: High-level C++ template library for parallel programming, now open-source as oneTBB.

Pros:

Cons:

Mobile Considerations:

Best For: Complex parallelization patterns, production code, scalable performance


4. C++17 Parallel Algorithms (std::execution)

Overview: Standard library parallel algorithm execution policies.

Pros:

Cons:

Mobile Considerations:

Best For: Modern codebases, simple parallel transformations


5. Qt Concurrent

Overview: Qt framework's high-level threading API.

Pros:

Cons:

Mobile Considerations:

Best For: KDE/Qt projects, applications already using Qt


6. Taskflow

Overview: Modern C++ parallel task programming library with a focus on task graphs.

Pros:

Cons:

Mobile Considerations:

Best For: Complex task dependencies, modern C++ projects


7. std::jthread and C++20 Features

Overview: Improved threading primitives in C++20.

Pros:

Cons:

Mobile Considerations:

Best For: New projects targeting C++20+


Conclusion

The combination of modern C++ threading primitives and careful mobile optimization will create a significantly stronger AI opponent while maintaining good battery life and thermal characteristics.

KDE Mancala game


References & Further Reading

15 Feb 2026 12:00am GMT

14 Feb 2026

feedPlanet KDE | English

Python Mutable References with Caching

So, while working with caching and scrapping, I understood the difference between immutable and mutable objects/datatypes very clearly. I had a scenario, where I am webscraping an API, the code looks like this.

from aiocache import cached

@cached(ttl=7200)
async def get_forecast(station_id: str) -> list[dict]:
 data: dict = await scrape_weather(station_id)
 # doing some operation
 return forecasts

and then using this utility tool in the endpoint.

async def get_forecast_by_city(
 param: Annotated[StationIDQuery, Query()],
) -> list[UpcomingForecast]:
 forecasts_dict: list[dict] = await get_forecast(param.station_id)
 forecasts_dict.reversed()

 forecasts: deque[UpcomingForecast] = deque([])
 for forecast in forecasts_dict:
 date_delta: int = (
 date.fromisoformat(forecast["forecast_date"]) - date.today()
 ).days
 if date_delta <= 0:
 break
 forecasts.appendleft(UpcomingForecast.model_validate(forecast))

 return list(forecasts)

But, here is the gotcha, something I was doing inherently wrong. Lists in python are mutable objects. So, reversing the list modifies the list in place, without creating a new reference of the list. My initial approach was to do this

14 Feb 2026 6:08pm GMT

This Week in Plasma: Finalizing 6.6

Welcome to a new issue of This Week in Plasma!

This week we put the finishing touches on Plasma 6.6! It's due to be released in just a few days and it's a great release with tons of impactful features, UI improvements, and bug fixes. I hope everyone loves it!

Meanwhile, check out what folks were up to this week:

Notable UI Improvements

Plasma 6.7.0

Moved System Settings' "Remote Desktop" page to the "Security & Privacy" group in System Settings. (Nate Graham, krdp MR #139)

Improved the way loop devices are handled in the Disks & Devices widget. (Bogdan Onofriichuk, plasma-workspace MR #6260)

Reduced visual jagginess in the split image effect of wallpaper previews that show both a light and dark version. (Fushan Wen, plasma-workspace MR #6283)

The Kicker Application Menu widget now supports using a non-square icon for its panel button, just like Kickoff does. (Christoph Wolk, plasma-desktop MR #3522)

Added a dedicated global action for un-tiling a quick-tiled window. It doesn't have a keyboard shortcut by default, but you can assign one yourself. (Kevin Azzam, KDE Bugzilla #500636)

Videos in SDDM login screen themes can now be previewed in System Settings. (Blue Terracotta, sddm-kcm MR #99)

Improved the appearance of various dialogs created by KWin. Read more here! (Kai Uwe Broulik, kwin MR #8702)

You can now configure how long it takes the window switcher to appear after you start holding down Alt+Tab. (Guilherme Soares, KDE Bugzilla #486389)

Frameworks 6.24

In Kirigami-based apps, hovering the pointer over buttons that can be triggered with keyboard shortcuts now shows the shortcuts. (Joshua Goins, kirigami MR #2040)

Gear 26.04.0

Setting up a Samba share for one of your folders so people can connect to it over the network now turns on the Samba service (on systemd-based distros) if needed. This completes the project to make Samba sharing relatively painless! (Thomas Duckworth, KDE Bugzilla #466787)

Notable Bug Fixes

Plasma 6.5.6

Monitor names shown in the Brightness & Color widget now update as expected if you connect or disconnect them while the system is asleep. (Xaver Hugl, KDE Bugzilla #495223)

Fixed multiple issues that caused custom-tiled windows on screens that you disconnect to move to the wrong places on any of the remaining screens. (Xaver Hugl, kwin MR #7999)

Plasma 6.6.0

Hardened KWin a bit against crashing when the graphics driver resets unexpectedly. (Vlad Zahorodnii, kwin MR #8769)

Fixed a case where Plasma could crash when used with the i3 tiling window manager. (Tobias Fella, KDE Bugzilla #511428)

Fixed a potential "division by 0" issue in system monitoring widgets and apps that messed up the display percentage of Swap sensors on systems with no swap space. (Kartikeya Tyagi, libksysguard MR #462)

Worked around a Wayland bug (yes, an actual Wayland bug - as in, a bug in one of its protocol definitions!) related to input method key repeat. Why work around the bug instead of fixing it? Because it's already fixed in a newer version of the protocol, but KWin needs to handle apps that use the old version, too. (Xuetian Weng, kwin MR #8700)

Unified the appearance of HDR content in full-screen windows and windowed windows. (Xaver Hugl, KDE Bugzilla #513895)

Fixed a layout glitch in the System Tray caused by widgets that include line breaks (i.e. \n characters) in their names. (Christoph Wolk, KDE Bugzilla #515699)

The Web Browser widget no longer incorrectly claims that every page you visit tried to open a pop-up window. (Christoph Wolk, kdeplasma-addons MR #1003)

Fixed a layout glitch in the Quick Launch widget's popup. (Christoph Wolk, kdeplasma-addons MR #1004)

You can now launch an app in your launcher widget's favorites list right after overriding its .desktop file; no restart of plasmashell is required anymore. (Alexey Rochev, KDE Bugzilla #512332)

Fixed an issue that made inactive windows dragged from their titlebars get raised even when explicitly configured not to raise in this case. (Vlad Zahorodnii, KDE Bugzilla #508151)

Plasma 6.6.1

When a battery-powered device is at a critically low power level, putting it to sleep and charging it to a normal level no longer makes it incorrectly run the "oh no, I'm critically low" action immediately after it wakes up. (Michael Spears, powerdevil MR #607)

The overall app ratings shown in Discover now match a simple average of the individual ratings. (Akseli Lahtinen, KDE Bugzilla #513139)

Searching for Activities using KRunner and KRunner-powered searches now works again. (Simone Checchia, KDE Bugzilla #513761

Frameworks 6.24

Worked around a Qt bug that caused extremely strange cache-related issues throughout Plasma and Kirigami-based apps that would randomly break certain components. (Tobias Fella, kirigami MR #2039)

Notable in Performance & Technical

Plasma 6.6.0

Added support for setting custom modes for virtual screens. (Xaver Hugl, kwin MR #8766)

Added GPU temperature monitoring support for additional GPUs. (Barry Strong, ksystemstats MR #123)

Plasma 6.7.0

Scrolling in scrollable views spawned by KWin (not Plasma, just KWin itself) no longer goes 8 times slower than it ought to. Thankfully there are very few such views, so almost nobody noticed the issue. However fixing it facilitates adding a "scroll to switch virtual desktops" feature to the Overview effect for Plasma 6.7! (Kai Uwe Broulik, kwin MR #8800)

Frameworks

Moving a file to the trash is now up to 50 times faster and more efficient. (Kai Uwe Broulik, kio MR #2147)

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 keep 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.

14 Feb 2026 12:03am GMT

De-mystifying XMPP: Insights from a Mentorship Session

I recently had the opportunity to sit down with my mentor, Schimon Jehudah, for an intensive technical session.

14 Feb 2026 12:00am GMT

13 Feb 2026

feedPlanet KDE | English

Web Review, Week 2026-07

Let's go for my web review for the week 2026-07.


The Media Can't Stop Propping Up Elon Musk's Phony Supergenius Engineer Mythology

Tags: tech, politics, journalism, business

There's really a problem with journalism at this point. How come when covering the tech moguls they keep leaving out important context and taking their fables at face value?

https://karlbode.com/the-press-is-still-propping-up-elon-musks-supergenius-engineer-mythology/


But they did read it

Tags: tech, literature, scifi, business, politics

Indeed, don't assume they misunderstood the sci-fi and fantasy they read and you know. Clearly they just got different opinions about it because their incentives and world views are different from your.

https://tante.cc/2026/02/12/but-they-did-read-it/


Microsoft's AI-Powered Copyright Bots Fucked Up And Got An Innocent Game Delisted From Steam

Tags: tech, game, dmca, copyright, law

Automated DMCA take downs have been a problem for decades now… They still bring real damage, here is an example.

https://www.techdirt.com/2026/02/12/microsofts-ai-powered-copyright-bots-fucked-up-and-got-an-innocent-game-delisted-from-steam/


Launching Interop 2026

Tags: tech, web, browser, interoperability

This is a very important initiative. For a healthy web platform we need good interoperability between the engines. I'm glad they're doing it again.

https://hacks.mozilla.org/2026/02/launching-interop-2026/


How I built Fluxer, a Discord-like chat app

Tags: tech, foss, messaging

Clearly early days… Could that become a good place to land for people fleeing off Discord?

https://blog.fluxer.app/how-i-built-fluxer-a-discord-like-chat-app/


New And Upcoming IRCv3 Features

Tags: tech, messaging, irc

It's nice to still see some activity around IRC.

https://libera.chat/news/new-and-upcoming-features-3


Uses an ESP8266 module and an Arduino sketch to display the local time on a inexpensive analog quartz clock

Tags: tech, hardware, embedded, ntp, time

This is definitely a cool hack. Now I feel like doing something like this to every clock I encounter.

https://github.com/jim11662418/ESP8266_WiFi_Analog_Clock


LLVM: Concerns about low-quality PRs beeing merged into main

Tags: tech, ai, machine-learning, copilot, foss, codereview

Clearly Free Software projects will have to find a way to deal with LLM generated contributions. A very large percentage of them is leading to subtle quality issues. This also very taxing on the reviewers, and you don't want to burn them out.

https://discourse.llvm.org/t/concerns-about-low-quality-prs-beeing-merged-into-main/89748


An AI Agent Published a Hit Piece on Me

Tags: tech, ai, machine-learning, copilot, foss, commons

I guess when you unleash agents unsupervised their ethos tend to converge on the self-entitled asshole contributors? This raise real questions, this piece explains the situation quite well.

https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/


Spying Chrome Extensions: 287 Extensions spying on 37M users

Tags: tech, browser, security, attention-economy, spy

Oh this is bad! The amount of data exfiltrated by those malicious extensions. Data brokers will do anything they can to have something to resell. This is also a security and corporate espionage hazard.

https://qcontinuum.substack.com/p/spying-chrome-extensions-287-extensions-495


ReMemory - Split a recovery key among friends

Tags: tech, tools, security

Accidents can happen in life. This might come in handy if you loose memory for some reason. It requires planning ahead though.

https://eljojo.github.io/rememory/


Penrose

Tags: tech, tools, data-visualization

Looks like a nice option for visualisations.

https://penrose.cs.cmu.edu/


Boilerplate Tax - Ranking popular programming languages by density

Tags: tech, programming, language, statistics, type-systems

Interesting experiment even though some of the results baffle me (I'd have expected C# higher in the ranking for example). Still this gives some food for thought.

https://boyter.org/posts/boilerplate-tax-ranking-popular-languages-by-density/


The cost of a function call

Tags: tech, c++, optimisation

If you needed a reminder that inlining functions isn't necessarily an optimisation, here is a fun little experiment.

https://lemire.me/blog/2026/02/08/the-cost-of-a-function-call/


It's all a blur

Tags: tech, graphics, blur, mathematics

Wondering if blurs can really be reverted? There's some noise introduced but otherwise you can pretty much reconstruct the original.

https://lcamtuf.substack.com/p/its-all-a-blur


Simplifying Vulkan One Subsystem at a Time

Tags: tech, graphics, vulkan, api, complexity

There are lessons and inspirations to find in how the Vulkan API is managed. The extension system can be unwieldy, but with the right approach it can help consolidate as well.

https://www.khronos.org/blog/simplifying-vulkan-one-subsystem-at-a-time


What Functional Programmers Get Wrong About Systems

Tags: tech, data, architecture, system, type-systems, functional, complexity

Interesting essay looking at how systems evolve their schemas over time. We're generally ill-equipped to deal with it and this presents options and ideas to that effect. Of course, the more precise you want to be the more complexity you'll have to deal with.

https://www.iankduncan.com/engineering/2026-02-09-what-functional-programmers-get-wrong-about-systems/


Modular Monolith and Microservices: Modularity is what truly matters

Tags: tech, architecture, modules, microservices, services, complexity

No, modularity doesn't imply micro services… You don't need a process and network barrier between your modules. This long post does a good job going through the various architecture options we have.

https://binaryigor.com/modular-monolith-and-microservices-modularity-is-what-truly-matters.html


Using an engineering notebook

Tags: tech, engineering, note-taking, memory, cognition

I used to do that, fell into the "taking notes on the computer". And clearly it's not the same, I'm thinking going back to paper notebooks soon.

https://ntietz.com/blog/using-an-engineering-notebook/


On screwing up

Tags: tech, engineering, organisation, team, communication, failure

Everyone makes mistakes, what matters is how you handle them.

https://www.seangoedecke.com/screwing-up/


Why is the sky blue?

Tags: physics, colors

Excellent piece which explains the physics behind the atmospheric colours. Very fascinating stuff.

https://explainers.blog/posts/why-is-the-sky-blue/



Bye for now!

13 Feb 2026 11:44am GMT

QCoro 0.13.0 Release Announcement

This release brings improvements to generators, better build system integration and several bugfixes.

As always, big thanks to everyone who reported issues and contributed to QCoro. Your help is much appreciated!

Directly Awaiting Qt Types in AsyncGenerator Coroutines

The biggest improvement in this release is that QCoro::AsyncGenerator coroutines now support directly co_awaiting Qt types without the qCoro() wrapper, just like QCoro::Task coroutines already do (#292).

Previously, if you wanted to await a QNetworkReply inside an AsyncGenerator, you had to wrap it with qCoro():

QCoro::AsyncGenerator<QByteArray> fetchPages(QNetworkAccessManager &nam, QStringList urls) {
 for (const auto &url : urls) {
 auto *reply = co_await qCoro(nam.get(QNetworkRequest{QUrl{url}}));
 co_yield reply->readAll();
 }
}

Starting with QCoro 0.13.0, you can co_await directly, just like in QCoro::Task:

QCoro::AsyncGenerator<QByteArray> fetchPages(QNetworkAccessManager &nam, QStringList urls) {
 for (const auto &url : urls) {
 auto *reply = co_await nam.get(QNetworkRequest{QUrl{url}});
 co_yield reply->readAll();
 }
}

Other Features and Changes

Bugfixes

Full changelog

See changelog on Github

Support

If you enjoy using QCoro, consider supporting its development on GitHub Sponsors or buy me a coffee on Ko-fi (after all, more coffee means more code, right?).

13 Feb 2026 12:00am GMT

KDE Ships Frameworks 6.23.0

Friday, 13 February 2026

KDE today announces the release of KDE Frameworks 6.23.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

Baloo
  • [IndexCleaner] Use one transaction for each excludeFolder during cleanup. Commit.
  • [Extractor] Split long extraction runs into multiple transactions. Commit.
  • [Extractor] Release DB write lock while content is extracted. Commit.
  • [Benchmarks] Replace QTextStream::readLine with QStringTokenizer. Commit.
  • [Benchmarks] Verify /proc open result for IO stats. Commit.
  • Enable LSAN in CI. Commit.
  • [Engine] Replace remaining raw PostingIterator* with unique_ptr. Commit.
  • [SearchStore] Replace raw PostingIterator* with unique_ptr. Commit.
  • [PostingIterator] Clean up unused headers. Commit.
  • [AdvancedQueryParser] Use categorized logging for debug message. Commit.
  • [Transaction] Fix invalid qWarning macro usage. Commit.
  • Use categorized logging in priority setup code. Commit.
  • Clean up priority setup code. Commit.
  • [baloo_file] Use categorized logging for warnings. Commit.
  • [QueryTest] Fix leak of iterator returned from executed query. Commit.
  • [Engine] Fix possible memory leaks in PhraseAndIterator. Commit.
  • [Engine] Fix possible memory leaks in {And,Or}PostingIterator. Commit.
  • [FileIndexScheduler] Emit correct state on startup. Commit.
  • [FileIndexScheduler] Simplify startup/cleanup logic. Commit.
  • [IndexerConfig] Properly deprecate obsolete API. Commit.
  • [BalooSettings] Enable Notifiers for changes. Commit.
  • [FileIndexerConfig] Move filter update to constructor. Commit.
  • [balooctl] Minor config command output cleanup, fix error message. Commit.
  • [PendingFile] Add proper debug stream operator. Commit.
  • [PendingFile] Inline trivial internal method. Commit.
  • Use Baloo namespace for KFileMetadata::ExtractionResult specialization. Commit.
Bluez Qt
  • Add another explicit moc include to source file for moc-covered header. Commit.
Breeze Icons
  • Add update-busy status icon. Commit.
  • Make base 22px globe icon symbolic. Commit.
  • QrcAlias.cpp - pass canonical paths to resolveLink. Commit.
  • Make the non-symbolic version of globe icon to be colorful. Commit.
  • Create symbolic version for preferences-system-network. Commit.
  • Enable LSAN for leak checking. Commit.
  • Fix kdeconnect-symbolic icons not being color-aware. Commit.
  • Properly resolve links for the resources. Commit.
Extra CMake Modules
  • ECMFindQmlModule: Clarify and enforce that QML modules are not only runtime dependencies. Commit.
  • ECMGenerateQDoc: Add target's source dir to include paths. Commit.
  • Remove FATAL_ERROR. Commit.
Framework Integration
KArchive
  • K7ZipPrivate::folderItem: Limit the amount of folderInfos to a "reasonable" amount. Commit.
  • 7zip: defines to constexpr (or commented out if unused). Commit.
  • 7zip: make it clear we only support an int number of files. Commit.
  • 7zip: convert a bunch of int to qsizetype. Commit.
  • 7zip: Remove unused defines. Commit.
  • 7zip: Add names to function parameters. Commit.
  • 7zip: Use ranges::any_of. Commit.
  • 7zip: Convert loops into range-for loops. Commit.
  • 7zip: Add [[nodiscard]]. Commit.
  • 7zip: Mark 3 qlist parameters as const. Commit.
  • 7zip: Mark sngle argument constructors as explicit. Commit.
  • 7zip: Use "proper" C++ include. Commit.
  • 7zip: Remove unused BUFFER_SIZE. Commit.
  • 7zip: Use default member initializer. Commit.
  • Enable LSAN in CI. Commit.
  • KLimitedIODevice: mark two member variables as const. Commit.
  • Kzip: Bail out if the reported size of the file is negative. Commit.
  • Fix OSS-Fuzz AFL builds. Commit.
KAuth
  • Add missing export for AuthBackend. Commit.
  • Fix compilation with new cmake minimum version. Commit.
KBookmarks
KCalendarCore
  • Don't write extra empty STATUS: property for custom status value. Commit.
  • Don't create a string view on a temporary. Commit.
  • Remove the Compat/MSExchange test data (fails since tzdata2025c). Commit.
KCMUtils
KCodecs
  • Protect against null bytes in RFC 2047 charsets. Commit.
  • Remove a few temporary allocation on RFC 2047 decoding. Commit.
  • [KEndodingProber] Drop broken and irrelevant ISO-2022-CN/-KR detectors. Commit.
  • [KEncodingProber] Remove disabled, obsolete GB2312 data. Commit.
  • [KEncodingProber] Reduce packed model data boilerplate. Commit.
  • [KEncodingProber] Replace pack/unpack macros with constexpr functions. Commit.
  • [KEncodingProber] Add tests for ISO-2022-JP and HZ encoding. Commit.
  • Enable LSAN in CI. Commit.
  • [KEncodingProber] Remove unused byte pos member from CodingStateMachine. Commit.
  • [KEncodingProber] Add prober benchmarks. Commit.
  • Fix quadratic complexity when searching for the encoded word end. Commit.
  • Use QByteArrayView. Commit.
  • Don't detach encoded8Bit during encoding. Commit.
  • Fix OSS-Fuzz AFL builds. Commit.
KColorScheme
KCompletion
KConfig
  • Kconfigwatcher: prevent a QThreadLocal to be creatde when exiting. Commit.
  • Fix macos standard shortcut conflicts. Commit. Fixes bug #512817
  • Kconfigwatcher: Add context argument to connect. Commit.
  • Kconfigskeletontest: Fix memory leak. Commit.
  • Enable LSAN in CI. Commit.
  • KConfigIni: parseConfig simplify implementation. Commit.
  • Doc: KConfig: update link introduction. Commit.
  • KConfig: better handle Anonymous case. Commit.
  • Autotests/qiodevice: add a test for the QFile case. Commit.
  • Kconfig_target_kcfg_file: use newer built-in cmake code to create kcfgc file. Commit.
  • Kconfigxt: Add KCONFIG_CONSTRUCTOR option. Commit.
  • Kconfigskeleton: Add ctor using std::unique_ptr. Commit.
  • Kconfig: support passing in a QIODevice. Commit.
KConfigWidgets
  • Enable LSAN in CI. Commit.
  • Drop (wrong kind of) asserts in KHamburgerMenu code. Commit.
KContacts
KCoreAddons
  • Remove unused includes. Commit.
  • Enable LSAN in CI. Commit.
  • Changed the dummy env var path from relative to absolute. Commit.
  • Kformat: update documentation for formatRelativeDate. Commit.
KCrash
  • Autotests: make sure to cover metadata in main test. Commit.
  • Metadata: write a completion marker group. Commit.
  • Guard qGuiApp having already been torn down. Commit. See bug #513969
  • Enable LSAN in CI. Commit.
KDav
KDBusAddons
KDeclarative
KDE Daemon
KDE SU
KDNSSD
KDocTools
  • Kde-docs.css remove not existent CSS property "font-height". Commit.
  • Enable LSAN in CI. Commit.
KFileMetaData
  • Usermetadata: prevent returning UnknownError when removing a not-present attribute. Commit.
  • [PopplerExtractor] Use ReadingOrder text layout from poppler 26.01.00. Commit.
  • [TaglibExtractorTest] Clean up test data formatting. Commit.
  • [TaglibExtractorTest] Fix FLAC-in-ogg testfile. Commit.
KGlobalAccel
KGuiAddons
  • Add Android support for idle inhibition. Commit.
  • WaylandClipboard: fix pasting text when QMimeData also has an image. Commit. Fixes bug #513701
  • Add KSystemInhibitor as frontend to the xdg-desktop-portal inhibition system. Commit.
  • Restore building with wayland < 1.23.0. Commit.
  • Ksystemclipboard: Check m_thread in destructor. Commit. Fixes bug #514512
  • Examples/python: add an example for KSystemClipboard. Commit.
  • Python: fix crash when using KSystemClipboard::setMimeData. Commit.
  • Python: specify enum type for KKeySequenceRecorder::Pattern. Commit.
  • KImageCache: make findPixmap destination QPixmap have alpha channel if inserted QPixmap had alpha channel. Commit.
  • Add another explicit moc include to source file for moc-covered header. Commit.
KHolidays
  • Update Japanese holidays for 2027. Commit.
  • Enable LSAN in CI. Commit.
  • New special Slovenian day. Commit.
  • Edited and updated holiday_np_en-gb with accurate dates, expanded list for... Commit.
  • Philippines calendar update for 2026. Commit.
KI18n
  • Tests: fix asan mem leak in klocalizedstringtest. Commit.
  • Fixup! qml: introduce KI18nContext. Commit.
  • Qml: introduce KI18nContext. Commit.
  • Add another explicit moc include to source file for moc-covered header. Commit.
KIconThemes
  • Kicontheme.cpp edit comment Q_COREAPP_STARTUP_FUNCTION is not above. Commit.
  • Enable LSAN in CI. Commit.
  • Kiconengine: clean old Qt version check. Commit.
  • KIconTheme: Prefer SVG files over PNG files. Commit. Fixes bug #502273
KIdletime
KImageformats
  • Fix oss-fuzz AFL build (again). Commit.
  • Fix OSS-Fuzz AFL builds. Commit.
  • Text -> test. Commit.
  • IFF: add uncompressed RGFX support. Commit.
  • IFF: add CD-i Rle7 support. Commit.
  • Decode Atari ST VDAT chunks. Commit.
  • IFF: add support for CD-i YUVS chunk (and minor code improvements). Commit.
  • Add support for CD-I IFF images. Commit.
  • Add JXL testfile which previously triggered crash. Commit.
  • Jxl: fix crash on lossy gray images. Commit.
  • Add gray AVIF files with various transfer functions. Commit.
  • Avif: Improved color profiles support. Commit.
KIO
  • Add missing since documentation. Commit.
  • Add ThumbnailRequest::maximumFileSize. Commit.
  • KFilePlacesEventWatcher: Set drag disabled on invalid index and on headers. Commit. Fixes bug #499952
  • Fileundomanager: prevent mem leak upon destruction. Commit.
  • Core/ListJob: add list Flags ExcludeDot, ExcludeDotDot. Commit.
  • Dropjob: add DropJobFlag::ExcludePluginsActions flag support. Commit. See bug #509231. Fixes bug #514697
  • DropJob: Polish QMenu before creating native window. Commit.
  • Tests: kfilewidgetttest in dropfiles make sure to clean up QMimeData*. Commit.
  • FilePreviewJob: Let StatJob resolve symlinks. Commit.
  • DropJob: Use CommandLauncherJob for drop onto executable. Commit.
  • RenameDialog: Also show file item metadata when thumbnail failed. Commit.
  • Dropjob: handle drop from Places View properly. Commit. See bug #509231. Fixes bug #514697
  • PreviewJob: Ignore ERR_INTERNAL. Commit.
  • KFilePlacesView: better compute the maximum size of icon tolerable. Commit.
  • KFileWidget: When navigator loses focus, apply the uncommittedUrl to navigator. Commit.
  • RenameDialog: Use size and mtime from preview job stat, too. Commit.
  • Listjob: use modern for loop. Commit.
  • Listjob: reduce nesting in recurse function. Commit.
  • Listjob: split listing entries into a filter and a recurse function. Commit.
  • RenameDialog: Fix grammar by adding a comma. Commit.
  • Fix binary compatibility. Commit.
  • Tests/kfilewidgettests: add command line args the open test. Commit.
  • KFilePreviewGenerator: pass dpi to the PreviewJob. Commit. Fixes bug #489298
  • Kmountpoint: use statx to get device id. Commit.
  • KFileItemActions: Add "Run Executable" action for executable files. Commit.
  • Udsentry: add documentation for UDS_SUBVOL_ID. Commit.
  • Kioworkertest: add UDS_MOUNT_ID output for stat. Commit.
  • StatJob: add StatMountId to retrieve unique mount id. Commit.
  • KFilePlacesModel: Add placeCollapsedUrl. Commit.
  • FilePreviewJob: Set job error, if applicable. Commit.
  • KDirOperator: implement single tap gesture. Commit. Fixes bug #513606
  • KCoreDirLister: Add parentDirs of dirs that have not been deleted to pendingUpdates list. Commit. Fixes bug #497259
  • KMountpoint: remove redundant code, and reuse a function. Commit.
  • PreviewJob: prevent potential crash when FilePreviewJob yields results sync. Commit.
  • PreviewJob: estimate device ids first. Commit.
  • KDirModel/KFileWidget: Use relative date formatting for Modified field. Commit.
  • Listjob: replace misleading comment about repeated key lookups. Commit.
  • Stat_unix: document that statx(dirfd wouldn't be any faster. Commit.
  • Kioworkers/file: check temp file opening result. Commit.
  • Autotests: fix unused warnings. Commit.
  • KUrlNavigatorButton: Don't set a button icon. Commit.
  • Kioworkertest: add subvolId output for stat. Commit.
  • StatJob: add StatSubVolId to retrieve btrfs/bcachefs subvol number. Commit.
  • Job: improve property management performance. Commit.
  • Job: update mergeMetaData code to be more modern + comment. Commit.
  • Udsentry: improve operator>> performance. Commit.
  • KPropertiesDialog: Remove unused variable. Commit.
  • PreviewJobPrivate: remove unused method declaration. Commit.
  • Use QList::takeFirst instead of QList::front & QList::pop_front. Commit.
  • PreviewJob: dissolve struct PreviewItem, serves no extra purpose. Commit.
  • FilePreviewJob::item(): return const ref to KFileItem directly, by only use. Commit.
  • PreviewJob: introduce internal struct PreviewSetupData, to group related data. Commit.
  • PreviewJob: introduce internal struct PreviewOptions, to group related data. Commit.
  • PreviewJobPrivate: rename determineNextFile to startNextFilePreviewJobBatch. Commit.
  • PreviewJob: create PreviewItem instance on-the-fly. Commit.
  • PreviewJobPrivate: rename member initialItems to fileItems. Commit.
Kirigami
  • ToolbarLayout: Don't draw frames with an empty toolbar. Commit. Fixes bug #512396
  • Make the global background actually invisible. Commit.
  • Enable back button on first page in RTL. Commit. Fixes bug #511295
  • ActionToolBar: fix actions showing both in toolbar and in hidden actions menu. Commit.
  • Add new Kirigami logo. Commit.
  • Revert "Temporarily drop test case that is broken with Qt 6.11". Commit.
  • MnemonicAttached: move to primitives. Commit.
  • Fix inline drawers in RTL layout. Commit.
  • Do an opacity animation for the menu layers. Commit.
  • GlobalDrawer: default size according to contents. Commit. Fixes bug #505693
  • SelectableLabel: don't break coordinates of global ToolTip instance. Commit. Fixes bug #510860. Fixes bug #511875
  • Controls/SwipeListItem: fix action positions in RtL. Commit.
  • ShadowedRectangle: Improve visuals when blending a texture. Commit.
  • Make types more explicit for tooling. Commit.
  • Make action handling linter-friendly. Commit.
  • Templates/private: fix qmldir. Commit.
  • Placeholdermessage: don't bind maximum to explicit width. Commit.
  • PlaceholderMessage: handle unusually long text better. Commit. Fixes bug #514164
  • BannerImage: Don't shadow implicitWidth property. Commit.
  • Fix Android icon bundling. Commit.
KItemModels
  • Remove wrong documentation markup. Commit.
  • Fix memory leaks in unit tests. Commit.
  • Enable LSAN in CI. Commit.
  • KRearrangeColumnsProxyModel: don't nest begin/endResetModel signals. Commit.
KItemViews
KJobWidgets
KNewStuff
  • Improve delegate sizing to increase information density. Commit.
KNotifications
KNotifyConfig
KPackage
KParts
KPeople
KPlotting
KPTY
KQuickCharts
KRunner
KStatusNotifieritem
KSVG
  • Fix memory leak when ImageSet cannot be found. Commit.
  • Enable LSAN in CI. Commit.
  • Ksvg: Optimize stylesheet parsing. Commit.
KTextEditor
  • Some tests for setVirtualCursorPosition. Commit.
  • Add small test for virtual column conversions. Commit.
  • Fix fromVirtualColumn. Commit.
  • Proper handling of tabs in virtual cursor setting. Commit. Fixes bug #513898
  • Proper handling of tabs in virtual cursor setting. Commit. Fixes bug #513898
  • Handle any unicode newline sequence during paste. Commit.
  • Fix typo. Commit.
  • Enable LSAN in CI. Commit.
  • Avoid to leak ranges. Commit.
  • Don't leak memory. Commit.
  • Don't leak a cursor. Commit.
  • Ensure we call the cleanups. Commit.
  • Don't leak cursors. Commit.
  • Fix leaking of completion moving ranges. Commit.
  • We re-parent this, use a QPointer to be sure we know if that is still alive. Commit.
  • Fix leak in TextBuffer::balanceBlock. Commit.
  • Don't leak cursor and range. Commit.
  • Avoid to leak the document. Commit.
  • Don't leak cursors & ranges. Commit.
  • Fix memleak in vi mode mark handling. Commit.
  • Don't leak the mainwindow. Commit.
  • Ensure the document dies with the toplevel widget. Commit.
  • Avoid to leak doc in some tests. Commit.
  • Fix memleak in KateLineLayoutMap. Commit.
  • Don't leak the document in some tests. Commit.
  • Avoid to leak memory in testing. Commit.
  • Disable CamelCursor by default. Commit.
  • Fix since 6.23 & comments. Commit.
  • Docs: Mention that code folding highlight is also disabled. Commit.
  • Move bracket highlight suppression to view update logic. Commit.
  • Add option to disable bracket match highlight when inactive. Commit.
  • Clear m_speechEngineLastUser early to avoid that it is used in error handling for speechError. Commit. Fixes bug #514375
KTextTemplate
KTextWidgets
KUserFeedback
KWallet
  • Fix D-Bus activation race with PAM-launched ksecretd. Commit. Fixes bug #509680
  • Enable LSAN in CI. Commit.
  • Fix QCA destruction order. Commit. Fixes bug #490788
  • Use more portable alternative to ssize_t. Commit.
KWidgetsAddons
  • KPageView: Check for valid indices during list search. Commit. Fixes bug #496143
  • Kactionmenu: Use delegating constructor. Commit.
  • Add test for KActionMenu. Commit.
  • Clean up touch device in tests. Commit.
  • Kpageview: Don't leak NoPaddingToolBarProxyStyle. Commit.
  • Kacceleratormanagertest: Don't leak action. Commit.
  • KCollapsibleGroupBox: Fix arrow indicator not updating immediately. Commit.
KWindowSystem
  • Enable LSAN in CI. Commit.
  • Platforms/wayland: Avoid destroying proxy objects when QPA is gone. Commit. Fixes bug #487660
  • Fix KWindowSystem::updateStartupId on wayland. Commit.
KXMLGUI
  • Avoid toLower, use case insensitive comparison. Commit.
  • De-duplicate case insensitive string equality functions. Commit.
  • Fix memory leaks in unit tests. Commit.
  • Enable LSAN in CI. Commit.
  • Drop (wrong kind of) asserts in KToolTipHelperPrivate code. Commit.
  • Replace pointer with optional. Commit.
  • Replace simple slot with lambda. Commit.
  • Remove pointless QKeySequence->QVariant conversion. Commit.
  • Use raw pointers for some commonly used classes's pimpl pointer. Commit.
Modem Manager Qt
Network Manager Qt
Prison
  • Consistently namespace ZXing version defines. Commit.
  • Remove workarounds for ZXing 3.0 not having bumped its version yet. Commit.
  • Adapt to more ZXing 3.0 API changes. Commit.
  • Actually search for ZXing 3. Commit.
  • Fix build without ZXing. Commit.
  • Support ZXing 3 for barcode generation. Commit.
  • Auto-detect text vs binary content for GS1 Databar barcodes. Commit.
  • Enable LSAN in CI. Commit.
  • Adapt barcode scanner to ZXing 3 changes. Commit.
  • Port away from deprecated ZXing API. Commit.
Purpose
  • Fix typo and adhere to KDE HIG. Commit.
  • Add missing API doc comments. Commit.
QQC2 Desktop Style
  • Menu: Calculate implicitHeight from visibleChildren. Commit. Fixes bug #515602
  • ItemDelegate: Give a bigger padding to the last item. Commit. Fixes bug #513459
  • Combobox: use standard menu styling for popup. Commit. See bug #451627
  • SearchField: add manual test. Commit.
  • Add SearchField. Commit.
  • Enable LSAN in CI. Commit.
  • Kquickstyleitem: Avoid divide by zero. Commit.
Solid
  • Fix(fstab): Return valid URLs for NetworkShare for smb mountpoints. Commit.
  • Documentation fixes. Commit.
  • Add displayName() implementation to UDev backend with vendor/product deduplication. Commit.
  • Extract vendor/product fallback logic into reusable utility function. Commit.
  • Improve device vendor/product lookup with hwdb fallback. Commit.
  • [UdevQt] Reduce allocations in decodePropertyValue helper. Commit.
  • Free lexer-allocated data also when parsing fails. Commit.
  • Enable LSAN in CI. Commit.
  • Use delete instead of deleteLater() when DevicePrivate refcount drops to 0. Commit. Fixes bug #513508. Fixes bug #494224. Fixes bug #470321. Fixes bug #513089. Fixes bug #513921
  • Avoid crash on device removal. Commit. Fixes bug #514791
  • Add missing ejectRequested to OpticalDrive interface. Commit.
  • Add missing override in winopticaldrive. Commit.
  • Add missing signals to StorageAccess backends. Commit. Fixes bug #514176
  • Add missing overrride in winstorageaccess. Commit.
  • Fix macOS build: Replace make_unique with explicit new for private IOKitDevice constructor. Commit.
  • Use more precise type for m_reverseMap. Commit.
  • Replace _k_destroyed slot with lambda. Commit.
  • Don't call setBackendObject() in DevicePrivate dtor. Commit.
  • Remove unneeded intermediate variables. Commit.
  • Manage backend object using unique_ptr. Commit.
  • Remove unneeded destroyed handling for backend object. Commit.
  • Manage DeviceInterface using unique_ptr. Commit.
  • Devicemanager: remove unused includes. Commit.
Sonnet
Syndication
Syntax Highlighting
  • Added Gemtext syntax. Commit.
  • Enable LSAN in CI. Commit.
  • Do not resolve symbolic links in generate_jinja.py. Commit.
  • PHP: update Heredoc/Nowdoc support for 7.3. Commit.
Threadweaver

13 Feb 2026 12:00am GMT

12 Feb 2026

feedPlanet KDE | English

While you support others, who supports you?

The world of free and open-source software (FOSS) is full of big-hearted, altruistic people who love serving society by giving away their labor for free. It's incredible. These folks are supporting so many people by providing the world with high quality free software, including in KDE, my FOSS community of choice.

But while they do it, who's supporting them? We don't talk about this as much.

A recent Reddit post by a volunteer developer burning out reminded me of the topic, and it's not the first one. Denis Pushkarev of core-js wrote something similar in 2023, and we're probably all familiar with this XKCD comic:

The topic is also not limited to the FOSS world; it's broadly applicable to all volunteer activities. Can't feed the homeless in a soup kitchen if you're sick and sneezing into the soup! Can't drive to the library to teach adult reading classes if your car's broken down.

In order to support others, you need support yourself! Who can provide that support? Here are a bunch of cases that work:

All these cases work. They provide enough money to live, and you still get to work on FOSS!

There are lots of other good options, but here are some of the bad ones that don't work:

We must always answer for ourselves the question of how we're going to be supported while we continue to contribute to the digital commons. If you don't do it for a living, it's a critically important question. Never let anyone guilt-trip you into doing volunteer work you don't have the time or money for! It's a sure road to burnout or worse.

Airplane safety briefings tell people to "put on your mask before helping others." Why? Same reason as what we're talking about here: you can't support others if you're not first supported yourself. If you try, you'll fail, either immediately, or eventually. You must be properly supported yourself before you can be of use to others.

12 Feb 2026 10:58pm GMT

Qt Creator 19 Beta2 released

We are happy to announce the release of Qt Creator 19 Beta2.

12 Feb 2026 12:36pm GMT

Nifty Dialogs

As explained in one of my previous blog posts where I revamped the unresponsive window dialog, KWin isn't really designed to show regular desktop windows of its own. It instead relies on helper programs to display messages. In case of the "no border" hint, it just launched kdialog, a small utility for displaying various message boxes from shell scripts. This however came with a couple of caveats that have all been addressed now:

KWrite (simple text editor) window without window border. Ontop a dialog “You have selected to show a window without its border. Without the border, you will not be able to enable the border again using the mouse: use the window menu instead, using the Alt+F3 keyboard shortcut”, buttons “OK” and “Restore Border”
Setting no border now lets you restore it in case you really don't have a keyboard

First of all, the dialog wasn't attached to the window that provoked it. When the window was closed, minimized, or its border manually restored, it remained until manually dismissed. Secondly, it said "KDialog" and used a generic window icon (that would have been an easy fix of course). Further, the user might not even have kdialog installed which actually was the case on KDE Linux until very recently. Ultimately and most importantly, it told you that you were screwed if you didn't have a keyboard but didn't offer and help if you really went without one. I therefore added an option to restore the border right from the dialog. Should you have a dedicated global shortcut configured for this action, it will also be mentioned in the dialog.

The dialog when manually setting a window full-screen has similarly been overhauled, including an undo option. While at it, I removed the last remaining code calling kdialog, too: the "Alt+tab switcher is broken" message. It is now a proper KNotification. Something you should never see, of course.

Another dialog that I gave some attention was the prompt when copying a file would overwrite its destination. If you have Kompare installed and copy a plain text file (that includes scripts, source code, and so on), the dialog displays a "Compare Files" button. It already guesstimated whether the files are similar but now you can actually see it for yourself.

Dialog prompt asking “Would you like to overwrite the destination?”, Source (from a ZIP file) and Destination (in Downloads folder) both show a preview image and size and modified time.
Extracting a file from Ark now displays information about the source, too

KIO's PreviewJob that asynchronously generates a file preview now provides the result of its internal stat call, too. This means that once you receive the preview, you also get the file's properties, such as size, modified time, and file type basically for free. The rename dialog then displays this information in case it wasn't provided by the application already. Dolphin now also makes use of this information while browsing a folder which should improve responsiveness when browsing NFS and similarly mounted network shares. At least when previews are enabled, it no longer determines file types synchronously in most scenarios.

Since the rename dialog is able to fetch file information on demand, Ark, KDE's archiver tool, rewrites the source URL it displays in the dialog to a zip:/ URL (or tar:/ or whatever supported archive type). This way the dialog can display a preview transparently through the Archive KIO worker which also gained the ability to determine a file's type from its contents. In case you didn't know, you can configure Dolphin to open archives like regular folders.

Finally, most labels in KIO that show the mtime/ctime/atime no longer include the time zone unless it is different from the system time zone. Showing "Central European Standard Time" in full after every date was a bit silly. Unfortunately, QLocale isn't very flexible and only knows "short" (19:00) or "long" (19:00:00 Central European Standard Time) formats. You can't explicitly tell it to generate a time string with seconds, or with 12/24 hour clock, or a date with weekday but no year, and unfortunately the "long" time format includes the full time zone name.

12 Feb 2026 8:00am GMT