10 Jan 2026

feedPlanet KDE | English

Updated Tellico Handbook

Online publication of the documentation for many of KDE applications has been updated to docs.kde.org. Tellico's current handbook can be found there.

10 Jan 2026 10:50pm GMT

KJournald Update January 2026

A surprising long time passed since my last status update about KJournald. So it's time again to shed some light on the recent changes.

KJournald is a KDE project that provides graphical browsing UI for journald log databases. For those who never heard the term "journald", journald is the system logging service of systemd and it is found in most modern Linux systems. This means, in the journald databases one can find all the system log messages about important incidents happening on a system, which make it very important for system admins but also for all technical users who want to analyze when something is not working correctly on their systems.

The kjournald-browser provides a Qt and Kirigami based UI to efficiently browse and filter those logs (note: there exist different tools for that, even systemd provides its own command line tool "journalctl"). The focus of kjournald-browser are the following use cases:

Since my last blog post, the kjournald-browser application became part of the regular KDE gear releases and nowadays is packages by e.g. Fedora and Suse; unfortunately, it is still not packaged on Debian or Ubuntu yet - if you want to do it and need support please reach out to me! At the moment, also the packaging as Flatpak application on Flathub is ongoing. But already since a long time though, the KDE Flatpak nightly builds provide the latest state of the app.

With the last major release 25.12.0, a few new cool features were added:

One feature was slightly too late for this release, but is already ready for the next:

Since 2026 is still young, there are a few features on the roadmap of this year. The two most important ones in my opinion are:

10 Jan 2026 6:19pm GMT

I love KDE too much to retire! Snap beta releases trickling in. Stay tuned.

A short but sweet note to say I am coming out of my short retirement to help with snaps again. My time is extremely limited, however we are working hard on getting snaps on CI and I have some newer snaps in -beta trickling in for testing. You must install kf6-core24 from beta as well to test them ( this will likely break older kde snaps in the process so beware. ) This is slow going as I work on them during my hour lunch at day job and spare stolen moments. KDE is coming up on its 30th birthday!!! How cool is that!

I ❤ KDE

Like my work? Consider a donation. Thank you!

Donate

10 Jan 2026 4:54pm GMT

This Week in Plasma: car of the year edition

Welcome to a new issue of This Week in Plasma!

Let's thank Lubos Krystynek, Rafal Krawczyk, and John Veness for stepping up to help with this week's issue. Thanks, guys!

This week, the first car running KWin won the "Car of the Year" award. Yes, really - KDE in the car! Here's KDE's Victoria Fischer talking about it at Qt World Summit 2023:

KDE in the Kar!

Almost all of these posts end with "KDE has become important in the world…" and I think this is a good reminder that it's true, not just some empty platitude. KDE is important. And all of you building or using KDE's software are important, too.

But KDE is not only important to cars; we're incredibly important to computers! And on that subject, some really nice features and user interface improvements landed for the upcoming Plasma 6.6 release. The hard feature freeze is coming up soon, at which point we'll move into full bug-fixing and polishing mode.

But until then, enjoy some juicy new goodies! Check it out:

Notable New Features

Plasma 6.6.0

You can now save your current visual settings as a new global theme! (Vlad Zahorodnii, plasma-desktop MR #6097)

Global Themes page in System Settings showing the opportunity to create a new global theme from the current visual settings

Added a "Forget device" action to the Bluetooth system tray widget, allowing users to remove paired devices without opening System Settings. (Andrew Gigena, KDE Bug #434691)

You can now search for processes in System Monitor based on their full command-line invocation when the "Command" column is visible. (Alexey Rochev, KDE Bug #448331)

On supported systems, the logout screen now mentions when the system will restart into a different operating system or boot option after it reboots. (Nikolay Kochulin, plasma-workspace MR #5469)

Logout screen showing that a different OS will be booted into after restart

Notable UI Improvements

Plasma 6.6.0

The Power and Battery widget now tells you what specific power management actions apps are blocking, instead of assuming that they're all blocking both sleep and screen locking. (Jakob Petsovits, KDE Bug #418433)

Power and Battery widget telling you what each app is actually blocking

System Settings' Thunderbolt page now hides itself when the device doesn't support Thunderbolt. (Alexander Wilms, plasma-thunderbolt MR #47)

When there are many windows open, the Task Manager widget will now scroll to the active one when you open its window thumbnail list. (Christoph Wolk, KDE Bug #499716)

Notifications no longer waste space showing the same icon in two places. (Kai Uwe Broulik, plasma-workspace MR #6151)

Spectacle now remembers the size (and on X11, also the position) of its main window across launches. (Aviral Singh, KDE Bug #499652)

Made multiple UI improvements to the "Configure Columns" dialog in System Monitor. (Arjen Hiemstra, plasma-systemmonitor MR #405)

System Monitor’s new “Configure Columns” dialog

In the Weather Report widget, when a weather station isn't reporting the current wind speed, the widget now says it doesn't know the wind speed, rather than claiming it's "calm". (Tobias Fella, kdeplasma-addons MR #969)

The Kickoff Application Menu widget now does a better job of handling a huge number of favorite apps. Now the favorites column eventually becomes scrollable, instead of letting icons overlap. (Christoph Wolk, KDE Bug #424067)

You can now find System Settings' Wallpaper page by searching for "desktop background" and some other related terms. (Shubham Arora, plasma-workspace MR #6152)

Frameworks 6.23

Made it possible to see more items at once in the "Get New [thing]" dialogs. (Nate Graham, frameworks-knewstuff MR #380)

More items visible at a time in the Get New Stuff dialogs

Open/Save dialogs now use relative-style date formatting for recent dates and times, which matches how Dolphin shows them. (Méven Car, frameworks-kio MR #2103)

Folders that show thumbnails of their contents now refresh the thumbnail immediately when any of those files are removed. (Akseli Lahtinen, KDE Bug #497259)

Notable Bug Fixes

Plasma 6.5.5

Fixed a strange issue that broke key repeat only in the Brave web browser. (Nicolas Fella, KDE Bug #513637)

Fixed an issue that could make the panel configuration dialog appear on the wrong screen with certain panel and screen arrangements. (Aleksey Rochev, plasma-workspace MR #6140)

Fixed two issues with the "Show Alternatives" popup: one that made it get cut off outside of the screen area for widgets positioned on certain areas of the desktop, and another that made it not disappear when it lost focus. (Aleksey Rochev, KDE Bug #511188 and KDE Bug #511187)

Plasma 6.6.0

Fixed an issue that made Plasma quit when you disconnected the last screen. (Xaver Hugl, KDE Bug #513003)

Fixed an issue with the Applications table on System Monitor's Overview page being blurry with certain scale factors. We had already previously fixed this, but it turned out there were more remaining cases where it still happened, so this should take care of the rest! (Arjen Hiemstra, KDE Bug #445759)

Notable in Performance & Technical

Plasma 6.6.0

Implemented support in Plasma for the up-and-coming oo7 Secret Service provider. (Marco Martin and Harald Sitter, plasma-workspace MR #6109)

Fixed a hilarious issue that caused the wallpaper to bounce a tiny bit with certain fractional scale factors on secondary screens using direct scan-out while on a very recent kernel version. (Xaver Hugl, KDE Bug #513277)

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.

You can help KDE by directly getting involved. 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.

For example, helping out to write these posts is warmly appreciated. Anyone interested in getting involved should check out the evolving documentation on the topic.

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 bugfix mentioned here, feel free to push a commit to the relevant merge request on invent.kde.org.

10 Jan 2026 12:01am GMT

09 Jan 2026

feedPlanet KDE | English

Web Review, Week 2026-02

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


How Github monopoly is destroying the open source ecosystem

Tags: tech, foss, community, ecosystem, github

Github is definitely entrenched by now. Students and beginners hardly look for projects outside of it. Sad state of affair.

https://ploum.net/2026-01-05-unteaching_github.html


Rust At Scale: Scaleway's Big Bet To Become THE European Hyperscaler

Tags: tech, cloud, business, hardware, rust

Wondering what's on the mind of people working on an hyperscaler? This podcast and its transcript gives good insights.

https://filtra.io/rust/interviews/scaleway-jan-26


'Bizarro World'

Tags: tech, gaming, culture

An odd but interesting article. When a journalist randomly discovers that his wife is the best Tetris player in the world.

https://archive.boston.com/news/globe/magazine/articles/2007/08/19/bizarro_world/


Everything You Need to Know About Email Encryption in 2026

Tags: tech, email, security, privacy, politics, gafam

Email encryption is indeed still an open issue. There's no fix in sight for it. It's mostly a lack of political will though, so none of the big players are going to change anything.

https://soatok.blog/2026/01/04/everything-you-need-to-know-about-email-encryption-in-2026/


Improving the Flatpak Graphics Drivers Situation

Tags: tech, system, linux, flatpak, graphics

Interesting point… What to do when there's no good option in the application runtime for the needed graphics drivers and kernel combination?

https://blog.sebastianwick.net/posts/flatpak-graphics-drivers/


Functors, Applicatives, and Monads: The Scary Words You Already Understand

Tags: tech, functional, programming, type-systems, learning

Functional programming is made scary due to its jargon. But it doesn't have to be this way.

https://cekrem.github.io/posts/functors-applicatives-monads-elm/


Python Numbers Every Programmer Should Know

Tags: tech, python, performance

A very comprehensive view of Python memory consumption and the speed of common operations. Some of the numbers are higher than I expected.

https://mkennedy.codes/posts/python-numbers-every-programmer-should-know/


Stop Forwarding Errors, Start Designing Them

Tags: tech, rust, failure, debugging, monitoring, logging

Error handling is still not a properly solved problem in my opinion. At least the Rust community discusses the topic quite a bit. This is good inspiration for other ecosystems as well I think.

https://fast.github.io/blog/stop-forwarding-errors-start-designing-them/


Embassy

Tags: tech, embedded, rust

Looks like an interesting framework for embedded projects.

https://embassy.dev/


[uv] OnceMap: Rust Pattern for Running Concurrent Work Exactly Once

Tags: tech, rust, performance, design, multithreading

More interesting design ideas in uv. Didn't know about the dashmap crate they're using here it looks like a nice one too.

https://codepointer.substack.com/p/uv-oncemap-rust-pattern-for-running


Getting Real With LLMs

Tags: tech, ai, machine-learning, copilot, architecture, complexity

This looks like an interesting way to frame problems. It can give an idea of how likely they can be tackled with LLMs. It also shows that the architecture and the complexity greatly matter.

https://www.giladpeleg.com/blog/getting-real-with-llms


Coupling from a big-O perspective

Tags: tech, programming, complexity, design

OK maybe a longer piece than it should be. Still the idea is interesting. Clearly you want to mind the O(n) coupling in this context.

https://blog.ploeh.dk/2026/01/05/coupling-from-a-big-o-perspective/


We Need to Stop Calling Everything a Mock

Tags: tech, learning, tests, tdd

Indeed, the terminology has been greatly confused. I think I'll die on this particular hill though. I think it's important to name things properly. That said the trick of going through a verb might just work?

https://coding-is-like-cooking.info/2026/01/we-need-to-stop-calling-everything-a-mock/


Stop Guessing, Start Improving: Using DORA Metrics and Process Behavior Charts

Tags: tech, processes, metrics, data

Interesting short article. Shows the use of DORA metrics and process behavior charts. This is a good way to test hypothesis and see the impact of processes changes or introduction of new practices. It needs to be done over time and be patient of course.

https://www.infoq.com/articles/DORA-metrics-PBCs/


Improve Your Work System

Tags: management, organisation, team

Good questions to consider to gauge how you work. Can improve the organisation if you really get to the bottom of it.

https://www.congruentchange.com/improve-your-work-system/


worstofbreed.net - We make bad software

Tags: tech, complexity, satire, funny

This is a very nice satire website about the problems in our industry. Want to work in a resume driven context? Here is how!

https://worstofbreed.net/


Why Are There No Holes Around Trees?

Tags: science, biology

The biology of trees is just fascinating. And there's so much we still don't know about it.

https://www.youtube.com/watch?v=pHJIhxZEoxg



Bye for now!

09 Jan 2026 6:32pm GMT

QtNat – Open your port with Qt

QtNat is a lightweight C++ library built with Qt 6 that simplifies NAT port mapping using UPnP (Universal Plug and Play). It is designed to help developers easily expose local services to external networks without requiring manual router configuration for users.

By leveraging UPnP, QtNat automatically communicates with compatible routers to create port forwarding rules at runtime. This makes it particularly useful for peer-to-peer applications, multiplayer games, remote access tools, and any software that needs reliable inbound connectivity behind a NAT.

QtNat provides a simplified API to do all steps automatically: discovery and mapping. This has been tested on my local device. Feel free to test it and improve it.

Use it

UpnpNat nat;
QObject::connect(&nat, &UpnpNat::statusChanged, [&nat, &app]() {
switch(nat.status())
{
case UpnpNat::NAT_STAT::NAT_IDLE:
case UpnpNat::NAT_STAT::NAT_DISCOVERY:
case UpnpNat::NAT_STAT::NAT_GETDESCRIPTION:
case UpnpNat::NAT_STAT::NAT_DESCRIPTION_FOUND:
break;
case UpnpNat::NAT_STAT::NAT_FOUND:
nat.requestDescription();
break;
case UpnpNat::NAT_STAT::NAT_READY:
nat.addPortMapping("UpnpTest", nat.localIp(), 6664, 6664, "TCP");
break;
case UpnpNat::NAT_STAT::NAT_ADD:
qDebug() << "It worked!";
app.quit();
break;
case UpnpNat::NAT_STAT::NAT_ERROR:
qDebug() <<"Error:" <<nat.error();
app.exit(1);
break;
}
});
nat.discovery();
  1. We create the object (l:0)
  2. We connect to statusChanged signal to get notified (l:2)
  3. When status is NAT_FOUND, we request the description (l:11)
  4. When status is NAT_READY, we request the port mapping (l:14)
  5. When status is NAT_ADD, It means the port mapping request has been added, It worked! The application quits.(l:17)
  6. When status is NAT_ERROR, Error occured and display the error text. The application exits on error. (l:21)
  7. We connect to error changed in order to detect errors. (l:14)
  8. We start the discovery. (l:28)

Technical explainations

The discovery

Basically, we need to know if there is a upnp server around. To do so, we send an M-SEARCH request on the multicast address.

Here is the code:

#define HTTPMU_HOST_ADDRESS "239.255.255.250"
#define HTTPMU_HOST_PORT 1900
#define SEARCH_REQUEST_STRING "M-SEARCH * HTTP/1.1\n" \
"ST:UPnP:rootdevice\n" \
"MX: 3\n" \
"Man:\"ssdp:discover\"\n" \
"HOST: 239.255.255.250:1900\n" \
"\n"
void UpnpNat::discovery()
{
setStatus(NAT_STAT::NAT_DISCOVERY);
m_udpSocketV4.reset(new QUdpSocket(this));
QHostAddress broadcastIpV4(HTTPMU_HOST_ADDRESS);
m_udpSocketV4->bind(QHostAddress(QHostAddress::AnyIPv4), 0);
QByteArray datagram(SEARCH_REQUEST_STRING);
connect(m_udpSocketV4.get(), &QTcpSocket::readyRead, this, [this]() {
QByteArray datagram;
while(m_udpSocketV4->hasPendingDatagrams())
{
datagram.resize(int(m_udpSocketV4->pendingDatagramSize()));
m_udpSocketV4->readDatagram(datagram.data(), datagram.size());
}
QString result(datagram);
auto start= result.indexOf("http://");
if(start < 0)
{
setError(tr("Unable to read the beginning of server answer"));
setStatus(NAT_STAT::NAT_ERROR);
return;
}
auto end= result.indexOf("\r", start);
if(end < 0)
{
setError(tr("Unable to read the end of server answer"));
setStatus(NAT_STAT::NAT_ERROR);
return;
}
m_describeUrl= result.sliced(start, end - start);
setStatus(NAT_STAT::NAT_FOUND);
m_udpSocketV4->close();
});
connect(m_udpSocketV4.get(), &QUdpSocket::errorOccurred, this, [this](QAbstractSocket::SocketError) {
setError(m_udpSocketV4->errorString());
setStatus(NAT_STAT::NAT_ERROR);
});
m_udpSocketV4->writeDatagram(datagram, broadcastIpV4, HTTPMU_HOST_PORT);
}

The whole goal of the discovery is to get the description file from the server with all available devices and services. The result is stored in m_describeUrl.

Request Description file

Simple request using QNetworkAccessManager.

void UpnpNat::requestDescription()
{
setStatus(NAT_STAT::NAT_GETDESCRIPTION);
QNetworkRequest request;
request.setUrl(QUrl(m_describeUrl));
m_manager.get(request);
}

Parsing Description file

Your physical network device may act as several Upnp devices. You are looking for one of these device type:

Those type are followed with a number (1 or 2), It is the Upnp protocol version supported by the device.

void UpnpNat::processXML(QNetworkReply* reply)
{
auto data= reply->readAll();
if(data.isEmpty()) {
setError(tr("Description file is empty"));
setStatus(NAT_STAT::NAT_ERROR);
return;
}
setStatus(NAT_STAT::NAT_DESCRIPTION_FOUND);
/*
Boring XML&nbsp;parsing in order to find devices and services.
Devices:
constexpr auto deviceType1{"urn:schemas-upnp-org:device:InternetGatewayDevice"};
constexpr auto deviceType2{"urn:schemas-upnp-org:device:WANDevice"};
constexpr auto deviceType3{"urn:schemas-upnp-org:device:WANConnectionDevice"};
Services:
constexpr auto serviceTypeWanIP{"urn:schemas-upnp-org:service:WANIPConnection"};
constexpr auto serviceTypeWANPPP{"urn:schemas-upnp-org:service:WANPPPConnection"};
*/
m_controlUrl = /* Most important thing to find the controlUrl of the proper service.*/
setStatus(NAT_STAT::NAT_READY);
}

Send mapping Request

Sending a request is just sending HTTP request with the proper data.

I use inja to generate the http data properly.

This is the inja template.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:AddPortMapping
xmlns:u="{{ service }}">
<NewRemoteHost></NewRemoteHost>
<NewExternalPort>{{ port }}</NewExternalPort>
<NewProtocol>{{ protocol }}</NewProtocol>
<NewInternalPort>{{ port }}</NewInternalPort>
<NewInternalClient>{{ ip }}</NewInternalClient>
<NewEnabled>1</NewEnabled>
<NewPortMappingDescription>{{ description }}</NewPortMappingDescription>
<NewLeaseDuration>0</NewLeaseDuration>
</u:AddPortMapping>
</s:Body>
</s:Envelope>

Then, let's create a json object with all data. As final step, we need to create a request, set its data, and then post it.

void UpnpNat::addPortMapping(const QString& description, const QString& destination_ip, unsigned short int port_ex,
unsigned short int port_in, const QString& protocol)
{
inja::json subdata;
subdata["description"]= description.toStdString();
subdata["protocol"]= protocol.toStdString();
subdata["service"]= m_serviceType.toStdString();
subdata["port"]= port_in;
subdata["ip"]= destination_ip.toStdString();
auto text= QByteArray::fromStdString(inja::render(loadFile(key::envelop).toStdString(), subdata));
QNetworkRequest request;
request.setUrl(QUrl(m_controlUrl));
QHttpHeaders headers;
headers.append(QHttpHeaders::WellKnownHeader::ContentType, "text/xml; charset=\"utf-8\"");
headers.append("SOAPAction", QString("\"%1#AddPortMapping\"").arg(m_serviceType));
request.setHeaders(headers);
m_manager.post(request, text);
}

Finally, just check the answer

The reply has no error, it worked, the status changes to NAT_ADD. Otherwise, the status changes to error.

void UpnpNat::processAnswer(QNetworkReply* reply)
{
if(reply->error() != QNetworkReply::NoError)
{
setError(tr("Something went wrong: %1").arg(reply->errorString()));
setStatus(NAT_STAT::NAT_ERROR);
return;
}
setStatus(NAT_STAT::NAT_ADD);
}

Don't hesitate to test it on your own device. Just to validate, it works everywhere. Any comment or change request, please use Github for that.

Source code

09 Jan 2026 5:38pm GMT

KDE Ships Frameworks 6.22.0

Friday, 9 January 2026

KDE today announces the release of KDE Frameworks 6.22.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
  • [FileWatchTest][KInotifyTest] Minor cleanup. Commit.
  • [FileWatchTest][KInotifyTest] Cover atomic file replacing. Commit.
  • [FileWatchTest] Cleanup and extend comments, correct wait condition. Commit.
Bluez Qt
  • Export header file for battery. Commit.
  • Remove duplicate headers in same file. Commit.
Breeze Icons
  • Add new icon set: view-visible-off. Commit.
  • Add kjournaldbrowser icon symlinks for flatpak app. Commit.
  • Optionally disable icons library. Commit.
  • Handle cross compiling for tools. Commit.
Extra CMake Modules
  • FindInotify: fix comparison. Commit.
  • ECMAddTests: add functions and variables to preset test name prefix. Commit.
KArchive
  • 7z: Fix infinite loop in broken files. Commit.
  • 7z: Fix infinite loop in malformed file. Commit.
  • 7z: Fix infinite loop in malformed file. Commit.
KCalendarCore
  • Make build qml plugin optional (default on). Commit.
KCMUtils
  • Handle buttons changing at runtime. Commit.
KCodecs
  • [KEncodingProber] Add UTF16 surrogate pair support to state table. Commit.
  • [KEncodingProber] Stop rejecting valid MSBs in UTF-16 state machine. Commit.
  • [KEncodingProber] Reduce model switching in HandleData(). Commit.
  • [KEncodingProber] Avoid passing mangled data to the UnicodeGroupProber. Commit.
  • [KEncodingProber] Untangle HebrewProber and SBCharSetProber. Commit.
  • [KEncodingProber] Minor cleanups for SBCharSetProber. Commit.
  • [KEncodingProber] Various minor cleanups for HebrewProber. Commit.
  • [KEncodingProber] Add test for Windows-1253/iso8859-7 CP (Greek). Commit.
  • [KEncodingProber] Add some more testing for windows-1252 codepage. Commit.
  • [KEncodingProber] Add tests for Windows-1255 CP and UTF-8 Hebrew text. Commit.
  • [KEncodingProber] Simplify and improve unit test check condition. Commit.
  • [KEncodingProber] Verify short inputs cause no crash. Commit.
  • [KEncodingProber] Fix UTF-16 BOM detection. Commit.
  • [KEncodingProber] Verify confidence in unit tests. Commit.
  • [KEncodingProber] Remove no longer used dedicated Japanese/Chinese probers. Commit.
  • [KEncodingProber][MBCS] Allow to use only a subset of probers. Commit.
  • [KEncodingProber][MBCS] Remove unused includes from header file. Commit.
KColorScheme
  • Use Qt API instead of KColorSchemeWatcher. Commit.
KConfig
  • Add std::chrono convenience helpers. Commit.
  • Add long and ulong as supported types. Commit.
  • KConfigIniBackend::parseConfig: reuse allocated buffer to read group name. Commit.
  • Use ECM_TEST_NAME_PREFIX. Commit.
  • Fix FindNext shortcut on macos. Commit.
KConfigWidgets
  • Fix scanning for kf6_entry.desktop files in "locale" root dirs & parents. Commit.
KContacts
  • Use ECM_TEST_NAME_PREFIX. Commit.
KCoreAddons
  • Add OpenBSD available memory and refactor. Commit.
  • Remove duplicate headers in same file. Commit.
KDav
  • Don't hide when the principals home sets fetch failed. Commit.
  • Use ECM_TEST_NAME_PREFIX. Commit.
KDeclarative
  • DeclarativeDragArea: Filter mouse events according to acceptedButtons(). Commit. Fixes bug #384009
KDocTools
KGuiAddons
KHolidays
  • Update Japanese holidays for 2024-2026. Commit.
  • Update holiday_cn_zh-cn for 2026 CN holidays. Commit.
  • Add comprehensive list of Nepalese holidays for 2026-2030 when possible. Commit.
KI18n
  • Docs: expand org.kde.ki18n coverage. Commit.
  • Remove duplicate headers in same file. Commit.
KIconThemes
  • KIconLoader: When processing SVG, skip whitespace and comments. Commit.
KImageformats
  • Add YCgCo-Re AVIF test. Commit.
  • Avif: YCgCo-Re decoding fix. Commit.
  • HEIF tests skipped using kde-ci.yml. Commit.
  • Add allocation limit test (0/256 MiB). Commit.
  • AllocationLimit = 0 means no limit. Commit.
KIO
  • Drop no longer needed moc include. Commit.
  • Add manual test for FavIconRequestJob. Commit.
  • KFilePlacesModel: Set desktop file name for partition manager. Commit.
  • Remove duplicate headers in same file. Commit.
  • Deprecate PreviewJob::removeItem(QUrl). Commit.
  • PreviewJob: fix empty enabledPlugins attribute set for thumbnail job. Commit.
  • PreviewItem struct: drop unused cacheSize member. Commit.
  • UDSEntryPrivate::load: reuse allocated buffer for string data. Commit.
  • UDSEntryPrivate::load: avoid repeated look-up in cachedStrings list. Commit.
  • Kfileplacesview: remove DropAction::MoveAction from the list of supportedActions. Commit. Fixes bug #509231
  • RenameDialog: Add "Compare Files" button. Commit.
  • Use ECM_TEST_NAME_PREFIX. Commit.
Kirigami
  • Controls/SwipeListItem: remove dead validate function. Commit.
  • Downgrade the message about not finding a plaform plugin to debug. Commit.
  • Controls/NavigationTabButton: remove Qt 6.8 check. Commit.
  • Layouts/FormLayout: avoid binding loop during initial load. Commit. Fixes bug #513185
  • Controls/GlobalDrawer: explicitly pass backItem. Commit.
  • Controls/private: pass refreshing to PullDownIndicator. Commit.
  • Autotests: linting changes. Commit.
  • Examples: linting. Commit.
  • Drop non-existing handler parameters. Commit.
  • Primitives/Separator: import primitives. Commit.
  • Tests: various linting fixes for the manual tests. Commit.
  • SwipeListItem: Use implicitContentHeight/Width instead of contentItem.implicitHeight/Width. Commit.
  • Avoid custom-parsed PropertyChanges. Commit.
  • Remove unused imports. Commit.
  • Port to ComponentBehavior Bound and required properties. Commit.
  • Qualify access to parent properties. Commit.
  • Controls/NavigationTabButton: fix pointSize binding. Commit.
  • Templates/AbstractApplicationHeader: always set preferredHeight. Commit.
  • Controls/Action: fix alternate shortcut. Commit.
  • Port to Application.styleHints. Commit.
  • Controls/AboutItem: qualify Separator. Commit.
  • SwipeListItem: Add back checking for parent width and implicitWidth. Commit.
  • Add extra margin only for default title. Commit.
  • Documentation fixes. Commit.
  • Document requirements for new components. Commit.
  • Add TitleSubtitleWithActions. Commit.
KItemModels
  • KDescendantsProxyModel: fix invalid call to index(-1,-1). Commit.
KJobWidgets
  • Remove duplicate headers in same file. Commit.
KPackage
KService
  • Remove FormFactor handling. Commit.
  • Drop Library handling. Commit.
  • Drop allowAsDefault handling. Commit.
KStatusNotifieritem
  • Tweak KStatusNotifierItem::setAssociatedWindow. Commit.
KSVG
  • Remove noisy debug on ImageSetPrivate::findInCache. Commit.
  • Remove duplicate headers in same file. Commit.
KTextEditor
  • Correction: fixes typo introduced in previous commit. Commit.
  • Fix various typos. Commit.
KUserFeedback
  • CI - Flatpak - Update Runtime to 6.10. Commit.
KWidgetsAddons
  • KPageView: Fix top aligned widget stretch. Commit.
  • Remove duplicate headers in same file. Commit.
  • KDateTable: Don't paint days in dark red if high-contrast is active. Commit.
  • KPageView: Use correct icon mode if high-contrast color scheme is in use. Commit.
  • Add helper for checking if high-contrast color scheme is in use. Commit.
KWindowSystem
  • Add KWaylandExtras::{setXdgToplevelTag,setXdgToplevelDescription}. Commit. See bug #512447
  • Use ECM_TEST_NAME_PREFIX. Commit.
KXMLGUI
  • Remove dead gestures code. Commit.
Solid
  • /etc/mtab not exists on OpenBSD. Commit.
  • Fix some missing overrides in win backend. Commit.
Sonnet
  • Use ECM_TEST_NAME_PREFIX. Commit.
Syntax Highlighting
  • Add support for Toit. Commit.
  • Systemd unit: update to systemd v259. Commit.
  • Add Mermaid syntax highlighting. Commit. Implements feature #494286
  • New feature: stacking several contexts at the same time. Commit.
  • Dot: add Graphviz as alternative name. Commit.
  • Add new QML keywords. Commit.

09 Jan 2026 12:00am GMT

08 Jan 2026

feedPlanet KDE | English

Events in December 2025

December was quite an eventful month for me, with over 4,000 km travelled by train. This was in part caused by the holidays and visiting family, but also by the KDE PIM sprint in Paris and the 39th Chaos Communication Congress.

KDE PIM sprint in Paris

From the 12th to the 14th of December, I was in Paris. It was actually my first time there for more than a day trip, so I arrived a day earlier to explore the city a bit. I went on a walk across the city with Tobias and Nicolas, and I took some photos.

 

The weekend was also very productive. We advanced our goal of making KMime a proper KDE Framework; made Message-IDs in emails more privacy-conscious; and discussed various important topics such as the retirement of the Kolab resource and the switch to SQLite as the default backend for Akonadi.

 

Huge thanks to enioka Haute Couture for having us in their office in Paris.

The sprint being in Paris also allowed me to afterward go visit my grandma, 350 km further south of Paris, so this was particularly convenient.

39th Chaos Communication Congress (39c3)

Another event I went to was 39c3, which is the third year in a row that I attended, and this year again we had an assembly as part of the Bits und Bäume umbrella, thanks to Joseph.

 

I love the vibe of this event. It's not very dry or only tech-focused, but also has a big artistic and political aspect to it. And while the number of attendees is very large, at the same time it's very chill and I don't feel overwhelmed, unlike at FOSDEM.

At the KDE assembly, we met a lot of interested users, some GNOME friends, and since a bunch of KDE devs were there, we managed to work on a few productive things, like switching the map backend from Itinerary to MapLibre.

And this year, I even managed to go on national TV for a few seconds to speak about Nextcloud. My German grandma called me the day afterward, very happy to have seen me.

 

08 Jan 2026 10:00pm GMT

KDE Gear 25.12.1

Over 180 individual programs plus dozens of programmer libraries and feature plugins are released simultaneously as part of KDE Gear.

Today they all get new bugfix source releases with updated translations, including:

Distro and app store packagers should update their application packages.

08 Jan 2026 12:00am GMT

06 Jan 2026

feedPlanet KDE | English

Kraft 2.0 Announcement

Kraft 2.0 logo interpretationWith the start of the new year, I am very happy to announce the release of version Kraft 2.0.0.

Kraft provides effective invoicing and document management for small businesses on Linux. Check the feature list.

This new version is a big step ahead for the project. It does not only deliver the outstanding ports to Qt6 and KDE Frameworks 6 and tons of modernizations and cleanups, but for the first time, it also does some significant changes in the underlying architecture and drops outdated technology.

Kraft now stores documents not longer in a relational database, but as XML documents in the filesystem. While separate files are more natural for documents anyway, this is paving the way to let Kraft integrate with private cloud infrastructures like OpenCloud or Nextcloud via sync. That is not only for backup- and web-app-purposes, but also for synced data that enables to run Kraft as distributed system. An example is if office staff works from different home offices. Expect this and related usecases to be supported in the near future of Kraft.

But there are more features: For example, the document lifecycle was changed to be more compliant: Documents remain in a draft status now until they get finalized, when they get their final document number. From that point on, they can not longer be altered.

There is too much on the long Changes-List to mention here.

However, what is important is that after more than 20 years of developing and maintaining this app, I continue to be motivated to work on this bit. It is not a big project, but I think it is important that we have this kind of "productivity"-applications available for Linux to make it attractive for people to switch to Linux.

Around Kraft, a small but beautiful community has built up. I like to thank everybody who contributed in any way to Kraft over the years. It is big fun to work with you all!

If you are interested, please get in touch.

06 Jan 2026 10:14am GMT

04 Jan 2026

feedPlanet KDE | English

What does it mean to write in 2026?

I've been writing for something like 50 years now. I started by scribbling letters on paper as a child because I was fascinated that these expressed meaning. I wrote a lot for school, for university, for work, and privately. I wrote letters, emails, posts on social media, articles, papers, documentation, diaries, opinion pieces, and presentations. I've been writing my blog for more than 20 years.

Writing always has been a way for me to connect to the people, to the community, around me, communicating with my tribe. It also has always been a way to express, refine and archive my thoughts, a bit like building a memory of insights. It also has been a way to record some of my personal history and the history of the projects I'm involved with.

My writing has changed over the last couple of years. I'm writing less publicly and more focused on specific projects. It feels like it has become less personal and more utilitarian.

Part of this is that the Internet has lost a good part of its strength as a neutral platform to reach the world. For a long time I knew where to reach the people I wanted to address and had control about my content and how it was distributed. Nowadays social media platforms act as distributors, but we are prey to their algorithms. So while publishing content is still simple, it's much harder to get it to your audience without compromising to the mechanisms which make the algorithms tick.

Another part is the disrupting advance of AI writing capabilities. While I have relied on humans to give me feedback in the past, to get into a conversation on the topics of my posts to refine the thoughts in them, now there is this all-powerful-seeming assistant in my editor who is eager to take over those roles. And it would even write for me in my own style. So what's the value of writing in 2026? Is it even worth bothering with trying to express your thoughts in writing, when a machine can produce content which looks the same, much faster and in much larger quantity? What does this do to readers, do they still care about what I would write?

My feeling is that it's still worth to put in effort to create genuine, trustworthy, truthful writing. The format, the tools, the channels might change, but the values don't. The challenge will be to figure out how to create a signal which transports these values.

I have always liked the format and style of a blog, as a stream of thoughts, coming from a personal perspective, but focused on topics of relevance to others. I enjoy reading this from others and I enjoy writing in this style. And I don't have to rely on a platform I don't control, but can use my own.

So it looks like this blog won't go away, but will channel my thoughts in 2026 as well.

04 Jan 2026 9:58pm GMT

This Week in KDE Apps

A new whiteboard app, Vector-based map rendering in Itinerary, and new releases

Welcome to a new issue of "This Week in KDE Apps"! Every week (or so) we cover as much as possible of what's happening in the world of KDE apps.

We kick off the year with everything that's new in the KDE App scene. Let's dig in!

Travel Applications

KDE Itinerary Digital travel assistant

Jonah Brüchert added a MapLibre-based backend to Itinerary maps views. This allows us to render vector-based tiles, which means they can be displayed at any size without visible pixels. Zooming in and out should also be much smoother. Another advantage is that the map now shows labels in the local language as well as English. This makes the map much more useful in case you cannot read a locally used script. In the future, we might even be able to use map tiles that can display labels in your preferred language. (26.04.0 - pim/itinerary MR #454)

Carl Schwan ported multiple dialogs to a convergent dialog/bottom drawer style (26.04.0 - pim/itinerary MR #413 and pim/itinerary MR #464).

Volker Krause added support for marking reservations as cancelled in your timeline, so that these reservations are not counted in your yearly statistics (26.04.0 - link).

Luca Weiss updated the KLM boarding passes extractor to also extract the boarding group (25.12.1 - pim/kitinerary MR #205). Thomas Arrow added an extractor for KLM's "Ticket for your trip" emails (25.12.1 - pim/kitinerary MR #206).

Tobias Fella added support for extracting GOMUS annual tickets (25.12.1 - pim/kitinerary MR #207).

PIM Applications

KMail A feature-rich email application

Albert Astals Cid made KMail's system tray icon also work when KMail is run inside Kontact (26.04.0 - pim/kmail MR #187).

Office Applications

Okular View and annotate documents

Cody Neiman fixed the extreme downscaling of custom stamps, which resulted in pixelated stamp annotations (25.12.1 - graphics/okular MR #1280).

Creative Applications

Drawy Your handy, infinite brainstorming tool

Thanks to Prayag Jain, KDE has a new whiteboard app called Drawy! It combines a simple interface with an infinite canvas, giving users the freedom to think and draw without limits.

Some of its features are:

Drawy is still under development, but you can already download a nightly flatpak. You are invited to test the app and share feedback to help shape Drawy as your handy, infinite brainstorming tool!

Since the incubation started, Prayag Jain has been fixing various performance issues (graphics/drawy MR #108 and graphics/drawy MR #115), and Laurent Montel did a lot of code cleanup to follow KDE best practices more closely (link).

Utilities Applications

Konsole Use the command line interface

Leonardo Malaman added a new "Force New Tabs" option to Konsole. This forces Konsole to open a new tab in an already open Konsole window instead of opening a new window (utilities/konsole MR #1112).

Kate Advanced text editor

Christoph Cullmann added out-of-the-box support for neocmakelsp, an LSP server for CMake (26.04.0 - utilities/kate MR #1974).

KAIChat AI Chat

Laurent Montel released KAiChat 0.6.0. This release introduces Wikipedia and weather integration, the capability to copy block code to the clipboard, and a quick search widget.

Network Applications

NeoChat Chat on Matrix

Károly Veres unified the space selection logic, so that using the quick switcher or clicking on a notification to jump to a room will now switch to correct space (26.04.0 - network/neochat MR #2551).

Nate Graham improved the hamburger menu button. Now the menu opens right beneath the button, the button has a pressed state while the menu is open, and the menu will close when clicking on the button again. (26.04.0 - network/neochat MR #2553)

Azhar Momin added a button to cycle through unread highlights (26.04.0 - network/neochat MR #2552).

Joshua Goins re-arranged the profile dialog and grouped similar actions together (26.04.0 - network/neochat MR #2544). And he made it possible to view the profile dialog when receiving an invitation (26.04.0 - network/neochat MR #2548).

Tobias Fella added some fixes for the new version of Matrix rooms (26.04.0 - network/neochat MR #2550).

Kaidan Modern chat app for every device

Melvin Keskin released Kaidan 0.14.0. This release allow you to resend failed messages via the context menu, cancel and restart uploads, join group chats or add contacts by their XMPP URIs, and improves compatibility for servers using LDAP.

System Applications

KCron Task Scheduler

Alexander Wilms fixed running commands containing spaces in their path (26.04.0 - system/kcron MR #46).

…And Everything Else

This blog only covers the tip of the iceberg! If you're hungry for more, check out This Week in Plasma, which covers all the work being put into KDE's Plasma desktop environment every Saturday.

For a complete overview of what's going on, visit KDE's Planet, where you can find all KDE news unfiltered directly from our contributors.

Get Involved

The KDE organization has become important in the world, and your time and contributions have helped us get there. As we grow, we're going to need your support for KDE to become sustainable.

You can help KDE by becoming an active community member and getting involved. 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. There are many things you can do: you can help hunt and confirm bugs, even maybe solve them; contribute designs for wallpapers, web pages, icons and app interfaces; translate messages and menu items into your own language; promote KDE in your local community; and a ton more things.

You can also help us by donating. Any monetary contribution, however small, will help us cover operational costs, salaries, travel expenses for contributors and in general just keep KDE bringing Free Software to the world.

To get your application mentioned here, please ping us in invent or in Matrix.

04 Jan 2026 5:21pm GMT

39C3

A few days ago I attended the 39th Chaos Communication Congress (39C3) in Hamburg, Germany, as part of the KDE presence there.

39C3 Power Cycles

KDE

Like at 38C3 in the previous year we had a small KDE assembly as part of the Bits & Bäume Habitat.

There were two talks with KDE contributors in the main program:

The End of 10 campaign also had organized a meetup and a install party.

As Jonah has already reported we got very positive feedback from attendees about KDE's work.

KDE banner with colored LED decoration.
39C3 KDE Assembly (photo by Carl Schwan)

Itinerary

Itinerary was a frequent discussion topic for me, both with the KDE team and attendees in general.

Android

I also had the opportunity to talk to developers of F-Droid and other FOSS Android applications, who share a lot of the pain we are also dealing with in bringing KDE applications to Android.

A big concern especially for people not associated with a bigger umbrella organization is the upcoming requirements by Google for developer verification. While KDE might be less affected by this directly, any negative effect on the larger FOSS ecosystem is of course also bad for us. The continuous close-down of AOSP development is also not helping, making it significantly harder for Google-free Android variants.

None of that is entirely surprising, and it increases the pressure on fully open Linux systems becoming a viable alternative on more mobile devices. Both that as well as collaboration on adjacent infrastructure such as fully open push notification infrastructure has been making good progress in 2025 fortunately.

Transitous

We had a Transitous meetup on the last day at Wikimedia's assembly, hosted by Jonah, Julius and myself. We should organize and announce this earlier next time, but the space was nevertheless full. Meeting notes are in the wiki.

We had quite a few conversations around Transitous beyond this as well:

It also looks like we might have another iteration of the Transitous Hack Weekend in Berlin, next weekend already (January 9-11). That's very short notice and not entirely finalized yet. If you are interested in joining please get in touch in the Transitous Matrix channel.

OSM

The OSM assembly was conveniently directly next to the KDE one, so I could easily drop into conversations about indoor mapping, indoor routing or indoor positioning there. Interest in all parts of this seems to be increasing, we probably should improve the introduction material for this a bit.

There's also a plan to have an (offline) meeting in the next months to get some of the pending tagging proposals and open questions e.g. around "thick" walls, stairs and fractional levels sorted out and over the finishing line.

We also had the opportunity to discuss the FOSSGIS e.V. becoming a possible umbrella organization for Transitous and/or the Open Transport Community Conference. Especially the latter is becoming slightly more pressing as we got a few sponsorship offers while looking for a venue, and that's something we can only make use of with an organization behind us that can actually handle money.

Weather and Emergency Alerts

I also met with FOSSWarn to discuss the next steps on the public alert distribution server:

You can help!

Events like Chaos Communication Congress are enormously useful for bringing together, connecting and enabling collaboration between people from different areas or initiatives. The sheer size and diverse set of attendees help a lot with that.

Attending events however incurs cost for travel, accommodation and entrance. Your donation to organizations like KDE e.V. or FOSSGIS e.V. support such activities.

04 Jan 2026 9:45am GMT

03 Jan 2026

feedPlanet KDE | English

KDE Ni! OS – installing packages from source – Plasma Pass

This post will show the NixOS way of adding a custom package and explain the benefits of this approach in the context of system immutability.

Plasma Pass

KDE Ni! OS recently got a new package installed by default - Daniel Vrátil's Plasma Pass applet.

Plasma Pass is a Plasma applet to access passwords from pass, the standard UNIX password manager. You can find more information about the applet in Dan's blog post.

As NixOS doesn't currently offer Plasma Pass in its repositories, the package is installed in Ni! OS from the sources as in some other BTW, I use … distributions.

In NixOS, this is easily done via overlays. We can create an overlay that defines the plasma-pass package so that it can be installed as if it were a real NixOS package.

Package definition

This is the overlay definition used in Ni! (ni/packages/plasma-pass.nix):

self: prev: {
 kdePackages = prev.kdePackages.overrideScope (kdeSelf: kdeSuper: {
 plasma-pass = kdeSelf.mkKdeDerivation rec {
 pname = "plasma-pass";
 version = "1.3.0-git-59be3d64";

 src = prev.fetchFromGitLab {
 domain = "invent.kde.org";
 owner = "plasma";
 repo = "plasma-pass";
 rev = "59be3d6440b6afbacf466455430707deed2b2358";
 hash = "sha256-DocHlnF9VJyM1xqZx/hoQVMA/wLY+4RzAbVOGb293ME=";
 };

 buildInputs = [
 kdeSelf.plasma-workspace
 kdeSelf.qgpgme
 self.oath-toolkit
 ];

 meta = with prev.lib; {
 description = "Plasma applet for the Pass password manager";
 license = licenses.lgpl21Plus;
 platforms = platforms.linux;
 };
 };
 });
}

Most of this file is self-explanatory (except for the strange looking syntax of the Nix language :) ).

Since Plasma Pass is a KDE project, we want it visible as a part of kdePackages collection, and as it uses the common build setup that all KDE projects use (or should use), it uses mkKdeDerivation to define the plasma-pass package. This defines some basic dependencies, commonly used by KDE projects and adaptations needed for them to work properly in NixOS. For non-KDE-friendly packages, you'd base your package on the standard mkDerivation instead.

The project sources are located on the KDE's GitLab instance at invent.kde.org, therefore the package definition uses fetchFromGitLab to retrieve the sources. It is also possible to clone repositories on GitHub, fetch and use source tarballs, etc. All fetchers are described at NixOS Manual > Fetchers.

The rev field in the fetchFromGitLab command is the GIT revision that you want to install, and hash you can get by using the nix-prefetch-git command:

nix shell nixpkgs#nix-prefetch-git
nix-prefetch-git https://invent.kde.org/plasma/plasma-pass \
 --rev 59be3d6440b6afbacf466455430707deed2b2358

The buildInputs part defines additional dependencies needed by Plasma Pass, and meta defines some meta information about the package such as the description and the license.

Using the definition

After defining the package, we have to add it to nixpkgs.overlays in any of our NixOS configuration files. In the case of Ni! OS, this is done in ni/modules/base.nix which defines the UI software that Ni! OS installs by default.

nixpkgs.overlays = [
 (import ../packages/plasma-pass.nix)
 ];

With this overlay, plasma-pass can be used as if it was a normal NixOS package.

environment.systemPackages = with pkgs; [
 ...
 kdePackages.plasma-pass
 ...
 ];

When plasma-pass gets added to the nixpkgs repository, the only action that will be needed in Ni! OS to switch to the official version is to remove the import...plasma-pass.nix from the overlays (this is the reason why we explicitly placed it in kdePackages collection - otherwise, we could have just put it top-level).

Custom packages and immutability

The main point of this post is not really to announce that a single new package is added to the Ni! OS setup. Even if it is a cool one like Plasma Pass.

The point is to show how a custom package that is not available in the vast collection of nixpkgs can be added to a NixOS-based system.

The custom package becomes a proper regular Nix package and gets all the benefits of Nix's particular approach to immutability. If Plasma Pass gets broken after an update (either if new Plasma version breaks Plasma Pass, or if the new version of Plasma Pass no longer works as expected), you can always boot into the version before the bad update.

With distributions with immutable core and custom applications installed as Flatpaks, downgrading is possible, but a bit more involved and relies on 3rdparty keeping the old package versions still available for download.

With NixOS, all the previous versions remain on your system until you decide to remove them.

03 Jan 2026 6:30pm GMT

This Week in Plasma: new year, new accessibility features!

Welcome to a new issue of This Week in Plasma!

Plasma developers are starting to trickle back from their vacations, and are polishing up and merging work that was nearing completion late last year. Among them are some impactful accessibility features, plus lots more holiday goodies!

Also, allow us to thank everyone who donated to KDE's 2025 end-of-year fundraiser. Thanks to all of you, we raised an additional €385,000 for KDE e.V. - a staggering, awe-inspiring sum of money! KDE e.V. will put it to good use keeping KDE financially and technically sustainable for years to come.

Finally, please welcome to TWiP John Veness, who has helped out with this week's post! Contributions here are warmly appreciated.

Anyway, let's check out the work:

Notable New Features

Plasma 6.6.0

The "Slow Keys" accessibility feature has been implemented for Plasma's Wayland session! (Martin Riethmayer, KDE bug #490826)

The Zoom effect now has a mode where the pointer never leaves the center of the physical screen. (Ritchie Frodomar, KDE bug #513145)

The Emoji Selector app now lets you choose a preferred skin tone for emojis of hands and people. (Tobias Ozór, plasma-desktop MR #3399)

Emoji Selector app showing skin tone chooser menu

It's now possible to disable the visible timeout indicators on notifications if they stress you out. (Anton Birkel, KDE bug #411613)

Option on System Settings’ Notifications page to disable notification timeout indicators

Notable UI Improvements

Plasma 6.5.5

When Discover prompts you to search the internet for an app that it couldn't find, the search string now includes the correct OS name if you're not using a Linux-based OS. (Jaimukund Bhan, KDE bug #513366)

Plasma 6.6.0

Using a game controller will now count as "activity", stopping the system from automatically going to sleep or locking the screen. (Yelsin Sepulveda, KDE bug #328987)

When a laptop is plugged in or unplugged while asleep, it now wakes up being aware of the current state. (Nate Graham, KDE bug #507203)

System Settings' Touchscreen page now hides itself when there are no touchscreens connected. (Nicolas Fella, KDE bug #513566)

The screen chooser OSD now has a button to open the full System Settings page if none of the built-in options are relevant. (Kai Uwe Broulik, kscreen MR #442)

Button in screen chooser OSD to configure screen settings in more detail

Creating a sticky note on the desktop via middle-click paste now focuses the text area immediately, ready for editing. (Kai Uwe Broulik, kdeplasma-addons MR #967)

Subtly improved the appearance of overlay badges on Plasma widgets, particularly the ones in the system tray. (Noah Davis, plasma-workspace MR #6118)

Nicer-looking widget badges

In the Application Dashboard launcher widget, category highlights now span the full width of the area, making it more visually consistent. (Christoph Wolk, plasma-desktop MR #3408)

The Large Icons Task Switcher style now does a better job of showing a large number of icons by wrapping them onto multiple rows rather than scrolling horizontally. (Christoph Wolk, KDE bug #513436)

Notable Bug Fixes

Plasma 6.5.5

Fixed an issue that made some Plasma popups inappropriately stay open when they lost focus. (Aleksey Rochev, KDE bug #511187)

Plasma 6.6.0

Possibly fixed one of the most common panel-related Plasma crashes. (David Edmundson, plasma-workspace MR #6086)

Fixed an issue in Spectacle that could make some toolbars in Rectangular Region mode appear off-screen when using a multi-monitor setup where not all screens share a baseline. (Mario Roß, KDE bug #468794)

Fixed a bug that could make the "New!" badge on newly-installed apps in Kickoff overflow for apps with very long names. (Christoph Wolk, KDE bug #513272)

Fixed a weird issue that could make the Task Manager start a drag-and-drop operation when double-clicking a task right on the screen edge. (Aleksey Rochev, KDE bug #501922)

Notable in Performance & Technical

Plasma 6.6.0

Improved and fixed support for OpenBSD in multiple places. (Rafael Sadowski, KPipeWire MR #229, KInfoCenter MR #284, Solid MR #228)

How You Can Help

"This Week in Plasma" needs your help! Publishing these posts is time-consuming and needs community assistance to be sustainable. Right now there are two ways to help:

Work can be coordinated in the relevant Matrix room.

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 bugfix mentioned here

Push a commit to the relevant merge request on invent.kde.org.

03 Jan 2026 12:01am GMT

KDE developer onboarding is good now

I made substantial changes in the KDE Developer Platform documentation over the years. I am effectively its docs maintainer and have the largest number of commits in the repository. This is due in large part because I started contributing to it in 2021, applied as a KDE documentation contractor in late 2023, and started officially working with KDE development onboarding docs in 2024. I'm one of multiple furries contributing to KDE. :3

03 Jan 2026 12:00am GMT