<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet href="/html-rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Planet KDE | English</title><link>https://planet.kde.org/</link><description>Planet KDE | English</description><image><link>https://planet.kde.org/</link><title>Planet KDE</title><url>https://planet.kde.org/img/planet.png</url><height>48</height><width>48</width></image><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>2026-09-04T00:30:40+00:00</lastBuildDate><atom:link href="https://planet.kde.org/index.xml" rel="self" type="application/rss+xml"/><item><title>Bug triaging help needed</title><link>https://pointieststick.com/2026/09/03/bug-triaging-help-needed/</link><pubDate>Fri, 04 Sep 2026 00:30:40 +0000</pubDate><guid isPermaLink="true">http://pointieststick.com/?p=30266</guid><description>&lt;p class="wp-block-paragraph"&gt;For many years now, I and others have been working on getting plasmashell&amp;#8217;s open bug reports as accurate and actionable as possible.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;We&amp;#8217;ve made tremendous progress, driving down the number of unconfirmed bug reports to its lowest levels in over a decade, and mostly keeping it there:&lt;/p&gt;
&lt;figure class="wp-block-image size-full"&gt;&lt;a target="_blank" href="https://bugs.kde.org/reports.cgi?product_id=563&amp;amp;output=show_chart&amp;amp;datasets=CONFIRMED&amp;amp;datasets=ASSIGNED&amp;amp;datasets=REOPENED&amp;amp;datasets=UNCONFIRMED"&gt;&lt;img data-attachment-id="30276" data-permalink="https://pointieststick.com/2026/09/03/bug-triaging-help-needed/image-93/" data-orig-file="https://pointieststick.com/wp-content/uploads/2026/09/image.png" data-orig-size="1399,1037" data-comments-opened="1" data-image-meta="&amp;#123;&amp;quot;aperture&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;credit&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;camera&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;created_timestamp&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;copyright&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;focal_length&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;iso&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;shutter_speed&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;orientation&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://pointieststick.com/wp-content/uploads/2026/09/image.png?w=1024" src="https://pointieststick.com/wp-content/uploads/2026/09/image.png" alt="" class="wp-image-30276" /&gt;&lt;/a&gt;&lt;figcaption class="wp-element-caption"&gt;In case you&amp;#8217;re worried about the &amp;#8220;confirmed&amp;#8221; count rising, it includes almost 800 feature requests. The actual number of known and confirmed bugs is about 1,100, and is not consistently rising. Also, the big spike was from a mass move of bug reports into plasmashell to make it easier to centrally track shell bugs over time.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p class="wp-block-paragraph"&gt;Right now we&amp;#8217;re at a point where we&amp;#8217;re down to &lt;a target="_blank" href="https://bugs.kde.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;list_id=3586535&amp;amp;order=changeddate%20DESC%2Cdupecount%20DESC%2Cshort_desc%2Cproduct%2Clongdescs.count%20DESC%2Cbug_id%20DESC&amp;amp;product=plasmashell&amp;amp;query_format=advanced"&gt;about 160 unconfirmed reports&lt;/a&gt;, and we need your help to get that down as close to 0 as possible.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Why do we need your help?&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Because most of the remaining unconfirmed bugs are really hard to reproduce and confirm. They can only be understood or reproduced by someone with specialized hardware, uncommon software, specialized configurations, specific VPN setups, domain-specific knowledge, and so on. Others were reported in a state where the author doesn&amp;#8217;t know how to reproduce the issue and none of us has been able to, either.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;The addition of your valuable eyeballs and brains can help figure out what the heck is going on in these reports!&lt;/p&gt;
&lt;h2 class="wp-block-heading"&gt;How to help&lt;/h2&gt;
&lt;p class="wp-block-paragraph"&gt;Go to &lt;a target="_blank" href="https://bugs.kde.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;list_id=3586535&amp;amp;order=changeddate%20DESC%2Cdupecount%20DESC%2Cshort_desc%2Cproduct%2Clongdescs.count%20DESC%2Cbug_id%20DESC&amp;amp;product=plasmashell&amp;amp;query_format=advanced"&gt;https://bugs.kde.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;list_id=3586535&amp;amp;order=changeddate%20DESC%2Cdupecount%20DESC%2Cshort_desc%2Cproduct%2Clongdescs.count%20DESC%2Cbug_id%20DESC&amp;amp;product=plasmashell&amp;amp;query_format=advanced&lt;/a&gt;, and…&lt;/p&gt;
&lt;ul class="wp-block-list"&gt;
&lt;li&gt;Figure out the pattern for issues that are reported to happen &amp;#8220;randomly&amp;#8221; or &amp;#8220;sometimes&amp;#8221;.&lt;/li&gt;
&lt;li&gt;If you have the hardware, configuration, or specialized software necessary to try to reproduce an issue described as specific to it, try.&lt;/li&gt;
&lt;li&gt;If you&amp;#8217;re familiar with upstream software like the Qt, PipeWire, Bluez, graphics drivers or the Linux kernel, help identify bug reports whose issue is upstream of KDE.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class="wp-block-heading"&gt;What it takes&lt;/h2&gt;
&lt;ol class="wp-block-list"&gt;
&lt;li&gt;Use the latest released version of Plasma. that&amp;#8217;s 6.7.4 as of the time of writing. A distro that uses git master versions of things is even better.&lt;/li&gt;
&lt;li&gt;Use a distro that ships KDE software as &amp;#8220;vanilla&amp;#8221; as possible, with a minimum of distro-specific customizations. Either as your daily driver, or in a VM. &lt;a target="_blank" href="https://archlinux.org/"&gt;Arch Linux&lt;/a&gt; and &lt;a target="_blank" href="https://linux.kde.org/"&gt;KDE Linux&lt;/a&gt; are good options here, and &lt;a target="_blank" href="https://fedoraproject.org/kde/"&gt;Fedora KDE&lt;/a&gt; is okay too. Highly opinionated distros can still work, but are not as ideal for bug triage.&lt;/li&gt;
&lt;li&gt;Read through and understand &lt;a target="_blank" href="https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging"&gt;https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Be nice. You&amp;#8217;ll be a part of KDE&amp;#8217;s public face!&lt;/li&gt;
&lt;/ol&gt;
&lt;hr class="wp-block-separator has-alpha-channel-opacity" /&gt;
&lt;p class="wp-block-paragraph"&gt;And that&amp;#8217;s it! Bug triaging help is really appreciated here.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;I would absolutely love it if we could get the number of UNCONFIRMED plasmashell bugs down to 0, and then keep them that way by pouncing on every single new one as it comes in.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;You can help make that possible! Thanks, everyone.&lt;/p&gt;</description><author>Nate Graham</author></item><item><title>Week 12 + Week 13: Everything merged, Final GSoC blog</title><link>https://ojasmaheshwari.github.io/b/2026/week-12-week-13-everything-merged-final-gsoc-blog</link><pubDate>Thu, 03 Sep 2026 20:15:05 +0000</pubDate><guid isPermaLink="true">https://ojasmaheshwari.github.io/b/2026/week-12-week-13-everything-merged-final-gsoc-blog</guid><description>&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;My &lt;a target="_blank" href="https://summerofcode.withgoogle.com/"&gt;Google Summer of Code&lt;/a&gt; project &lt;a target="_blank" href="https://summerofcode.withgoogle.com/programs/2026/projects/kuNn3t90"&gt;Font Subsetting in Poppler&lt;/a&gt; has technically been completed with &lt;a target="_blank" href="https://gitlab.freedesktop.org/poppler/poppler/-/merge_requests/2316"&gt;this MR&lt;/a&gt; getting merged.&lt;/p&gt;
&lt;p&gt;Poppler now supports &lt;a target="_blank" href="https://fonts.google.com/knowledge/glossary/subsetting"&gt;Font Subsetting&lt;/a&gt; and a new release is going to be out soon. Although the work has been rigorously tested for regressions on a lot of PDF files, I am still quite nervous :D&lt;/p&gt;
&lt;p&gt;Here's a demo video I made for font subsetting:&lt;/p&gt;
&lt;video style="width: 80%;" controls&gt;
&lt;source src="https://ojasmaheshwari.github.io/assets/gsoc_demo.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;h2&gt;Experience&lt;/h2&gt;
&lt;p&gt;Overall, GSoC was a very enriching experience. I learnt many things I didn't know before such as PDF internals, some C++ and CMake features and sharpened my debugging skills using GDB.&lt;br&gt;
But it was also a very tough experience, there were a lot of times when I thought I was going to fail.&lt;/p&gt;
&lt;p&gt;I'll also be attending Akademy in Graz so I hope to meet and learn from a lot of contributors from there!&lt;/p&gt;
&lt;h2&gt;Gratitude&lt;/h2&gt;
&lt;p&gt;I am grateful to god for providing me with such an opportunity.&lt;/p&gt;
&lt;p&gt;I would like to thank my mentor Albert Astals Cid for mentoring me throughout GSoC.&lt;br&gt;
Huge thanks to the people from the Poppler community, Sune Vuorela, Lucas Baudin and everyone for helping me with my technical doubts in the Matrix IRC.&lt;br&gt;
Thanks to the KDE mentorship team and the board members for managing the GSoC program!&lt;/p&gt;</description><author>Ojas Maheshwari</author></item><item><title>SPDX Cryptographic Algorithm List: summer 2026 update</title><link>https://toscalix.com/2026/09/03/spdx-cryptographic-algorithm-list-summer-2026-update/</link><pubDate>Thu, 03 Sep 2026 11:34:25 +0000</pubDate><guid isPermaLink="true">http://toscalix.com/?p=3323</guid><description>This summer the SPDX Cryptography Group agreed on how to describe algorithm parameters, tightened its contribution and release processes, and opened the discussion on post-quantum cryptography. Where this report comes from This is an update of the work we do at the SPDX Cryptography Group. SPDX stands for Software Package Data Exchange. Our group is &amp;#8230; &lt;a target="_blank" href="https://toscalix.com/2026/09/03/spdx-cryptographic-algorithm-list-summer-2026-update/" class="more-link"&gt;Continue reading &lt;span class="screen-reader-text"&gt;SPDX Cryptographic Algorithm List: summer 2026&amp;#160;update&lt;/span&gt;&lt;/a&gt;</description><author>Agustín Benito Bethencourt</author></item><item><title>Wayland pain points – Dwell Clicker</title><link>https://saueseb.wordpress.com/2026/09/02/wayland-pain-points-dwell-clicker/</link><pubDate>Wed, 02 Sep 2026 15:31:36 +0000</pubDate><guid isPermaLink="true">http://saueseb.wordpress.com/?p=29</guid><description>&lt;p class="wp-block-paragraph"&gt;One &lt;a target="_blank" href="https://community.kde.org/Plasma/Wayland_Known_Significant_Issues"&gt;known significant issue&lt;/a&gt; when going from X11 to Wayland was our &lt;a target="_blank" href="https://apps.kde.org/kmousetool/"&gt;KMouseTool&lt;/a&gt; being X11 only.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;KMouseTool implements a Dwell Clicker that is an assistive technology designed for individuals who find traditional mouse clicking difficult, painful, or impossible due to conditions like paralysis, mobility issues, or repetitive strain injury (RSI). It allows users to perform left-clicks, right-clicks, double-clicks, and dragging entirely without pressing physical buttons by simply pausing the cursor on the screen for a specified duration.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;In KDE Plasma 6.8 we will ship the &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/commit/756b6c271d47be93330da3a2683b84c0481de438"&gt;just&lt;/a&gt; &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/commit/c1016ae008f24c89fac97cf5bd7f3ce889233fa1"&gt;merged&lt;/a&gt; brand new Dwell Clicker implementation that works also on Wayland.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Here is how it looks in action:&lt;/p&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img width="1024" height="675" src="https://saueseb.wordpress.com/wp-content/uploads/2026/09/output.gif?w=1024" alt="" class="wp-image-31" srcset="https://saueseb.wordpress.com/wp-content/uploads/2026/09/output.gif?w=1024&amp;amp;allow_lossy=1 1024w, https://saueseb.wordpress.com/wp-content/uploads/2026/09/output.gif?w=150&amp;amp;allow_lossy=1 150w, https://saueseb.wordpress.com/wp-content/uploads/2026/09/output.gif?w=300&amp;amp;allow_lossy=1 300w, https://saueseb.wordpress.com/wp-content/uploads/2026/09/output.gif?w=768&amp;amp;allow_lossy=1 768w, https://saueseb.wordpress.com/wp-content/uploads/2026/09/output.gif?allow_lossy=1 1246w" sizes="(max-width: 1024px) 100vw, 1024px" /&gt;&lt;/figure&gt;
&lt;p class="wp-block-paragraph"&gt;Have feedback or questions? Head over to the &lt;a target="_blank" href="https://discuss.kde.org/latest"&gt;KDE Discuss forum&lt;/a&gt; to share your thoughts with the team.&lt;/p&gt;</description><author>Sebastian Sauer</author></item><item><title>Qt AI Assistant Retires As We Invest in Agentic Development Tools</title><link>https://www.qt.io/blog/qt-ai-assistant-retires-as-we-invest-in-agentic-development-tools</link><pubDate>Tue, 01 Sep 2026 06:55:00 +0000</pubDate><guid isPermaLink="true">https://www.qt.io/blog/qt-ai-assistant-retires-as-we-invest-in-agentic-development-tools</guid><description>&lt;h2&gt;The Way Developers Use AI Has Changed&lt;/h2&gt;
&lt;p&gt;When Qt AI Assistant was introduced, the state of the art in AI-powered software development was the single-turn prompt: select a block of code, ask for a test case, an explanation, or some boilerplate QML, and review the result.&lt;/p&gt;
&lt;img src="https://track-eu1.hubspot.com/__ptq.gif?a=149513&amp;amp;k=14&amp;amp;r=https%3A%2F%2Fwww.qt.io%2Fblog%2Fqt-ai-assistant-retires-as-we-invest-in-agentic-development-tools&amp;amp;bu=https%253A%252F%252Fwww.qt.io%252Fblog&amp;amp;bvt=rss" alt="" width="1" height="1" style="min-height:1px!important;width:1px!important;border-width:0!important;margin-top:0!important;margin-bottom:0!important;margin-right:0!important;margin-left:0!important;padding-top:0!important;padding-bottom:0!important;padding-right:0!important;padding-left:0!important; "&gt;</description><author>Qt Dev Loop</author></item><item><title>This Month in KDE Linux: August 2026</title><link>https://blogs.kde.org/2026/08/31/this-month-in-kde-linux-august-2026/</link><pubDate>Mon, 31 Aug 2026 21:15:01 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/31/this-month-in-kde-linux-august-2026/</guid><description>&lt;!-- Example wording for a change, MR version. (Developer Name, [repo-name MR #xxx](https://invent.kde.org/plasma/repo-name/-/merge_requests/xxx)) --&gt;
&lt;!-- Example wording for a change, Bugzilla version. (Developer Name, [KDE Bugzilla #xxx](https://bugs.kde.org/show_bug.cgi?id=xxx)) --&gt;
&lt;!-- ![](thumbnail.png) --&gt;
&lt;!--
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
--&gt;
&lt;!--
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="%25!s%28%3cnil%3e%29something.mp4" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
--&gt;
&lt;p&gt;Welcome to this edition of &lt;em&gt;This Month in KDE Linux&lt;/em&gt;, dedicated to &lt;a target="_blank" href="https://linux.kde.org/"&gt;KDE’s next-generation operating system&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here’s how KDE Linux evolved in August:&lt;/p&gt;
&lt;h2 id="data-safety"&gt;Data safety&lt;/h2&gt;
&lt;p&gt;A major data safety project reached a state of usability!&lt;/p&gt;
&lt;p&gt;First, Hadi Chokr transformed users’ home folders into &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/475"&gt;Btrfs sub-volumes&lt;/a&gt; and turned on &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/613"&gt;automatic Btrfs snapshots&lt;/a&gt; for all user files.&lt;/p&gt;
&lt;p&gt;Then, Bharadwaj Raju integrated the new &lt;a target="_blank" href="https://invent.kde.org/system/kio-snapshot"&gt;kio-snapshot&lt;/a&gt; system &lt;a target="_blank" href="https://bharadwajraju.com/posts/btrfs-snapshots-in-kde/"&gt;he’s been working on&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/merge_requests/1347"&gt;added support in Dolphin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now you can easily view and roll back to older versions of your files, even without an off-device backup:&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Three snapshots of a file named “Family trip ideas.md” from different points in time" src="https://blogs.kde.org/2026/08/31/this-month-in-kde-linux-august-2026/snapshots.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;p&gt;This doesn’t replace a backup, of course! But it does amount to a sort of homedir-level undo feature that can keep your data safe from accidental deletions, or other destructive changes that are less catastrophic than a disk failure or having the device lost or stolen. And these snapshots will be useful to use as backup sources, so you’re not trying to back up a moving target.&lt;/p&gt;
&lt;p&gt;Another few layers in the data safety onion, shall we say!&lt;/p&gt;
&lt;h2 id="cjkv-input-support-by-default"&gt;CJKV input support by default&lt;/h2&gt;
&lt;p&gt;Nate Graham finished the project to &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/329"&gt;make Chinese, Japanese, Korean, and Vietnamese text input work out of the box&lt;/a&gt;. Now everything needed to type in these languages is pre-installed, and all you have to do is &lt;a target="_blank" href="https://linux.kde.org/docs/cjkv-input/"&gt;turn it on&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="qa--testing"&gt;QA &amp;amp; testing&lt;/h2&gt;
&lt;p&gt;Thomas Duckworth and Bhushan Shah continued to develop, refine, and maintain &lt;a target="_blank" href="https://blogs.kde.org/2026/07/13/openqa-testing-in-kde-linux/"&gt;KDE Linux’s automatic QA system&lt;/a&gt;, which continued to pay dividends this month. The system caught multiple complex integration issues introduced accidentally in commits made to KDE software — all of which are now fixed, so users of other operating systems will never have to experience them.&lt;/p&gt;
&lt;h2 id="security"&gt;Security&lt;/h2&gt;
&lt;p&gt;Yago Raña Gayoso &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/602"&gt;removed an unnecessary override&lt;/a&gt; that gave everyone in the &lt;code&gt;wheel&lt;/code&gt; group default access to the Docker daemon’s socket.&lt;/p&gt;
&lt;p&gt;Nate Graham &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/606"&gt;fixed an oversight&lt;/a&gt; that let blacklisted kernel modules into the unified kernel images.&lt;/p&gt;
&lt;h2 id="bugs-fixed"&gt;Bugs fixed&lt;/h2&gt;
&lt;p&gt;Harald Sitter &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/304#note_1568184"&gt;fixed an issue that could make updates fail&lt;/a&gt; right after the update was published, or when run on machines with weak CPUs or slow network connections.&lt;/p&gt;
&lt;p&gt;Hadi Chokr &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/761"&gt;fixed an issue with user-visible version numbers&lt;/a&gt; of KDE Linux builds not including the intended level of precision.&lt;/p&gt;
&lt;h2 id="documentation"&gt;Documentation&lt;/h2&gt;
&lt;p&gt;Nate Graham &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/626"&gt;added quick links to KDE Linux’s official documentation&lt;/a&gt; right there in the launcher menu’s “Help” section.&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Kickoff widget’s “Help” category showing entries for “Documentation” and “Help &amp;amp; Support”" src="https://blogs.kde.org/2026/08/31/this-month-in-kde-linux-august-2026/links_to_help_and_docs.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;p&gt;Nate Graham also documented &lt;a target="_blank" href="https://linux.kde.org/docs/free-space/"&gt;how to free up disk space&lt;/a&gt;, added a dedicated “&lt;a target="_blank" href="https://linux.kde.org/help/"&gt;Help &amp;amp; Support&lt;/a&gt;” page to the website, and added a link to the &lt;a target="_blank" href="https://blogs.kde.org/categories/kde-linux/"&gt;project’s news feed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Philip Grant refined and documented a way to &lt;a target="_blank" href="https://linux.kde.org/docs/password-managers/#keepassxc"&gt;integrate KeePassXC with the Flatpak packaging of Firefox and Chromium&lt;/a&gt; (and their derivative browsers).&lt;/p&gt;
&lt;p&gt;Julius Künzel &lt;a target="_blank" href="https://invent.kde.org/websites/hugo-kde/-/commit/e76b739ad7bf535d140bc8be98d6bdb9a21e64b1"&gt;fixed the styling of the standard Hugo alert bubbles&lt;/a&gt;, and Nate Graham &lt;a target="_blank" href="https://invent.kde.org/websites/linux-kde-org/-/commit/9f72ba476f60eaeb750d66a4944534b8714ac649"&gt;ported the docs to use them&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="grab-bag"&gt;Grab bag&lt;/h2&gt;
&lt;p&gt;Paul Brown added a neat feature to the &lt;code&gt;set-up-systemd-extension&lt;/code&gt; tool that lets you &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/593"&gt;create new extensions at different locations and with different names&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hadi made the installer &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/710"&gt;report its progress in a more granular way&lt;/a&gt;, so there’s less waiting around and wondering if the installation process got stuck.&lt;/p&gt;
&lt;p&gt;Bhushan Shah &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/611"&gt;removed the “UEFI shell” entry from the bootloader menu&lt;/a&gt;, since it was useless for practically everyone, and now the menu is less cluttered.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-you-can-help"&gt;How you can help&lt;/h2&gt;
&lt;p&gt;KDE Linux is making steady progress towards its &lt;a target="_blank" href="https://invent.kde.org/groups/kde-linux/-/milestones/2#tab-issues"&gt;Beta milestone&lt;/a&gt;, and is now 85% of the way there.&lt;/p&gt;
&lt;p&gt;There’s lots to do! If you’re a fan of the project, please help out; there are many ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User support:&lt;/strong&gt; &lt;a target="_blank" href="https://discuss.kde.org/tag/kde-linux/450"&gt;help support people on discuss.kde.org using KDE Linux&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issue reporting:&lt;/strong&gt; &lt;a target="_blank" href="https://linux.kde.org/docs/install"&gt;install KDE Linux&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/issues"&gt;report issues&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; improve &lt;a target="_blank" href="https://linux.kde.org/docs"&gt;the docs&lt;/a&gt; by submitting &lt;a target="_blank" href="https://invent.kde.org/websites/linux-kde-org/-/merge_requests/"&gt;merge requests&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flatpak:&lt;/strong&gt; fix &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/issues/71"&gt;packaging or code issues in Flatpak-packaged apps&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OS development:&lt;/strong&gt; help &lt;a target="_blank" href="https://linux.kde.org/docs/kde-linux-dev"&gt;build KDE Linux&lt;/a&gt;! There’s &lt;a target="_blank" href="https://invent.kde.org/kde-linux/kde-linux/-/work_items/?sort=created_date&amp;amp;state=opened&amp;amp;milestone_title=Beta&amp;amp;first_page_size=100"&gt;plenty to do&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><author>Nate Graham</author></item><item><title>Kdenlive 26.08.0 released</title><link>https://kdenlive.org/news/releases/26.08.0/</link><pubDate>Mon, 31 Aug 2026 18:05:00 +0000</pubDate><guid isPermaLink="true">https://kdenlive.org/news/releases/26.08.0/</guid><description>&lt;p&gt;We are happy to announce the summer release of Kdenlive 26.08. Continuing the efforts from the last version, the core team has been focusing mostly on stability - fixing bugs and crashes while also doing lot's under the hood improvements.&lt;/p&gt;
&lt;p&gt;This release comes with 11 crash fixes as well as improvements to the undo/redo stack for compositions and sequence creation. Work has also been done to modernize the codebase in the Qml loader for Clips and Compositions.&lt;/p&gt;
&lt;p&gt;The majority of the new, nifty and shiny additions and enhancements in this release were made by new contributors! This seems to have become a tradition in 2026, and we couldn’t be happier about it.&lt;/p&gt;
&lt;h2 id="highlights"&gt;Highlights&lt;/h2&gt;
&lt;h3 id="timeline"&gt;Timeline&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Automatic Track Creation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added functionality to automatically create audio tracks when adding a clip to the timeline in case there are not enough. Implemented by &lt;em&gt;Vineet Tiwari&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.8 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/add-tracks.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Reorder Tracks&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added a long awaited ability to reorder tracks. Implemented by &lt;em&gt;Vineet Tiwari&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.3 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/move-tracks.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Markers At Gaps&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added option to add markers at gaps between timeline clips. Implemented by &lt;em&gt;Yash Bavadiya&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.3 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/marker-gaps.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Playhead Snapping When Dragging&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ALT + drag the time cursor (playhead) in the timeline ruler, it now snaps to nearby snap points like clip edges, guides, markers, and zone in/out. Implemented by &lt;em&gt;Yash Bavadiya&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.3 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/playhead-snapping.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Copy Selection To New Sequence&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It works similarly to &amp;quot;Create sequence from selection&amp;quot; except that it does not remove the clips from the original sequence and replace them with the new sequence clip. Implemented by &lt;em&gt;Vineet Tiwari&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.4 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/copy-sel-seq.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Clip Color Configuration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added an option to configure colors for video, audio, title, image, and slideshow clip types.&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Color Clip Configuration" src="https://kdenlive.org/news/releases/26.08.0/conf-colors.png"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Playhead/Mouse Zoom&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added a button in the Status Bar to toggle between zooming to the mouse cursor position or the playhead position. Implemented by &lt;em&gt;the mrfantastic&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.3 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/timeline-zoom.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Multi-Clip Speed Changes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added the ability to change the playback speed of multiple clips at once either by directly &lt;em&gt;Ctrl + dragging&lt;/em&gt; in the timeline or by using the &lt;em&gt;Clip Speed&lt;/em&gt; tool. Implemented by &lt;em&gt;Vineet Tiwari&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.3 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/speed-adjust.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;h3 id="title-editor"&gt;Title Editor&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Snapping&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added snapping in the Title Editor. Implemented by &lt;em&gt;chocolateimage&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.5 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/te-snapping.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Rounded Corners&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rectangles now can have rounded corners. Also notice the draggable spinbox ability to change the radius. Implemented by &lt;em&gt;chocolateimage&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.5 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/te-rounded-corners.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Copy/Paste&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added the ability to copy and paste elements in the Titler. Implemented by &lt;em&gt;chocolateimage&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.5 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/te-copy-paste.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Automatic Clip Replacement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added option to automatically replace a title clip in the timeline with the new title clip being edited. Implemented by &lt;em&gt;Eduardo Guedes&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.6 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/te-replace-clip.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;h3 id="miscellaneous"&gt;Miscellaneous&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Additive Soloing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added the ability to do additive soloing in the audio mixer by shift clicking. Implemented by &lt;em&gt;Patrick Williamson&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.33 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/additive-solo.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Adjustable Rotation Anchor&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added the ability to set the rotation anchor in the Transform effect. Implemented by &lt;em&gt;Jean Baptiste Mardelle&lt;/em&gt;.&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style="--bs-aspect-ratio: calc(0.6 * 100%);"&gt;
&lt;video muted loop autoplay style="pointer-events: none;"&gt;&lt;source src="https://kdenlive.org/news/releases/26.08.0/rotation-anchor.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Other Noteworthy Changes&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Updated effects with text (GPS Text, Dynamic Text, Timer) to allow for more font properties. Implemented by &lt;em&gt;Bernd Jordan&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Rectangular alpha mask is now animatable. Implemented by &lt;em&gt;Jean Baptiste Mardelle&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Added ability to use math expressions in effects values. Implemented by &lt;em&gt;Jean Baptiste Mardelle&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Drawbox and Delogo effects use the newly implemented feature to draw a rectangle directly on monitor. Implemented by &lt;em&gt;Jean Baptiste Mardelle&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Added the frei0r Color Enhance effect. Implemented by &lt;em&gt;Bernd Jordan&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Added option to add rendered video to project bin in the Render Widget. Implemented by &lt;em&gt;Jaimukund Bhan&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Multi-cam Editing: Added functionality to insert clips to timeline using the clip's timecode from their metadata (if they contain it). Implemented by &lt;em&gt;Jaimukund Bhan&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Ability to open video, audio, image files from file managers or CLI environments with Kdenlive. Implemented by &lt;em&gt;Yash Bavadiya&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Added webp support for image sequences. Implemented by &lt;em&gt;Farid Abdelnour&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="give-back-to-kdenlive"&gt;Give back to Kdenlive&lt;/h2&gt;
&lt;p&gt;Releases are possible thanks to donations by the community. &lt;a target="_blank" href="https://kdenlive.org/fund/"&gt;Donate now!&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="need-help-"&gt;Need help ?&lt;/h2&gt;
&lt;p&gt;As usual, you will find very useful tips in our &lt;a target="_blank" href="https://docs.kdenlive.org/"&gt;documentation&lt;/a&gt; website. You can also get help and exchange your ideas in our &lt;a target="_blank" href="https://matrix.to/#/%23kdenlive:kde.org"&gt;Kdenlive users Matrix chat room&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="get-involved"&gt;Get involved&lt;/h2&gt;
&lt;p&gt;Kdenlive relies on its community, your help is always welcome. You can contribute by :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Helping to identify and &lt;a target="_blank" href="https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging"&gt;triage bugs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Contribute to &lt;a target="_blank" href="https://community.kde.org/Get_Involved/translation"&gt;translating&lt;/a&gt; Kdenlive in your language&lt;/li&gt;
&lt;li&gt;Promote Kdenlive in your local community&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the full changelog &lt;a target="_blank" href="https://kdenlive.org/news/releases/26.08.0/#full-changelog"&gt;continue reading on kdenlive.org&lt;/a&gt;.&lt;/p&gt;</description><author>Kdenlive</author></item><item><title>Qt Extension 1.16.0 for VS Code Released</title><link>https://www.qt.io/blog/qt-extension-1.16.0-for-vs-code-released</link><pubDate>Mon, 31 Aug 2026 14:24:29 +0000</pubDate><guid isPermaLink="true">https://www.qt.io/blog/qt-extension-1.16.0-for-vs-code-released</guid><description>&lt;div class="hs-featured-image-wrapper"&gt;
&lt;a target="_blank" href="https://www.qt.io/blog/qt-extension-1.16.0-for-vs-code-released?hsLang=en" title="" class="hs-featured-image-link"&gt; &lt;img src="https://www.qt.io/hubfs/image-png-Aug-27-2026-03-54-41-9066-PM.png" alt="Qt Extension 1.16.0 for VS Code Released" class="hs-featured-image" style="width:auto !important; max-width:50%; float:left; margin:0 15px 15px 0;"&gt; &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;We're excited to announce the release of version 1.16.0 of the Qt Extension for Visual Studio Code! This release brings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;QML Profiler and Trace Viewer&lt;/strong&gt; to profile your QML applications directly from VS Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A new Welcome page&lt;/strong&gt; with browsers for Qt examples and Qt Academy courses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better PySide support&lt;/strong&gt; with QML Live Preview and uv virtual environments&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="https://track-eu1.hubspot.com/__ptq.gif?a=149513&amp;amp;k=14&amp;amp;r=https%3A%2F%2Fwww.qt.io%2Fblog%2Fqt-extension-1.16.0-for-vs-code-released&amp;amp;bu=https%253A%252F%252Fwww.qt.io%252Fblog&amp;amp;bvt=rss" alt="" width="1" height="1" style="min-height:1px!important;width:1px!important;border-width:0!important;margin-top:0!important;margin-bottom:0!important;margin-right:0!important;margin-left:0!important;padding-top:0!important;padding-bottom:0!important;padding-right:0!important;padding-left:0!important; "&gt;</description><author>Qt Dev Loop</author></item><item><title>Harmonicon: a rhythm game you play on a real harmonica</title><link>https://tcanabrava.github.io/introducing-harmonicon/</link><pubDate>Mon, 31 Aug 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://tcanabrava.github.io/introducing-harmonicon/</guid><description>&lt;p&gt;For once, something on this blog that isn’t C++.&lt;/p&gt;
&lt;p&gt;Harmonicon is a rhythm game for blues harmonica. Notes scroll toward a hit line
and you play on an actual harmonica, into your microphone, and the game listens.&lt;/p&gt;
&lt;h2 id="the-idea"&gt;The idea&lt;/h2&gt;
&lt;p&gt;The harmonica is cheap, fits in a pocket, and it hides everything:
the reeds are inside, your tongue and throat do most of the work,
and nothing about the instrument tells you whether the note that just
came out is the note you meant. You can practise a bend wrong for a
month quite happily.&lt;/p&gt;
&lt;p&gt;Let the instrument be the input. Harmonicon captures the microphone, runs pitch
detection on it in real time, and scores what you actually played against the chart.
Every note you score is a note you genuinely hit.&lt;/p&gt;
&lt;h2 id="playing-a-song"&gt;Playing a song&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://tcanabrava.github.io/introducing-harmonicon/play-2d.png" alt="The 2D play mode: a lane per harmonica hole, with notation and a tab readout above" /&gt;&lt;/p&gt;
&lt;p&gt;The default view is one lane per hole: ten for a diatonic, twelve for a
chromatic, taken from whatever the chart was written for. Blue notes are blows,
orange are draws, and the number on each is the hole you need. Above the lanes
there’s the phrase in standard notation and as harmonica tab, because those are
the two ways harmonica players actually read music, and the panel on the right
tells you which harp to pick up and which position you’re playing in.&lt;/p&gt;
&lt;p&gt;There’s also a 3D view, which is the same game rendered around a harmonica model
that moves with the beat.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://tcanabrava.github.io/introducing-harmonicon/play-3d.png" alt="The 3D play mode: notes travelling down toward an animated harmonica model" /&gt;&lt;/p&gt;
&lt;span id="continue-reading"&gt;&lt;/span&gt;&lt;h2 id="getting-away-from-charts"&gt;Getting away from charts&lt;/h2&gt;
&lt;p&gt;Charts are good for learning a song and bad for learning to play. The Jam
Session mode drops the scoring entirely and gives you a rolling 12-bar blues to
improvise over.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://tcanabrava.github.io/introducing-harmonicon/jam-session.png" alt="Jam Session: a 12-bar chord grid on the left, a live-tinted hole map on the right" /&gt;&lt;/p&gt;
&lt;p&gt;The useful part is the hole map on the right. As the backing moves through the
bars, each hole recolours: gold if it’s a chord tone of the bar sounding right
now, green if it’s elsewhere in the blues scale, dim if it’s going to sound
wrong. You follow the colour instead of trying to recall theory at tempo, and
the theory arrives later, on its own.&lt;/p&gt;
&lt;h2 id="lessons"&gt;Lessons&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://tcanabrava.github.io/introducing-harmonicon/lessons-list.png" alt="The lessons list, grouped into units from fundamentals to jazz" /&gt;&lt;/p&gt;
&lt;p&gt;There’s a curriculum underneath all of this, grouped into units and gated by
prerequisites — from getting one clean single note out of the thing, through
bends and articulation, up to improvising over a blues. Some lessons are scored
drills. A few aren’t scoreable at all: tongue blocking sounds identical to
puckering from the microphone’s point of view, so that one is instruction you
mark as done and the game trusts you.&lt;/p&gt;
&lt;h2 id="under-the-hood"&gt;Under the hood&lt;/h2&gt;
&lt;p&gt;Rust, with &lt;a rel="external" target="_blank" href="https://bevyengine.org/"&gt;Bevy&lt;/a&gt; for the engine and &lt;code&gt;cpal&lt;/code&gt; for audio
capture. The interesting problem is the pitch detection, which is why there are
five algorithms to chose from: FFT, YIN, pYIN, MPM and NMF.&lt;/p&gt;
&lt;h2 id="status"&gt;Status&lt;/h2&gt;
&lt;p&gt;There’s a lot in it — a bending
trainer, an in-game song editor with MIDI import, adaptive difficulty, A–B
looping, latency calibration, a spectrogram — but “early/experimental” is an
honest label rather than modesty.&lt;/p&gt;
&lt;p&gt;It’s MIT licensed and the code is at
&lt;a rel="external" target="_blank" href="https://github.com/tcanabrava/harmonicon"&gt;github.com/tcanabrava/harmonicon&lt;/a&gt;.
If you own a harmonica and a microphone, that’s the entire hardware requirement.&lt;/p&gt;</description><author>Tomaz Canabrava</author></item><item><title>KDE Connect redesign is ready for testing</title><link>https://tintotint.eu/programming/kde-connect2/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://tintotint.eu/programming/kde-connect2/</guid><description>And I think it&amp;rsquo;s pretty nice</description><author>tintotint</author></item><item><title>This Week in Plasma: QtWidgets Apps Join the Union</title><link>https://blogs.kde.org/2026/08/28/this-week-in-plasma-qtwidgets-apps-join-the-union/</link><pubDate>Fri, 28 Aug 2026 21:14:01 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/28/this-week-in-plasma-qtwidgets-apps-join-the-union/</guid><description>&lt;!-- Example wording for a change, MR version. (Developer Name, [repo-name MR #xxx](https://invent.kde.org/plasma/repo-name/-/merge_requests/xxx)) --&gt;
&lt;!-- Example wording for a change, Bugzilla version. (Developer Name, [KDE Bugzilla #xxx](https://bugs.kde.org/show_bug.cgi?id=xxx)) --&gt;
&lt;!-- ![](thumbnail.png) --&gt;
&lt;!--
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
--&gt;
&lt;!--
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="%25!s%28%3cnil%3e%29something.mp4" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
--&gt;
&lt;p&gt;Welcome to a new issue of &lt;em&gt;This Week in Plasma!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This week saw the first stirrings of support for QtWidgets-based apps in KDE’s new Union theming system, which is a very exciting milestone.&lt;/p&gt;
&lt;p&gt;But that’s not all! This week is also packed with UI improvements, performance improvements, bug fixes, and a few more features, too.&lt;/p&gt;
&lt;p&gt;Plasma 6.8 is rapidly shaping up, and all this work reflects it. Check it out:&lt;/p&gt;
&lt;h2 id="notable-new-features"&gt;Notable new features&lt;/h2&gt;
&lt;!-- Can find some with https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Feature&amp;first_page_size=20 --&gt;
&lt;h3 id="plasma-68"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;The new Union theming system has gained initial support for styling QtWidgets apps! (Akseli Lahtinen, &lt;a target="_blank" href="https://invent.kde.org/plasma/union/-/merge_requests/270"&gt;union MR #270&lt;/a&gt;)&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Dolphin file manager styled with Union" src="https://blogs.kde.org/2026/08/28/this-week-in-plasma-qtwidgets-apps-join-the-union/dolphin-unionized.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;center&gt;I’m sure you can see numerous visual glitches in the screenshot above. This is a first draft with many known visual bugs, and we’ll work on getting those smashed as quickly as possible. But still, very exciting! The Union theming system is coming together nicely. Read more about it &lt;a target="_blank" href="https://akselmo.dev/posts/union-qtwidgets"&gt;on Akseli’s blog&lt;/a&gt;.&lt;/center&gt;
&lt;br/&gt;
&lt;p&gt;Plasma’s built-in RDP server now supports adjusting its quality level to the network’s available bandwidth to keep the frame rate as consistent as possible. (Nick Haghiri, &lt;a target="_blank" href="https://invent.kde.org/plasma/krdp/-/merge_requests/238"&gt;krdp MR #238&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Plasma’s Strongswan VPN support now allows the use of EAP-TTLS authentication. (Wyllian Bezerra da Silva, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-nm/-/merge_requests/636"&gt;plasma-nm MR #636&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="notable-ui-improvements"&gt;Notable UI improvements&lt;/h2&gt;
&lt;!-- Can find some with https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Enhancement&amp;first_page_size=20 --&gt;
&lt;h3 id="plasma-675"&gt;Plasma 6.7.5&lt;/h3&gt;
&lt;p&gt;Discover now only offers to open and install &lt;code&gt;.deb&lt;/code&gt; packages on operating systems natively supporting that package format. (Aleix Pol Gonzalez, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3957"&gt;plasma-desktop MR #3957&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-68-1"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;When you copy a password or other piece of text that the app says is a secret, the clipboard history UI now makes this clear rather than hiding it and letting you wonder why nothing appeared there. (Tobias Fella, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=508326"&gt;KDE Bugzilla #508326&lt;/a&gt;)&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Warning about sensitive data on the clipboard" src="https://blogs.kde.org/2026/08/28/this-week-in-plasma-qtwidgets-apps-join-the-union/sensitive-data.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;p&gt;The indicator that a screen recording is in progress now only appears if it actually is in progress, which handles the case of apps that open screen recording sessions early, but start the recording later. (David Redondo, &lt;a target="_blank" href="https://invent.kde.org/plasma/xdg-desktop-portal-kde/-/merge_requests/597"&gt;xdg-desktop-portal-kde MR #597&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;KWin’s Overview effect is now a little bit easier to open with a four-finger swipe touchpad gesture. (Remy Farley, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9486"&gt;kwin MR #9486&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;All of the text for calendar events in the Digital Clock widget is now selectable. (Nate Graham, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=433668"&gt;KDE Bugzilla #433668&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;System Settings’ Drawing Tablet page now has a less awkward design for the dialog window to choose what the buttons on your tablet’s pen do. (Joshua Goins, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524720"&gt;KDE Bugzilla #524720&lt;/a&gt;)&lt;/p&gt;
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;div class="swiper-slide swiper-slide-active"&gt;
&lt;img src="https://blogs.kde.org/2026/08/28/this-week-in-plasma-qtwidgets-apps-join-the-union/pen-button-dialog-new.webp" alt="New" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;New&lt;/span&gt;
&lt;/div&gt;
&lt;div class="swiper-slide"&gt;
&lt;img src="https://blogs.kde.org/2026/08/28/this-week-in-plasma-qtwidgets-apps-join-the-union/pen-button-dialog-old.webp" alt="Old" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;Old&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;p&gt;The Bluetooth widget now shows its “Configure” button in the same place that all other widgets do, for better functional consistency. (Tomáš Hnyk, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=516134"&gt;KDE Bugzilla #516134&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Connecting to an enterprise Wi-Fi network for the first time now takes you immediately to the place where you can enter your credentials, instead of making you navigate there manually. (Ramil Nurmanov, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-nm/-/merge_requests/635"&gt;plasma-nm MR #635&lt;/a&gt;)&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="https://blogs.kde.org/2026/08/28/this-week-in-plasma-qtwidgets-apps-join-the-union/enterprise-wifi-credentials.mp4" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;p&gt;Clicking a System Tray icon that opens a widget can no longer make that icon immediately disappear; now, it will always stay visible until the widget’s popup closes, giving you the opportunity to click on it a second time to close the popup. (समीर सिंह Sameer Singh, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=521115"&gt;KDE Bugzilla #521115&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Using the clipboard’s “Keep the selection and clipboard the same” setting no longer unnecessarily disables other settings. (Tomáš Hnyk, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=492840"&gt;KDE Bugzilla #492840&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;If your system is in such a poor state that there are many crashes, your System Tray no longer fills up with dozens of little sad face icons; now only one appears, and clicking on it will show the full list in its own window. (Tobias Fella, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=420443"&gt;KDE Bugzilla #420443&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="frameworks-630"&gt;Frameworks 6.30&lt;/h3&gt;
&lt;p&gt;In-window dialogs in Kirigami-based apps are now better highlighted against the rest of the window content when using a dark theme. (Marco Martin, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=447965"&gt;KDE Bugzilla #447965&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;System Monitor graphs now request “tabular numerals” for the legends when using a font that supports them, improving alignment. (Christoph Wolk, &lt;a target="_blank" href="https://invent.kde.org/frameworks/kquickcharts/-/merge_requests/109"&gt;kquickcharts MR #109&lt;/a&gt;)&lt;/p&gt;
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;div class="swiper-slide swiper-slide-active"&gt;
&lt;img src="https://blogs.kde.org/2026/08/28/this-week-in-plasma-qtwidgets-apps-join-the-union/tabular-numerals-new.png" alt="New" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;New&lt;/span&gt;
&lt;/div&gt;
&lt;div class="swiper-slide"&gt;
&lt;img src="https://blogs.kde.org/2026/08/28/this-week-in-plasma-qtwidgets-apps-join-the-union/tabular-numerals-old.png" alt="Old" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;Old&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;h2 id="notable-bug-fixes"&gt;Notable bug fixes&lt;/h2&gt;
&lt;!--
Can find some with:
- HI and VHI bugs fixed: https://tinyurl.com/bdepnh4v
- All bugs fixed: https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Bugfix&amp;first_page_size=20
--&gt;
&lt;h3 id="plasma-667"&gt;Plasma 6.6.7&lt;/h3&gt;
&lt;p&gt;Fixed a security issue that made the screen locker fail to lock if you manually configured it to turn off the screen after the “don’t require password to unlock” period. (Xaver Hugl, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523504"&gt;KDE Bugzilla #523504&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-675-1"&gt;Plasma 6.7.5&lt;/h3&gt;
&lt;p&gt;Fixed a pretty bad bug that made Discover get stuck while checking for updates when its Snap backend was present, but there were no upgradeable Snap apps. (Dustin Trumps, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524077"&gt;KDE Bugzilla #524077&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed a case where non-KDE apps running in Plasma could sometimes crash when you closed a dialog. (Balló György, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523039"&gt;KDE Bugzilla #523039&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed a recent regression that impaired pointer movement in VMs using non-accelerated graphics drivers. (Base Devel, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524280"&gt;KDE Bugzilla #524280&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Using a right-to-left language like Arabic or Hebrew no longer prevents force-quitting processes or apps in System Monitor. (Jakob Petsovits, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=522233"&gt;KDE Bugzilla #522233&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed a weird little bug that made the panel’s tooltip in edit mode become malformed after right-clicking on the panel. (Christoph Wolk, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=488578"&gt;KDE Bugzilla #488578&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;If your system is in a super-duper messed-up state, it can at least no longer cause the DrKonqi crash handler to crash in a loop, feeding itself with crashes that exhaust the system’s memory. (Harald Sitter and Alexander Berg, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524048"&gt;KDE Bugzilla #524048&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-68-2"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;Fixed the second-most-common crash in Plasma, which could happen while logging out. (Tobias Fella, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6973"&gt;plasma-workspace MR #6973&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;On System Settings’ Plasma Search page, the “Defaults” button and non-default settings highlighting now work as expected. (Tobias Ozór, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3973"&gt;plasma-desktop MR #3973&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;With multiple Application Launcher (Kickoff) Widgets, all of them are now capable of returning search results for not-yet-installed apps, not just the first one. (Christoph Wolk, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=511220"&gt;KDE Bugzilla #511220&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;A logout sound no longer delays the logout process more than it needs to. (Ramil Nurmanov, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=491745"&gt;KDE Bugzilla #491745&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="notable-in-performance--technical"&gt;Notable in performance &amp;amp; technical&lt;/h2&gt;
&lt;h3 id="plasma-675-2"&gt;Plasma 6.7.5&lt;/h3&gt;
&lt;p&gt;Improved the way HDR content looks when using an ICC profile. (Xaver Hugl, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524038"&gt;KDE Bugzilla #524038&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-68-3"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;Improved the performance and power efficiency of many kinds of full-screen content when using an Intel or NVIDIA GPU with HDR, ICC profiles, and/or the Night Light effect. (Naveen Kumar, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9640"&gt;kwin MR #9640&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;KWin now supports HDR content using the HLG transfer function. (Xaver Hugl, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=508817"&gt;KDE Bugzilla #508817&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Reduced screen-casting latency throughout Plasma and KWin (including for the built-in RDP server!) by one frame. (David Edmundson, &lt;a target="_blank" href="https://invent.kde.org/plasma/kpipewire/-/merge_requests/274"&gt;kpipewire MR #274&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Reduced the resource usage required to show thumbnails in notifications and the Activities sidebar. (Kai Uwe Broulik, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6966"&gt;plasma-workspace MR #6966&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3967"&gt;plasma-desktop MR #3967&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Reduced the resource usage required for the Trash widget. (Kai Uwe Broulik, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3965"&gt;plasma-desktop MR #3965&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Screenshots made with Spectacle that don’t have any transparency no longer include an alpha channel, slightly reducing file sizes. (Kai Uwe Broulik, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9798"&gt;kwin MR #9798&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Disabling a System Tray widget now frees up its memory immediately, rather than only after Plasma or the system is restarted. (Tomáš Hnyk, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6983"&gt;plasma-workspace MR #6983&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;showConfigurationInterface()&lt;/code&gt; function now works in Plasma scripting. (Remilia S., &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6977"&gt;plasma-workspace MR #6977&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;If you’ve broken, misconfigured, or removed all of Plasma’s wallpaper plugins, Plasma will now launch without them and just show a plain background, instead of failing to launch at all. (Ramil Nurmanov, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524875"&gt;KDE Bugzilla #524875&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="frameworks-630-1"&gt;Frameworks 6.30&lt;/h3&gt;
&lt;p&gt;KWallet no longer spams your log with errors in certain non-default configurations. (Nicolas Fella, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524500"&gt;KDE Bugzilla #524500&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="kde-gear-26120"&gt;KDE Gear 26.12.0&lt;/h3&gt;
&lt;p&gt;System Settings’ Proxy page has been rewritten in QML, which lets it work on Plasma Mobile. The design is nearly identical, so you shouldn’t notice any obvious changes to it. (Tobias Fella, &lt;a target="_blank" href="https://invent.kde.org/network/kio-extras/-/merge_requests/536"&gt;kio-extras MR #536&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="how-you-can-help"&gt;How you can help&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Would you like to help put together this weekly report? Introduce yourself in &lt;a target="_blank" href="https://matrix.to/#/%23this-week-kde-apps:kde.org"&gt;the Matrix room&lt;/a&gt; and &lt;a target="_blank" href="https://community.kde.org/Promotion/This_week_in_KDE"&gt;join the team&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Beyond that, you can help KDE by directly &lt;a target="_blank" href="https://community.kde.org/Get_Involved"&gt;getting involved&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;You can also help out by &lt;a target="_blank" href="https://kde.org/donate"&gt;making a donation&lt;/a&gt;! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.&lt;/p&gt;
&lt;h2 id="to-get-a-new-plasma-feature-or-a-bug-fix-mentioned-here"&gt;To get a new Plasma feature or a bug fix mentioned here&lt;/h2&gt;
&lt;p&gt;Push a commit to &lt;a target="_blank" href="https://invent.kde.org/websites/blogs-kde-org/-/merge_requests/?label_name%5B%5D=This%20Week%20in%20Plasma"&gt;the relevant merge request on invent.kde.org&lt;/a&gt;.&lt;/p&gt;</description><author>Nate Graham</author></item><item><title>Initial Release of Union QtWidgets</title><link>https://akselmo.dev/posts/union-qtwidgets/</link><pubDate>Fri, 28 Aug 2026 18:34:45 +0000</pubDate><guid isPermaLink="true">https://akselmo.dev/posts/union-qtwidgets/</guid><description>&lt;p&gt;It has begun.&lt;/p&gt;
&lt;span id="continue-reading"&gt;&lt;/span&gt;
&lt;p&gt;After couple months of work, I have now finally managed to cobble
together the &lt;a target="_blank" href="https://invent.kde.org/plasma/union/-/commit/0131e503787c77620e5bad2390165247590d1cf7"&gt;QtWidgets side of Union&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This means that your QtWidgets apps, such as Dolphin, KMail, Kate etc. can
now use the Union CSS files as the source of their styling.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;However, temper your expectations, as this is the first initial release!&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;a target="_blank" href="https://akselmo.dev/assets/images/unionwidgets/dolphin.png" target="_blank"&gt;
&lt;img src="https://akselmo.dev/assets/images/unionwidgets/dolphin.png" width=300 /&gt;
&lt;/a&gt;&lt;a target="_blank" href="https://akselmo.dev/assets/images/unionwidgets/demo1.png" target="_blank"&gt;
&lt;img src="https://akselmo.dev/assets/images/unionwidgets/demo1.png" width=300 /&gt;
&lt;/a&gt;&lt;a target="_blank" href="https://akselmo.dev/assets/images/unionwidgets/demo2.png" target="_blank"&gt;
&lt;img src="https://akselmo.dev/assets/images/unionwidgets/demo2.png" width=300 /&gt;
&lt;/a&gt;&lt;a target="_blank" href="https://akselmo.dev/assets/images/unionwidgets/demo3.png" target="_blank"&gt;
&lt;img src="https://akselmo.dev/assets/images/unionwidgets/demo3.png" width=300 /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="emote smile"&gt;
&lt;img class="emote-face" src="//akselmo.dev/assets/images/emotes/smile.png" alt="My lizard fursona making an smile face."&gt;
&lt;p class="emote-text"&gt;Do note that there are visual bugs and oddities!
I&amp;#x27;m still working on things!&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;So yes, as you can see, some things look off. Not Breeze at all!
Some things are just different, some other things have wrong colors.&lt;/p&gt;
&lt;p&gt;These are all fixable and I will do my best to get as many things as possible
fixed for the Plasma 6.8 release.&lt;/p&gt;
&lt;p&gt;But some other oddities are kind of expected: This is the first time ever
Breeze QtWidgets and QtQuick style have &lt;strong&gt;same shared source-of-truth&lt;/strong&gt;
as an easily editable file! (Excluding colorschemes.)
So some of these designs are made with QtQuick in mind, so they can look a bit off in QtWidgets.&lt;/p&gt;
&lt;p&gt;I'll go through here what I did and what still needs to be done,
but this was a huge undertaking, so I'm having a small celebration for the very first release of this. :)&lt;/p&gt;
&lt;h2 id="hold-on-can-i-try-it"&gt;&lt;a class="zola-anchor" href="#hold-on-can-i-try-it" aria-label="Anchor link for: hold-on-can-i-try-it"&gt;Hold on, can I try it!?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yes! It should be released in Plasma 6.8, unless someone tells me no.
As of writing this, nobody has said no.&lt;/p&gt;
&lt;p&gt;You can make your own CSS files and see them affect QtWidgets apps too.
Just expect some breakage and report all the bugs!&lt;/p&gt;
&lt;p&gt;Go crazy with the themes. Try everything. Bring back whimsy to computers.
Tell us about the theming experience in general.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Have fun.&lt;/strong&gt; Your computer should be just as cool as you are.&lt;/p&gt;
&lt;p&gt;The rest of this blogpost is more a technical rant and ramble as I am
venting all the exhaustion over this thing, lol.&lt;/p&gt;
&lt;h2 id="qstyle-is-difficult"&gt;&lt;a class="zola-anchor" href="#qstyle-is-difficult" aria-label="Anchor link for: qstyle-is-difficult"&gt;QStyle is difficult&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;QStyle themes, which are the styles that modify the look of QtWidgets
applications, are not easy to work on. Most themes I've seen take
an existing one, such as Fusion or Breeze and make their changes on top
of those.&lt;/p&gt;
&lt;p&gt;But for Union, we had to start from scratch. I took the very basic base of QStyle,
which is called QCommonStyle (kind of a fallback theme), and began building on top of that.&lt;/p&gt;
&lt;p&gt;Then, there was multiple parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Figure out a way for the QStyle to paint things using CSS&lt;/li&gt;
&lt;li&gt;Build a hierarchy of the style by reading the CSS data and applying it to QStyle world&lt;/li&gt;
&lt;li&gt;Create a completely new set of element files we use
&lt;ul&gt;
&lt;li&gt;The QStyle themes are very unwieldy and hard to work on otherwise&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Go through &lt;em&gt;every single element&lt;/em&gt; and ensure they read all data from the CSS correctly
&lt;ul&gt;
&lt;li&gt;And ensure the style stays backwards compatible!&lt;/li&gt;
&lt;li&gt;This is still ongoing process, most bugs lurk here. :P&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Figure out how to use Union layouting system within QStyle elements
&lt;ul&gt;
&lt;li&gt;This is also buggy, as QStyle is more "rigid" with layouting&lt;/li&gt;
&lt;li&gt;Applications expect very specific layouting from QStyles over the years it has existed&lt;/li&gt;
&lt;li&gt;So any application that deviates from those expectations will look broken&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Caching so that the style is performant
&lt;ul&gt;
&lt;li&gt;Here Arjen helped me a lot, thank you!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;And a lot of other stuff I have already forgotten..&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thankfully &lt;a target="_blank" href="https://redstrate.com/"&gt;redstrate&lt;/a&gt; had already made the painting part for the very
simplified proxystyle (which took Breeze and modified it a bit), so I did not have to modify
that too much. I mostly had to poke at it to make it work with my hierarchy system.
So thanks! &amp;lt;3&lt;/p&gt;
&lt;p&gt;It's hard to put it into words how much work there was involving the actual QStyle itself
and creating a sort of "framework within a framework" so that the Union rules would
translate better for the QStyle rules.&lt;/p&gt;
&lt;p&gt;For example, when a widget, such as a PushButton, wants to be styled, it informs
the QStyle about it with something called &lt;code&gt;QStyleOptionButton&lt;/code&gt;. This class holds
bunch of information about the button, and the style can use that information to
decorate it better. But of course, the styleoption does not necessarily need to exist.
If there is no styleoption, the style can use the &lt;code&gt;QWidget&lt;/code&gt; itself for style information.
But even that can be empty! And at that point, you do not know how to style something,
since you do not even know what it is.&lt;/p&gt;
&lt;p&gt;What made matters even worse was that the documentation just Does Not Exist.&lt;/p&gt;
&lt;p&gt;Sure, there is the &lt;a target="_blank" href="https://doc.qt.io/qt-6/qstyle.html"&gt;QStyle&lt;/a&gt; documentation,
but it is more about "what" and not "why" or "how."
I could have used somekind of tutorial for how to make a QStyle from scratch, but
I could not really find anything, except super old information from Qt4 times.
So very very often I resorted to just reading the raw source code itself, which is
also not very easy to read. There is a lot of variables that are just named &lt;code&gt;pw&lt;/code&gt; or &lt;code&gt;w&lt;/code&gt;.
So even the codebase is very undocumented..!&lt;/p&gt;
&lt;p&gt;Most of the work had to be done with trial and error! "What happens if I change this value?"
"What if I use debugger to follow this variable, where will it lead?"
I also used Breeze as my information bank a lot, as it had gone through it all before.
That was very helpful.&lt;/p&gt;
&lt;p&gt;But the lack of documentation and old codebase nobody seems to really touch anymore, much less
document, was the thing that made this all take so long time.&lt;/p&gt;
&lt;div class="emote grumpy"&gt;
&lt;img class="emote-face" src="//akselmo.dev/assets/images/emotes/grumpy.png" alt="My lizard fursona making an grumpy face."&gt;
&lt;p class="emote-text"&gt;Not to forget the completely misleading names in the API.
&amp;quot;PM_MenuPanelWidth&amp;quot; is not the width of the panel,
but actually &amp;quot;Border width (applied on all sides) for a QMenu.&amp;quot;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The total work was 9000 lines of code. Yes. And all of it is required. Lot's of boilerplate,
as QStyle seems to love boilerplate. Pretty much all of it is artisanal, handwritten slop by yours truly.&lt;/p&gt;
&lt;p&gt;I had to painstakingly go through all
the elements we're drawing and sizes we're calculating, then turning it into an &lt;code&gt;Element&lt;/code&gt; that we
can easily modify without modifying the whole style.&lt;/p&gt;
&lt;p&gt;If you have managed to make a working QStyle theme completely from scratch, going through every
little detail, I salute you. &lt;strong&gt;This is some of the toughest stuff I've ever worked on.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So in summary: I had to backwards engineer a lot of stuff to figure out what order
we even draw some things, or what size affects what in the actual application.
Then make it work with Union core and CSS.&lt;/p&gt;
&lt;div class="emote scream"&gt;
&lt;img class="emote-face" src="//akselmo.dev/assets/images/emotes/scream.png" alt="My lizard fursona making an scream face."&gt;
&lt;p class="emote-text"&gt;DOCUMENT YOUR API PLEASE I BEG YOU&lt;/p&gt;
&lt;/div&gt;&lt;h2 id="next-steps"&gt;&lt;a class="zola-anchor" href="#next-steps" aria-label="Anchor link for: next-steps"&gt;Next steps&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Next up is testing and bugfixing.&lt;/p&gt;
&lt;p&gt;There's already a lot of bugs being found here: &lt;a target="_blank" href="https://invent.kde.org/plasma/union/-/work_items/205"&gt;https://invent.kde.org/plasma/union/-/work_items/205&lt;/a&gt;
And more will be found. There will be weird edgecases where application expects everything to
work like in Fusion style, as it's the default Qt style, but Union does not handle that
situation yet well.&lt;/p&gt;
&lt;p&gt;So here's what I need from you, dear reader: See what breaks. Document it. Make a &lt;a target="_blank" href="https://bugs.kde.org/"&gt;bugreport&lt;/a&gt;.
Let's find these weird things and figure them out, so that the QtWidgets side can finally be themed without so much pain.&lt;/p&gt;
&lt;p&gt;Of course, there's also the design side: Like I mentioned earlier, the Breeze CSS we have now is
very QtQuick oriented, so QtWidgets applications can look and feel odd.&lt;/p&gt;
&lt;p&gt;Something to keep in mind though is that QtQuick and QtWidgets applications will likely never look the exact same, due
to the way how they work and are drawn. But we can try to make the QtWidgets style work reliably first
and then try to make it look as close to QtQuick side as possible.&lt;/p&gt;
&lt;p&gt;My todo list is pretty much following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix as many bugs as I can before 6.8 release&lt;/li&gt;
&lt;li&gt;Figure out a layouting system for the QStyle that is robust
&lt;ul&gt;
&lt;li&gt;Even if it can't do all the tricks QtQuick can&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Make sure the QStyle is backwards compatible with as many applications as possible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, more work. A lot of work.&lt;/p&gt;
&lt;p&gt;But at least we can now properly start that work, which is what this
first release is about. Getting the tedium out of the way, so the interesting
parts can begin.&lt;/p&gt;
&lt;p&gt;And boy how much tedium that was. I would never do it again, but
honestly.. It was &lt;em&gt;fun&lt;/em&gt; at times. Super interesting to figure out.
Like a very tough puzzle game. I'm happy with what I've achieved here, even if
it's not perfect yet. And I hope all this work is useful for you too, dear users.
I really want to see the crazy things you all will come up with.&lt;/p&gt;
&lt;p&gt;Thanks for reading!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ps. Again sorry if this reads all over the place, I just needed to get it out of my system.&lt;/em&gt;
&lt;em&gt;I don't like writing drafts much, so I just write a braindump and go.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://brid.gy/publish/mastodon"&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Akseli Lahtinen (Aks)</author></item><item><title>Tickets in Transitous</title><link>https://jbb.ghsq.de/kde/2026/08/27/GTFS-Ticketing.html</link><pubDate>Thu, 27 Aug 2026 21:35:10 +0000</pubDate><guid isPermaLink="true">https://jbb.ghsq.de/kde/2026/08/27/GTFS-Ticketing</guid><description>&lt;p&gt;As you might already know, Transitous is a project that runs a public transport routing service that aims to work wold-wide.
To make Transitous results more useful, there needs to be a simple way to book the individual sections of a multi-modal route.
It is important to mention that Transitous can not legally sell tickets itself, and there are no plans to change that, so booking in this case means directing users to a ticket shop that can sell tickets for the route.&lt;/p&gt;
&lt;p&gt;&lt;a href="//jbb.ghsq.de/img/ticketing/vilnius-kaunas.png"&gt;
&lt;img src="//jbb.ghsq.de/img/ticketing/vilnius-kaunas.png" width="" height="" class="" alt="LTG Link route from Vilnius to Kaunas displaying a Tickets button" /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="ticketing-extension"&gt;Ticketing Extension&lt;/h2&gt;
&lt;p&gt;Transitous is primarily based around the GTFS format for its transport schedules, although NeTEx is increasingly being used as well.
The first step naturally was to implement reading ticketing information from the schedule files. Although ticketing is not a core part of GTFS, there is the &lt;a target="_blank" href="https://developers.google.com/transit/gtfs/reference/google-transit-ticketing-extension"&gt;Google Transit ticketing extension&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Its most important feature is specifying booking urls and a way to pass the stop ids, trip ids and times to the ticket shops.
The extension also allows to define ids for stops and trips that the ticket shop can understand. This is important because often the ticket shop software is different from the piece of software that writes the GTFS files. These don’t necessarily have to agree on the identifier they use.&lt;/p&gt;
&lt;p&gt;If each trip had it’s own booking deeplink, the size of the schedule would increase massively, as well as the size of the data we’d need to store on the Transitous servers. To solve this, the ticketing extension only stores the base url, and assembles the parameters for each deep link only if needed.&lt;/p&gt;
&lt;p&gt;However, this requires a separate shop-specific server side step to convert the standardized parameters to something that the ticket shop understands.&lt;/p&gt;
&lt;h2 id="my-work"&gt;My work&lt;/h2&gt;
&lt;p&gt;&lt;a href="//jbb.ghsq.de/img/ticketing/itinerary.png"&gt;
&lt;img src="//jbb.ghsq.de/img/ticketing/itinerary.png" width="500" height="" class="post-img post-img-left" alt="Itinerary screenshot showing bookable connections from Vilnius to Riga" /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Transitous is mostly just an instance of the MOTIS routing engine, so much of the work happened &lt;a target="_blank" href="https://github.com/motis-project/motis/pull/1414"&gt;there&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This work has partially been funded by &lt;a target="_blank" href="https://nlnet.nl/"&gt;NLnet&lt;/a&gt; through the &lt;a target="_blank" href="https://nlnet.nl/commonsfund"&gt;NGI0 Commons Fund&lt;/a&gt; with financial support from the European Commission’s Next Generation Internet programme.&lt;/p&gt;
&lt;p&gt;Unfortunately that did not magically give us booking links everywhere. The ticketing extension does not (yet) play such a big role in the open-data / open-source GTFS ecosystem. However since Google Maps supports it, many feeds made for it already contain &lt;code class="language-plaintext highlighter-rouge"&gt;ticketing_deeplinks.txt&lt;/code&gt;.
Maybe you can get your local transit operators to add support for it as well :)&lt;/p&gt;
&lt;p&gt;To do my part in improving the situation, I added support for it in some of my own GTFS feeds and &lt;a target="_blank" href="https://github.com/rust-transit/gtfs-structure/pull/186"&gt;the library I use for creating them&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since the problem of needing to translate the url parameters for the ticket shops comes up in every inofficial feed, I also wrote a &lt;a target="_blank" href="https://codeberg.org/transitous/transitous-ticket-redirect"&gt;generic server&lt;/a&gt; for doing the redirecting. Adding support for a new ticket shop there is very easy.
Since I already host it, it also removes the burden of needing to run a server side component for each feed one publishes.&lt;/p&gt;
&lt;p&gt;You can see the results on Transitous: &lt;a target="_blank" href="https://api.transitous.org/?fromPlace=me-zpcg_25&amp;amp;toPlace=me-zpcg_8&amp;amp;withFares=true&amp;amp;numLegAlternatives=3&amp;amp;joinInterlinedLegs=false&amp;amp;noCompulsoryReservation=false&amp;amp;maxMatchingDistance=250&amp;amp;fromName=Nikšić%2C+Montenegro&amp;amp;toName=Podgorica%2C+Montenegro&amp;amp;fromPos=42.770466%2C18.944532&amp;amp;toPos=42.432007%2C19.269415#10.12/42.6015/18.9347"&gt;Route from Nikšić to Podgorica&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It also already works in KDE Itinerary.&lt;/p&gt;
&lt;h2 id="adding-ticketing"&gt;Adding Ticketing&lt;/h2&gt;
&lt;p&gt;Adding ticketing to your own feeds is fortunately quite straightforward in many cases. These examples are based on my &lt;code class="language-plaintext highlighter-rouge"&gt;gtfs-generator&lt;/code&gt; rust crate, but it would be very similar in other language ecosystems.&lt;/p&gt;
&lt;p&gt;Assuming there is one shop for all trips in the feed, you only need to add one ticketing link:&lt;/p&gt;
&lt;div class="language-rust highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="n"&gt;generator&lt;/span&gt;
&lt;span class="nf"&gt;.add_ticketing_deep_link&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TicketingDeepLink&lt;/span&gt; &lt;span class="p"&gt;&amp;#123;&lt;/span&gt;
&lt;span class="n"&gt;ticketing_deep_link_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"tickets-zpcg"&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="n"&gt;web_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://jbb.ghsq.de/ticket-redirect/zpcg/"&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
&lt;span class="n"&gt;android_intent_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://jbb.ghsq.de/ticket-redirect/zpcg/"&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
&lt;span class="n"&gt;ios_universal_link_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://jbb.ghsq.de/ticket-redirect/zpcg/"&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;If the IDs the ticket shop and the feed use are already the same, you already know the IDs and just need to copy them over:&lt;/p&gt;
&lt;div class="language-rust highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="nf"&gt;.add_ticketing_identifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TicketingIdentifier&lt;/span&gt; &lt;span class="p"&gt;&amp;#123;&lt;/span&gt;
&lt;span class="n"&gt;ticketing_stop_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="py"&gt;.stop_id&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="n"&gt;stop_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="py"&gt;.stop_id&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="n"&gt;agency_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"zpcg"&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Then all that’s left is editing the agency entry to reference the new ticketing link.
For more complicated cases, you can also reference a different ticcketing link per route.&lt;/p&gt;
&lt;p&gt;If the IDs don’t match, chances are this is still relatively easy. Often the ticket shops’ autocompletion allows to retrieve a full list of stops, ideally including coordinates as well. Then matching these to your stops is relatively straightforward.&lt;/p&gt;
&lt;p&gt;If you import your feed into MOTIS with these changes, you should already get a clickable “Tickets”-button.
To make it redirect somewhere useful, the redirect server needs to be tought how the url scheme of the ticket shop works by adding a little function like this:&lt;/p&gt;
&lt;div class="language-go highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;redirectZpcg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trip&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;departure&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arrival&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;&amp;#123;&lt;/span&gt;
&lt;span class="n"&gt;baseUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://www.tickets-zpcg.me/en/rezultati.php"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;baseUrl&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2006-01-02"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;baseUrl&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RawQuery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Encode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;baseUrl&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusSeeOther&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The parameters are arrays, since in the ticket links allow to buy multiple tickets via one link. This feature might not be possible to support with every ticket shop.&lt;/p&gt;
&lt;p&gt;Maybe this motivated you to add support for this in some new corner of the world :)&lt;/p&gt;</description><author>Jonah Brüchert</author></item><item><title>Din ordkvot denna månad är slut</title><link>https://englich.wordpress.com/2026/08/27/din-ordkvot-denna-manad-ar-slut/</link><pubDate>Thu, 27 Aug 2026 08:55:33 +0000</pubDate><guid isPermaLink="true">http://englich.wordpress.com/?p=109</guid><description>&lt;p class="wp-block-paragraph"&gt;Svenska språket uppfinns.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;“Hej! Här kommer en uppdatering av våra villkor! Du kan nu använda upp till två tusen ord i månaden med vår gratistjänst, sedan måste du uppgradera till Basic Plan för 129 kr/månaden. Ska du använda svenskan i jobbet kostar det som innan 1299 kr/månaden. Behöver du läsglasögon? Våra enbart godkända leverantörer finner du här. Vi påminner om att pensionärsutgåvan finns inte mer. Vi hörs!”&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Wow. Vilken teknologi. Vilken innovation. Vi alla köper.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;År 2026, och så har det varit ett tag, så är det så här uttrycksfrihet fungerar på nätet. Vill du skriva till någon som är på Facebook men du är inte? Går inte. Vill du ta del av samhällsaktörers meddelanden och debatt utan annonser och material från den vinstdrivande aktören X? Sorry. Vill du chatta med dina kompisar på SnapChat med en app som är designad på ett helt annat sätt? Det får du inte. Välja leverantör av din feed på TikTok? Nope. Och så vidare.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Grunden i Internet, så som e-post och webbsidor, som byggs upp av specifikationer och organisationer, var designad runt att vara öppen. Du kan välja e-postprogram, webbläsare och vem som helst kan skapa en webbsida. Syftet med dess design var att hålla Internet neutralt, utan så kallade proprietära teknologier och nedlåsning med vinstdrivande intressen. Detta bidrog till stor del till dess succé, och varför det är bra. (Och gammal teknologi, uttrycksfrihet och demokrati har också sina utmaningar.)&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;De lager och applikationer som vi alla använder i nuläget är långt i från det. Det hela kännetecknas av vad ekonomer kallar marknadssvikt: de sociala medier-apparna tjänar oss konsumenter dåligt.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;De samhällsproblem så som psykisk ohälsa och en systemisk sänkning av vår förmåga är ett resultat av hur teknologin och juridiken ser ut. Vi vill digitalt kommunicera och ta del av media, men kan i nuläget inte välja hur eller faktiskt vilket innehåll. Att hålla vinstdrivande aktörer samhällsmässigt ansvariga fungerar inte, men de respekterar marknadens spelregler. Ändra dem.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Så här finns det utrymme för innovation. Dra ihop jurister, samhällsvetare, teknologer och uppfinn de moment i form av teknologi (tänk API:er, referensimplementationer, specifikationer), lämplig juridik och de (supranationella) samarbeten som behövs för att göra den korrektion som är nödvändig. Teknisk separation mellan den app som visar och konton med material? Obligatoriska standarder? En EU-motsvarighet till Finansinspektionen? Här är några utmaningar med det: dåligt betalt, folk fattar inte riktigt poängen, och klurigt.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Kanske det är viktigt nog. Vad är första steg?&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;</description><author>Frans Englich</author></item><item><title>@ FOSSY 2026</title><link>http://jaiden.sh/blog/fossy.html</link><pubDate>Thu, 27 Aug 2026 05:00:00 +0000</pubDate><guid isPermaLink="true">http://jaiden.sh/blog/fossy.html</guid><description>Last week, I went to FOSSY 2026 to participate in Camp KDE!</description><author>Jaiden Riordan</author></item><item><title>Dolphin 26.08 and KIO, part two: what got faster and smaller</title><link>https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/</link><pubDate>Thu, 27 Aug 2026 00:00:01 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/</guid><description>&lt;p&gt;This is the second half of &lt;a target="_blank" href="https://blogs.kde.org/2026/08/26/dolphin-26.08-and-kio-perf-improvements/"&gt;what changed in Dolphin
26.08&lt;/a&gt;. The first half is what you can see: the
features, the behaviour changes, the bugs. This one is what you can measure.&lt;/p&gt;
&lt;p&gt;Dolphin does very little file work itself. It asks KIO, so the numbers below are mostly
KIO numbers: 6.25 is the version that shipped alongside Dolphin 26.04, 6.29 is the one
that ships alongside 26.08, four framework releases and 294 commits apart. The last
section is 6.30, the release still to come, since several of its changes are large enough to
be worth showing early.&lt;/p&gt;
&lt;p&gt;Every figure here was measured on the same machine, with the two versions built the same
way and run one after another, round by round. Where a number is not solid I say so
rather than rounding it up.&lt;/p&gt;
&lt;h2 id="memory-and-object-lifetimes"&gt;Memory and object lifetimes&lt;/h2&gt;
&lt;p&gt;The &lt;a target="_blank" href="https://blogs.kde.org/2026/05/03/dolphin-26.04-release/"&gt;26.04 post&lt;/a&gt; ended by saying the next thing was
to point LeakSanitizer at Dolphin. It turned into a lot of fixes, and into a CI job: KIO now
&lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/9bd177bb40ab66114d812b1c7a05638a68807f4e"&gt;runs its tests under LeakSanitizer&lt;/a&gt;
on every merge request, which is what stops the list below from growing back.&lt;/p&gt;
&lt;p&gt;Sebastian Englbrecht was the busiest contributor to Dolphin this cycle by commit count, and
most of that work was lifetime and ownership: &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/714830f8dda873fbefa6de9704c90220e16a6133"&gt;killing in-flight KIO
jobs&lt;/a&gt;
in destructors, &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/0d6302ef9be3387d3a62093ae18c92ec84e5a2e1"&gt;deleting the Konsole
part&lt;/a&gt;,
&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/8f7ab9d4b7ecc71083e2d7e03863857b1cfdea54"&gt;destroying owned objects before the KIO cache tears
down&lt;/a&gt;
and &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/680ccee08cfac2b53bb7bf7d35b780889efa4b51"&gt;fixing unowned
allocations&lt;/a&gt;.
He also added a &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/1330df1053a9ee9927dc27e1f333a67965dbf02e"&gt;smoke
test&lt;/a&gt;,
&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/d56feb8151871065505c83eeaa8bd3d53750af10"&gt;eight places-panel unit
tests&lt;/a&gt;,
and a &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/a33d65a418bf5bdb13d83281ce665d630a95668e"&gt;rule forbidding bare
&lt;code&gt;QTest::qWait()&lt;/code&gt;&lt;/a&gt;
with &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/22d65e047ac75fc3527ddac2401e90a2805a6f04"&gt;the existing waits replaced by signal-based
ones&lt;/a&gt;,
which is the sort of thing that makes the rest of the CI trustworthy. Wendi Gan fixed an
&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/2dce7352c1edfb13c90a8a3b858d113e3a9300b2"&gt;occasional use-after-free crash&lt;/a&gt;
in &lt;code&gt;KConfig::sync()&lt;/code&gt; during exit, closing two reports,
&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=516481"&gt;516481&lt;/a&gt; and
&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=518433"&gt;518433&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My own share was in both projects. In Dolphin: &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/5b21e7c3105258f90745ff12e6877e7a8e8cb366"&gt;aborting the folder stat job when the
Information Panel is destroyed&lt;/a&gt;,
&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/99c87fe4314d392ae8d3e4cf9c05e3f014322608"&gt;a use-after-free of the current version-control plugin&lt;/a&gt;,
&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/cc806587766d09f916de712b0b5e248ba0c5383c"&gt;a leaked submenu in the folder-icon action&lt;/a&gt;
and &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/ddfc69105a8e8975a517210116de625c621a6757"&gt;a leak in the trash settings page on exit&lt;/a&gt;.
In KIO, besides turning the sanitiser on in CI and &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/abfe4b4a5fca5d554f957f9e55d73365effe99f4"&gt;teaching the tests to wait for what they
allocate to be deleted&lt;/a&gt;,
three fixes are ones a user could have met: the &amp;quot;Move Into New Folder&amp;quot; drop action had done
nothing at all since 6.25, because &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/0a47ba93999eb5e91459aca8c7aface2aabee809"&gt;the menu was parented to a plugin destroyed the moment the
action fires&lt;/a&gt;
while the folder creation it starts runs asynchronously; &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/ad1eb8c809c2a88e6e344df15cb9e43666976dc6"&gt;&lt;code&gt;FilePreviewJob&lt;/code&gt; armed a repeating
timeout timer it never stopped&lt;/a&gt;,
so with a context menu held open the orphaned timer could fire on a finished job and re-enter
&lt;code&gt;emitResult()&lt;/code&gt;; and &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/182fc462ab396b823137a82eee36e2ef483a7ae1"&gt;&lt;code&gt;KDirModel&lt;/code&gt; dereferenced the node of a directory that had already left the
model&lt;/a&gt;
when an earlier listing completed late.&lt;/p&gt;
&lt;h2 id="performance-improvements-in-kio-between-625-and-629"&gt;Performance improvements in KIO between 6.25 and 6.29&lt;/h2&gt;
&lt;p&gt;The big one is the &lt;strong&gt;in-process worker transport&lt;/strong&gt;. For local files KIO has for some time run the
&lt;code&gt;file&lt;/code&gt; worker in a thread of the application rather than a separate process. Even in
that thread it still talked to the application over a socket, serialising every command and every
block of file content through a &lt;code&gt;QLocalSocket&lt;/code&gt; pair. In 6.29 that channel is a new
&lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/0bce28d5d9626afba27f8eeb48dc4c7ae3574b2d"&gt;&lt;code&gt;ThreadConnectionBackend&lt;/code&gt;&lt;/a&gt;, an in-memory queue, and &lt;code&gt;kio_file&lt;/code&gt; &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/c3f5ec3bb42eda4ab41dc66e52331730d1d8d72a"&gt;hands over owned byte arrays instead of copying them&lt;/a&gt;, which makes in-process reads zero-copy. This is the
first half of the improvements described in
&lt;a target="_blank" href="https://blogs.kde.org/2026/07/28/making-kio-copy-many-files-fast/"&gt;the copy post from July&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Second, &lt;strong&gt;&lt;code&gt;CopyJob&lt;/code&gt; &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/19ed9a036160b4f7298d1ffc04b5249e98af99ed"&gt;no longer re-probes the destination filesystem type for every file&lt;/a&gt;&lt;/strong&gt;. It called &lt;code&gt;KFileSystemType::fileSystemType()&lt;/code&gt; per file for the FAT and NTFS checks, and on libmount builds each of those calls parses
the entire mount table. Copying N files parsed &lt;code&gt;/proc/self/mountinfo&lt;/code&gt; N times. It is
determined once now. Each parse is about 57 microseconds on a host with 39 mounts,
and it scales with the number of mounts.&lt;/p&gt;
&lt;p&gt;Third, and this is the memory one, &lt;strong&gt;the directory lister cache &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/5e36acccb3ec5ed5e1d049e697c6639a7f54bc65"&gt;got much smaller&lt;/a&gt;&lt;/strong&gt;.
A directory that no lister was showing any more went into a cache of ten and stayed
there until nine others had displaced it. For a picture folder of 50000 files that
is a lot of &lt;code&gt;KFileItem&lt;/code&gt; and &lt;code&gt;UDSEntry&lt;/code&gt; retained for nothing. The cache now holds
three directories, which is what going back a level or two actually needs, and drops
anything no lister has asked for in three minutes.&lt;/p&gt;
&lt;p&gt;Fourth, &lt;strong&gt;&lt;a target="_blank" href="https://api.kde.org/kio-udsentry.html"&gt;&lt;code&gt;UDSEntry&lt;/code&gt;&lt;/a&gt; got smaller&lt;/strong&gt;, which saves memory. An
entry now keeps its numbers and its strings in &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/a7b7e249eded900d92aa2240793b40d7e1a65b8d"&gt;two separate vectors&lt;/a&gt;,
which buys a byte for every field an entry holds. And &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/cbf2013c5a51d6e78bf0491170373067417004c3"&gt;loading now sizes each
vector from what the entry actually
holds&lt;/a&gt;:
both vectors used to be sized from the count of fields alone, a third of it for the
strings and two thirds for the numbers. A stat of a local file gives one string, the name,
and eight numbers, so the numbers grew past their room while the strings kept more than
they needed. That sizing change on its own takes a listing of 200000 local files from 528 bytes
an entry to 400, which is 105.6 MB down to 80 MB, 25.6 MB saved. Loading also &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/6015c53d52f77081fda1e43e44c8d1fe3061d324"&gt;stopped hunting for a shared
value&lt;/a&gt; on
the fields where values cannot repeat: no two entries of a listing carry the same name, url or
local path, so comparing them with the entry before never found anything to share. Reading one
entry of a local folder off the wire went from 530 to 488 nanoseconds.&lt;/p&gt;
&lt;p&gt;Smaller ones worth naming: &lt;code&gt;KFileItem&lt;/code&gt; &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/786803f7f32a36293cfa0fed821323c5fa8be7bf"&gt;no longer reads &lt;code&gt;.directory&lt;/code&gt; on slow filesystems when working out an icon name&lt;/a&gt;
(6.28, closing &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=519189"&gt;bug 519189&lt;/a&gt;), Sebastian
Englbrecht fixed &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/086ffb96777a949792b40d652b578fe2d2f23321"&gt;&lt;code&gt;QPluginLoader&lt;/code&gt;, &lt;code&gt;QLibraryPrivate&lt;/code&gt; and thread lifecycle leaks&lt;/a&gt; in the worker machinery (6.28).&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://bugs.kde.org/buglist.cgi?bug_id=424545%2C459986%2C483297%2C489288%2C494704%2C503976%2C505197%2C506177%2C509461%2C515511%2C517067%2C517607%2C518012%2C518481%2C519189%2C519614%2C519773%2C520249%2C520659&amp;amp;bug_id_type=anyexact&amp;amp;order=bug_id"&gt;Nineteen reports&lt;/a&gt; were closed by fixes in KIO across those four releases. Most of
them are filed against the applications rather than against KIO, since that is where a user
meets the problem: Dolphin, Plasma, Konsole, KWin.&lt;/p&gt;
&lt;h2 id="benchmarks"&gt;Benchmarks&lt;/h2&gt;
&lt;h3 id="methodology"&gt;Methodology&lt;/h3&gt;
&lt;p&gt;I built KIO 6.25.0 and 6.29.0 from their tags, Release on gcc 16.2.1 and Qt 6.11.1, and ran
the same harness against each. The arms are interleaved one round at a time, so a CPU
frequency or load excursion hits both equally, and the best of N rounds is reported.&lt;/p&gt;
&lt;p&gt;Everything ran on one 13th Gen Core i7-1365U with 30 GB of RAM, kernel 7.1.4, on ext4, with
the benchmark processes pinned to the same two cores.&lt;/p&gt;
&lt;h3 id="copying"&gt;Copying&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;KIO::copy()&lt;/code&gt; of N files into an empty directory, timed from job start to the
&lt;code&gt;result&lt;/code&gt; signal. Source files are created untimed, the destination is cleared
untimed. &lt;code&gt;cp -r&lt;/code&gt; is there as a raw-tool floor, not as a target.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/copy.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="Copying files into an empty directory. 1000 x 256 B: 421 ms in 6.25, 189 ms in 6.29, 34 ms for cp. 5000 x 256 B: 2279, 942, 176. 5000 x 4 KB: 2536, 1024, 188. 500 x 1 MB: 538, 327, 230." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/copy.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Copying many small files is more than twice as fast as it was in April. The gain
falls off as files get larger, which is what you would expect: the fix is to the
per-file overhead, and once each file carries a megabyte of actual I/O the overhead
stops being what you are waiting for.&lt;/p&gt;
&lt;p&gt;There is still a gap with &lt;code&gt;cp&lt;/code&gt;, discussed at length in
&lt;a target="_blank" href="https://blogs.kde.org/2026/07/28/making-kio-copy-many-files-fast/"&gt;the July post&lt;/a&gt;. KIO is doing more than &lt;code&gt;cp&lt;/code&gt; does, but not
five times more, and the batching work that closes most of the rest of that gap is still in
progress.&lt;/p&gt;
&lt;h3 id="deleting"&gt;Deleting&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;KIO::del()&lt;/code&gt; over a freshly created tree, best of three rounds. &lt;code&gt;rm -rf&lt;/code&gt; is the raw-tool
floor here, as &lt;code&gt;cp -r&lt;/code&gt; is above, and it is handed the same list of paths the job is given
rather than the folder that holds them.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/delete.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="Deleting a tree. 1000 x 256 B: 100.0 ms in 6.25, 81.0 ms in 6.29, 13.6 ms for rm -rf. 5000 x 256 B: 509.3 ms, 406.8 ms and 69.4 ms." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/delete.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Deletion improves less than copying, as expected: a delete carries no file content, so the
zero-copy half of the transport work does nothing for it. What is left is the cheaper
per-command round trip, 1.23x on the smaller tree and 1.25x on the larger one.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rm -rf&lt;/code&gt; is six times quicker than 6.29 on both trees, a wider gap than copying shows
against &lt;code&gt;cp&lt;/code&gt;. That fits: a copy at least spends real time moving bytes, where a delete is
almost nothing but the per-file round trip, so what KIO adds is most of what there is to
measure.&lt;/p&gt;
&lt;p&gt;How the job is asked matters as much as the count. These runs hand &lt;code&gt;KIO::del()&lt;/code&gt; the 5000
files one by one, the way a select-all in a file manager does. Handing it the one folder
instead takes about a fifth of that on the same filesystem, because the worker then walks
the tree itself instead of taking a command per file. &lt;code&gt;rm&lt;/code&gt; given the folder rather
than the 5000 paths goes from 69.4 ms to 66.8, which is the difference the filesystem
charges for the two shapes. The rest of it is KIO's. That second path is the one the 6.30
section below measures.&lt;/p&gt;
&lt;h3 id="listing"&gt;Listing&lt;/h3&gt;
&lt;p&gt;One &lt;code&gt;KCoreDirLister&lt;/code&gt; over an existing directory. The cold number is the first
listing in a fresh process. The warm number is a later listing of the same
directory, which &lt;code&gt;KCoreDirListerCache&lt;/code&gt; answers without going to disk. The second chart is the resident growth
while the lister is still showing the folder, which is what a file manager displaying that
folder actually costs.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/listing.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="First listing of a folder. 5000 files: 136 ms in 6.25, 124 ms in 6.29. 50000 files: 4026 ms and 3443 ms." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/listing.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/listing-held.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="Memory held when a folder is shown. 5000 files: 10.2 MB in 6.25, 8.8 MB in 6.29. 50000 files: 58.7 MB and 50.5 MB." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/listing-held.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Listing is about 9 percent quicker on the 5000-file folder and 15 percent on the 50000-file
one, and holds about 14 percent less memory in both cases. The memory part is the &lt;code&gt;UDSEntry&lt;/code&gt;
work described above. The warm listing is unchanged either way, 2.6 ms against 2.8 ms on the
5000-file folder and 37 ms on the 50000-file one, which is the cache answering rather than
the disk.&lt;/p&gt;
&lt;h3 id="memory-kept-for-folders-you-have-left"&gt;Memory kept for folders you have left&lt;/h3&gt;
&lt;p&gt;Of everything measured here, this is what a long-running Dolphin notices most. Walk twelve
directories one after another, the way you do going down and back up a tree, and then look at
how much memory the process is still holding. Nothing is on screen in either case, so all of
it is held for folders nobody is looking at any more.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/lister-memory.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="Memory still held after walking twelve folders and leaving them. 12 x 5000 files: 63.5 MB in 6.25, 22.7 MB in 6.29, 2.8x less. 12 x 20000 files: 238.7 MB and 77.5 MB, 3.1x less." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/lister-memory.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In 6.25 a directory nothing was showing any more sat in a cache of ten and stayed until nine
others displaced it. Browse through a few large folders and you are holding all of them. &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/5e36acccb3ec5ed5e1d049e697c6639a7f54bc65"&gt;The
cache now keeps
three&lt;/a&gt;,
and drops anything no lister has wanted for three minutes. Repeat listings do not suffer for
it, which is what the warm listing above shows: re-opening a folder you just left still
finds it. What the eleventh slot bought was going eleven folders back, and every
user of a large folder paid for it.&lt;/p&gt;
&lt;h2 id="630-improvements"&gt;6.30 improvements&lt;/h2&gt;
&lt;p&gt;None of this has shipped, so treat it as a preview rather than a result. 6.30 has several commits that touch
exactly what this post measures, so I built it as a third arm and ran the same harness.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/kio-630-time.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="6.30 against 6.29, the longer runs. Listing 50000 files: 1232.9 ms down to 531.5 ms, -57.0%. Copying 5000 x 256 B: 909.3 ms down to 883.8 ms, -2.8%. Deleting a 20000-file tree: 319.9 ms down to 290.9 ms, -9.1%." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/kio-630-time.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/kio-630-time-small.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="6.30 against 6.29, the quicker runs. Listing 5000 files: 36.0 ms down to 33.8 ms, -5.8%. Deleting a 5000-file tree: 80.9 ms down to 72.6 ms, -10.3%." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/kio-630-time-small.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/kio-630-allocations.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="Allocations for one listing. 5000 files: 151,809 down to 116,393, -23.3%. 50000 files: 1,292,614 down to 983,567, -23.9%." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/kio-630-allocations.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/kio-630-memory.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="Peak memory listing 50000 files. Peak heap: 42.45 MB down to 41.68 MB, -1.8%. Peak resident: 81.05 MB down to 78.45 MB, -3.2%." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/kio-630-memory.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Most of what 6.30 gains comes from one change: &lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/94c9b2843064d7470ba785e77866196158ebc726"&gt;handing over what a message carries as it is
when the worker runs in the application's own
process&lt;/a&gt;.
&lt;code&gt;kio_file&lt;/code&gt; runs in a thread of the application, but used to write its data down with
&lt;code&gt;QDataStream&lt;/code&gt; the way a process-based worker has to. Except it does not need to. Avoiding that
serialisation is where the fewer allocations come from, and the entries cost less memory
besides, since one no longer reserves room for fields most files never carry. Nothing changes
for a worker in another process, which still has a socket between it and the application.&lt;/p&gt;
&lt;p&gt;The other major improvement was a dormant issue. It had been there for years, and
benchmarking made it visible: 50000 files listed in 1233 ms while 5000 listed in 36, 10
times the files taking 34 times as long, where listing should be close to linear.&lt;/p&gt;
&lt;p&gt;A profile of the large case revealed 42 percent of the whole listing is &lt;code&gt;KFileItem&lt;/code&gt; copy
construction and destruction, all of it under &lt;code&gt;KCoreDirListerCache::DirItem::insertSortedItems&lt;/code&gt;
calling &lt;a target="_blank" href="https://doc.qt.io/qt-6/qlist.html#reserve"&gt;&lt;code&gt;QList::reserve&lt;/code&gt;&lt;/a&gt; once per batch of entries. Except &lt;code&gt;reserve&lt;/code&gt; has no relocatable
fast path: on the growth path it allocates exactly the size asked for and copy-appends
every element already there, even for a type declared &lt;code&gt;Q_RELOCATABLE_TYPE&lt;/code&gt; as &lt;code&gt;KFileItem&lt;/code&gt;. Since the
previous call had sized the buffer exactly, every batch reallocated and copied the whole
list. Heaptrack counted 239 such calls for 50000 files, so about six million copy
constructions for fifty thousand items.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/0fbc94a14"&gt;Deleting the &lt;code&gt;reserve&lt;/code&gt; call&lt;/a&gt; and
letting the list grow geometrically takes that listing from 1233 ms to 531 ms, over 2x
quicker. What cost the time was inside those reallocations, copy-constructing every
&lt;code&gt;KFileItem&lt;/code&gt; already in the list, and a &lt;code&gt;KFileItem&lt;/code&gt; copy is a refcount bump that allocates
nothing at all. So none of it showed up in an allocation count, which is why it took a
cycles profile to find.&lt;/p&gt;
&lt;p&gt;Deleting a folder gained from
&lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/af3d9e0e787f0fb758c34645dc1a45da6dfd123d"&gt;&lt;code&gt;af3d9e0e7&lt;/code&gt;&lt;/a&gt;, which removes a tree with the
system's own calls instead of walking it, and how much depends on the shape of
the tree. &lt;code&gt;openat&lt;/code&gt; and &lt;code&gt;unlinkat&lt;/code&gt; work from a descriptor for the directory an entry was
read from, so they stop resolving a whole path for every entry, and the deeper the tree
the more that is worth. Fifteen thousand files on tmpfs, deleted as one folder, with
&lt;code&gt;rm -rf&lt;/code&gt; over the same tree as the floor:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/delete-depth.svg"&gt;&lt;figure&gt;
&lt;img class="img-fluid" alt="Deleting 15000 files as one folder, by how deep the tree is. 10 deep: 103.4 ms in 6.29, 84.6 ms in 6.30, 65.3 ms for rm -rf. 100 deep: 136.2, 78.1 and 60.2 ms. 300 deep: 227.2, 77.4 and 62.8 ms. 800 deep: 418.7, 78.7 and 64.0 ms." src="https://blogs.kde.org/2026/08/27/dolphin-26.08-and-kio-part-two-what-got-faster-and-smaller/delete-depth.svg"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6.29 costs more the deeper the tree, four times as much at 800 levels as at ten. 6.30 does
not care how deep it is, and stays within a third of &lt;code&gt;rm -rf&lt;/code&gt; at every depth, which is about
as close as a job that reports progress and can be cancelled is going to get to a tool that
does neither.&lt;/p&gt;
&lt;h2 id="closing"&gt;Closing&lt;/h2&gt;
&lt;p&gt;The copy path still has more in it than 6.29 ships: the batching that closes most of the
remaining gap to &lt;code&gt;cp&lt;/code&gt; is written and measured in &lt;a target="_blank" href="https://blogs.kde.org/2026/07/28/making-kio-copy-many-files-fast/"&gt;Making KIO copy many
files fast&lt;/a&gt; and is not finished yet. The listing
path has an open question of its own, which is that an entry could carry its fields more
cheaply again; a branch that does it trades about two percent of listing time for eleven
percent of the memory an entry holds, and which of the two is the better trade depends on
how many entries you are holding.&lt;/p&gt;
&lt;p&gt;Enjoy the speed.&lt;/p&gt;</description><author>Méven Car</author></item><item><title>Re-Introducing KQuickImageEditor: New Features and Design Philosophy</title><link>https://noahdvs.wordpress.com/2026/08/26/re-introducing-kquickimageeditor-new-features-and-design-philosophy/</link><pubDate>Wed, 26 Aug 2026 19:06:00 +0000</pubDate><guid isPermaLink="true">http://noahdvs.wordpress.com/?p=128</guid><description>&lt;div class="wp-block-jetpack-markdown"&gt;&lt;p&gt;&lt;a target="_blank" href="https://invent.kde.org/libraries/kquickimageeditor"&gt;KQuickImageEditor&lt;/a&gt; is an image editing library for Qt Quick applications. It was created by fellow KDE developer &lt;a target="_blank" href="https://carlschwan.eu"&gt;Carl Schwan&lt;/a&gt;. It can crop/mirror/resize/rotate images, it has undo/redo history, and it comes with QML components that make it easy to set up a basic image editor. &lt;a target="_blank" href="https://invent.kde.org/network/neochat/"&gt;NeoChat&lt;/a&gt; and &lt;a target="_blank" href="https://invent.kde.org/graphics/koko"&gt;Photos (aka Koko)&lt;/a&gt; have used it since 2020 and 2021.&lt;/p&gt;
&lt;/div&gt;
&lt;figure class="wp-block-image size-large has-custom-border is-style-default" style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0"&gt;&lt;img src="https://filedn.com/lS0uh3SGeIlFK2qIjINfv3y/blog/Screenshot_20260826_124007.avif" alt="Screenshot of KQuickImageEditor in NeoChat" class="has-border-color" style="border-color:#00000040;border-width:1px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;box-shadow:var(--wp--preset--shadow--deep)" /&gt;&lt;figcaption class="wp-element-caption"&gt;Screenshot of KQuickImageEditor&amp;#8217;s original UI and capabilities in NeoChat&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div class="wp-block-jetpack-markdown"&gt;&lt;p&gt;In version 0.6, I added a new image editing system from &lt;a target="_blank" href="https://invent.kde.org/plasma/spectacle/"&gt;Spectacle&lt;/a&gt;. On top of the existing features, the new system can draw shapes, write text, blur and pixelate. It will also be able to do a wide range of color adjustments soon (likely 0.7). Spectacle and Koko have been using the new image editing system since 2025. It was Spectacle’s to begin with, so you could say Spectacle has been using it since 2023. NeoChat and others might use the new system once the number of GUI components have expanded. The old image editing system will remain available for the foreseeable future so that apps using it will not break.&lt;/p&gt;
&lt;/div&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img src="https://filedn.com/lS0uh3SGeIlFK2qIjINfv3y/blog/Screenshot_20260826_124809.avif" alt="Screenshot of KQuickImageEditor in Spectacle" /&gt;&lt;figcaption class="wp-element-caption"&gt;Screenshot of KQuickImageEditor&amp;#8217;s annotation capabilities in Spectacle. There isn&amp;#8217;t just one UI anymore.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div class="wp-block-jetpack-markdown"&gt;&lt;p&gt;My design philosophy for the new system is based on the idea that APIs should be minimal, but highly flexible by reusing existing components. It’s supposed to be like how you can buy a LEGO set and make many different things with the same pieces. For example, the upcoming color adjustment API takes a &lt;a target="_blank" href="https://doc.qt.io/qt-6/qmatrix4x4.html"&gt;&lt;code&gt;QMatrix4x4&lt;/code&gt;&lt;/a&gt; to apply linear adjustments to RGB channels with the top 3 rows and non-linear/perspective adjustments with the 4th row. It’s just like using a &lt;code&gt;QMatrix4x4&lt;/code&gt; or &lt;code&gt;mat4&lt;/code&gt; (GLSL) for 3D graphics, except your dimensions are red, green and blue. I could have made the API just for brightness and contrast effects (to be used by Koko), but the choice to use a &lt;code&gt;QMatrix4x4&lt;/code&gt; means you can do a lot of things just with Qt’s existing APIs. From there, I can still add APIs to create 4&amp;#215;4 matrices for specific effects, but apps don’t need to wait for KQuickImageEditor to have an API for the color adjustment they need. They can make their own 4&amp;#215;4 matrices by applying general mathematical concepts.&lt;/p&gt;
&lt;p&gt;The core components of the new system are &lt;code&gt;AnnotationDocument&lt;/code&gt; and &lt;code&gt;AnnotationViewport&lt;/code&gt;. &lt;code&gt;AnnotationDocument&lt;/code&gt; has all of the APIs for manipulating &lt;a target="_blank" href="https://doc.qt.io/qt-6/qimage.html"&gt;&lt;code&gt;QImage&lt;/code&gt;&lt;/a&gt; objects and undo/redo history. &lt;code&gt;AnnotationViewport&lt;/code&gt; is a custom &lt;a target="_blank" href="https://doc.qt.io/qt-6/qquickitem.html"&gt;&lt;code&gt;QQuickItem&lt;/code&gt;&lt;/a&gt; subclass that can render images, update in response to changes from &lt;code&gt;AnnotationDocument&lt;/code&gt; and provides &lt;code&gt;QPainterPath&lt;/code&gt;/SVG path data for outlining annotations when using the selection tool. There are also a few QML components for features that most viewport implementations can be expected to implement the same way, such as outlines for annotations that are selected or hovered over. The only truly necessary part is &lt;code&gt;AnnotationDocument&lt;/code&gt;. Although KQuickImageEditor is for Qt Quick apps, you could connect &lt;code&gt;AnnotationDocument&lt;/code&gt; to a custom viewport made with Qt Widgets.&lt;/p&gt;
&lt;p&gt;At the moment, there aren’t many GUI components in the API because apps may have different needs and I don’t want to force the use of a particular UI. I might add standard action components for each tool type in the future to make setting up toolbars, floating toolbars or toolboxes easier, but there are still a lot of things to decide on before adding more visual GUI components to the API. There is a &lt;a target="_blank" href="https://api.kde.org/org-kde-kquickimageeditor-qmlmodule.html"&gt;documentation website&lt;/a&gt;, but the documentation needs quite a lot of work, so reading the header files and looking at how Koko and Spectacle have used the system are currently the best ways to understand it.&lt;/p&gt;
&lt;p&gt;The API of the new annotation system is considered unstable. As an example, &lt;code&gt;AnnotationDocument&lt;/code&gt; and &lt;code&gt;AnnotationViewport&lt;/code&gt; have names that no longer match the scope of what they are for, so they might change before stabilizing the API. However, I don’t break apps on a whim. If the API or ABI has to have a breaking change, it will be communicated and there will be a path to prevent KDE apps on the &lt;a target="_blank" href="https://community.kde.org/Schedules"&gt;Gear and Plasma release schedules&lt;/a&gt; from breaking in between their releases.&lt;/p&gt;
&lt;p&gt;Just so it’s clear, even the new image editing system is not supposed to compete with advanced image editing systems like what Krita and GIMP have. The exact scope is not firmly defined, but it’s pretty likely that certain features like layers or a wide variety of brushes will not be implemented.&lt;/p&gt;
&lt;p&gt;I intend to make more posts about the new image editing system and its history within Spectacle in the future.&lt;/p&gt;
&lt;/div&gt;</description><author>Noah Davis</author></item><item><title>Week 10 + Week 11: Subsetting for freetext annotations is merged</title><link>https://ojasmaheshwari.github.io/b/2026/week-10-week-11-subsetting-for-freetext-annotations-is-merged</link><pubDate>Wed, 26 Aug 2026 09:39:55 +0000</pubDate><guid isPermaLink="true">https://ojasmaheshwari.github.io/b/2026/week-10-week-11-subsetting-for-freetext-annotations-is-merged</guid><description>&lt;p&gt;Hello fellow KDE contributors and users!&lt;/p&gt;
&lt;p&gt;The &lt;a target="_blank" href="https://gitlab.freedesktop.org/poppler/poppler/-/merge_requests/2220"&gt;Font Subsetting for FreeText annotations&lt;/a&gt; merge request got merged today and this means Poppler now supports font subsetting for FreeText annotations.&lt;/p&gt;
&lt;p&gt;You can try it out by using Poppler from the &lt;code&gt;master&lt;/code&gt; branch or wait for the next release. You can enable/disable it by passing &lt;code&gt;-DENABLE_HARFBUZZ=ON/OFF&lt;/code&gt; when running CMake although it is enabled by default.&lt;/p&gt;
&lt;p&gt;We worked on the following in the past 2 weeks,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Re-generating the CIDToGIDMap after subsetting.&lt;/li&gt;
&lt;li&gt;Re-generating the width array after subsetting.&lt;/li&gt;
&lt;li&gt;Working on code reviews on the MR.&lt;/li&gt;
&lt;li&gt;Regression testing and fixing bugs.&lt;/li&gt;
&lt;li&gt;Some small architectural code changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What's remaining:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a target="_blank" href="https://gitlab.freedesktop.org/poppler/poppler/-/merge_requests/2316/"&gt;Font Subsetting for Form Fields&lt;/a&gt; merge request is under review and is currently being regression tested for bugs. After this is merged, font subsetting shall be fully supported in Poppler.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Watch out for a demo video/blog showcasing the results after doing font subsetting soon!&lt;/p&gt;
&lt;p&gt;Thank you,&lt;br&gt;
Ojas&lt;/p&gt;</description><author>Ojas Maheshwari</author></item><item><title>Dolphin 26.08, and KIO perf improvements</title><link>https://blogs.kde.org/2026/08/26/dolphin-26.08-and-kio-perf-improvements/</link><pubDate>Wed, 26 Aug 2026 00:00:01 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/26/dolphin-26.08-and-kio-perf-improvements/</guid><description>
&lt;p&gt;Dolphin 26.08 &lt;a target="_blank" href="https://kde.org/announcements/gear/26.08.0/"&gt;has been released&lt;/a&gt;. Here is more of what changed in it, and in the KIO framework underneath it.&lt;/p&gt;
&lt;p&gt;The version of KIO that shipped alongside Dolphin 26.04 was 6.25. The one that ships
alongside 26.08 is 6.29, four framework releases and 294 commits later. A fair part
of this post is about that, because the largest performance change of this cycle is
not in Dolphin at all. If you only read one thing, read
&lt;a target="_blank" href="https://blogs.kde.org/2026/07/28/making-kio-copy-many-files-fast/"&gt;Making KIO copy many files fast&lt;/a&gt;, which is the story behind why copying a
folder of small files in 26.08 takes less than half the time it did in 26.04.&lt;/p&gt;
&lt;h2 id="new-features"&gt;New features&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Grouping is no longer tied to sorting.&lt;/strong&gt; Ramil Nurmanov
&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=416134"&gt;added an explicit group role&lt;/a&gt;, so
grouping by type no longer forces you to sort by type as well. The old
&amp;quot;Show in Groups&amp;quot; toggle is replaced by a &amp;quot;Group By&amp;quot; menu, which lets you turn
grouping off, keep the old &amp;quot;Same as Sort&amp;quot; behaviour, or pick a criterion outright.
Inside each group the normal sort role is still used as a secondary key.
(&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/989c0f4f0319f7d8e573c8a88fe8011bd3315466"&gt;989c0f4f0&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The filter bar tells you what it is doing.&lt;/strong&gt; Alessio Bonfiglio replaced the hidden
auto-detecting regex behaviour with an explicit mode selector offering Plain Text,
Glob and Regular Expression, plus a case-sensitivity toggle. The old behaviour tried
to guess: typing a name containing &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt; or &lt;code&gt;[&lt;/code&gt; silently switched the bar to a
regular expression, which made a file genuinely named &lt;code&gt;[draft].txt&lt;/code&gt; impossible to
filter for. An invalid expression now turns the bar red instead of quietly doing
something else. (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/3084a4e11e54b71065a408c7d288489bc72ea8a2"&gt;3084a4e11&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A &amp;quot;Folder Name&amp;quot; column in the details view&lt;/strong&gt;, by Jussi Räsänen, closing
&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=433937"&gt;a request from 2021&lt;/a&gt;. It is most useful
when a search or an expanded tree puts files from several folders on screen at once.
(&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/4a7be9f25332942b071e7a1659a7aed67236cfb8"&gt;4a7be9f25&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per-folder zoom&lt;/strong&gt;, by Wagner Soares. When you are not using global view properties,
the zoom level is now remembered per folder like the other view properties are.
(&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/0f7a9c681c4f7336362bf8a5d1c41f2bc8ed9215"&gt;0f7a9c681&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;Focus Other View&amp;quot;&lt;/strong&gt;, by Felix Ernst. The &amp;quot;Switch between views with Tab key&amp;quot;
setting is gone, replaced by a real action you can bind to whatever you like. It
moves focus to the inactive split view, and opens a split if there is not one yet.
(&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/12b4a8a91e0b9b8dd00816b5fb84e8e09000afcd"&gt;12b4a8a91&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Close tabs to the left or right&lt;/strong&gt;, by Ramil Nurmanov. (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/91e7c0c1e032b6e3e0558b8048fce6a3b68d297a"&gt;91e7c0c1e&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A button to restore view properties to their defaults&lt;/strong&gt;, which I added for the
per-folder view properties case. It enables and disables itself depending on whether
the current folder already matches the defaults. (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/70f34211cb4ad1f3f6170ded062bafff85d66643"&gt;70f34211c&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Type-ahead feedback in the status bar&lt;/strong&gt;, by Felix Ernst. As you type, the status
bar shows the keys you have typed and which file name they selected, so a type-ahead
that lands somewhere unexpected is no longer silent. (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/1e13c6abb6fc179fa8da32fe62df89560a801b3d"&gt;1e13c6abb&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The terminal panel can be resynchronised with F5&lt;/strong&gt;, by Antti Savolainen, closing
&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=510557"&gt;bug 510557&lt;/a&gt;. When a foreground program
is running in the panel, the terminal and the view can drift apart. Konsole does not
signal when that program exits, so responding to F5 is the practical answer.
(&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/07baa7bb68d3d3c8ed1f564ea42efa80684b3a23"&gt;07baa7bb6&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;KDE Connect integration&lt;/strong&gt;, by Kai Uwe Broulik: an &amp;quot;Open KDE Connect&amp;quot; button when
browsing the &lt;code&gt;kdeconnect&lt;/code&gt; scheme (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/d5903bd810ee0447e6201a1cc36dcf186fc9c37d"&gt;d5903bd81&lt;/a&gt;), and a proper placeholder for a KDE Connect
folder (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/dfef28748e4e9af8aefd969e24689e68698b74a3"&gt;dfef28748&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Session restore for the first instance&lt;/strong&gt;, by Sergey Katunin, closing
&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=464693"&gt;bug 464693&lt;/a&gt;. If Dolphin is not already
running and something launches it with &lt;code&gt;--new-window&lt;/code&gt;, as browsers and Kate do, the
session is restored rather than discarded. (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/173794ce15620aa0c673464f532cfd67f55ab278"&gt;173794ce1&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="behaviour-changes"&gt;Behaviour changes&lt;/h2&gt;
&lt;p&gt;These are the changes most likely to surprise you, so they are worth naming
explicitly.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Create New Folder is now two actions.&lt;/strong&gt; Ctrl+Shift+N and the context menu entry
shared one action, so the menu advertised a shortcut that did something subtly
different: the shortcut creates in the viewed directory, the menu entry in the
folder you clicked. They are separate actions now, and the context menu one has no
default shortcut. (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/705e366aaf6ea76c2583107c708c7bdd6dc4a08a"&gt;705e366aa&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Empty Trash&amp;quot; moved&lt;/strong&gt; in the context menu, by Antti Savolainen, closing
&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=518713"&gt;bug 518713&lt;/a&gt;. It now sits with the
other destructive actions rather than next to harmless ones. The reporter had been
emptying the trash while reaching for something else. (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/7d81e3092a85b77d575d2519d97c578365080e0e"&gt;7d81e3092&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Open Terminal Here&amp;quot; only appears for folders&lt;/strong&gt;, not for files, by Brijesh
krishna. (&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/8a9f7d9d43d38d626dd9b25b966f851b2d78caf6"&gt;8a9f7d9d4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The play arrow over video previews in the Information Panel is gone&lt;/strong&gt;, by Ryan
Nosurname. There is already a play button and a seek bar directly beneath it.
(&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/71f8db089771733d89a9211750a383f48c01d427"&gt;71f8db089&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Icon overlays are drawn at a fixed size&lt;/strong&gt; rather than composited into the
thumbnail and rescaled with it
(&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=498211"&gt;bug 498211&lt;/a&gt;). Emblem size was
previously inconsistent from file to file, because each thumbnail was rescaled by
its own factor, and slightly cropped at fractional display scaling.
(&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/63f21036e7f44a6b6c8505c9cd277aabbf0bf832"&gt;63f21036e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Special folders keep their saved view properties&lt;/strong&gt; even with global view
properties enabled, by Pan Zhang
(&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=520089"&gt;bug 520089&lt;/a&gt;, &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/2e665e1b513b3f7c082bedc8faaf47bee8008c73"&gt;2e665e1b5&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Names like &lt;code&gt;file.2.txt&lt;/code&gt; sort naturally&lt;/strong&gt;, by Pan Zhang
(&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=411707"&gt;bug 411707&lt;/a&gt;, &lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/0d10eff3726e5de60298452308cc4b2b7820e10b"&gt;0d10eff37&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="who-wrote-it"&gt;Who wrote it&lt;/h2&gt;
&lt;p&gt;Counting commits that are new in 26.08 and not already in a 26.04.x release, and
leaving the translation robot out of it:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;commits&lt;/td&gt;
&lt;td&gt;207, of which 97 code changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lines&lt;/td&gt;
&lt;td&gt;3822 added, 772 removed, net +3050&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;contributors&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;first time in Dolphin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;13 of those 22&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;returning&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The busiest by a wide margin:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Contributor&lt;/th&gt;
&lt;th style="text-align: right"&gt;commits&lt;/th&gt;
&lt;th style="text-align: right"&gt;added&lt;/th&gt;
&lt;th style="text-align: right"&gt;removed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sebastian Englbrecht&lt;/td&gt;
&lt;td style="text-align: right"&gt;31&lt;/td&gt;
&lt;td style="text-align: right"&gt;1145&lt;/td&gt;
&lt;td style="text-align: right"&gt;87&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Méven Car&lt;/td&gt;
&lt;td style="text-align: right"&gt;29&lt;/td&gt;
&lt;td style="text-align: right"&gt;706&lt;/td&gt;
&lt;td style="text-align: right"&gt;236&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pan Zhang&lt;/td&gt;
&lt;td style="text-align: right"&gt;6&lt;/td&gt;
&lt;td style="text-align: right"&gt;424&lt;/td&gt;
&lt;td style="text-align: right"&gt;58&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Felix Ernst&lt;/td&gt;
&lt;td style="text-align: right"&gt;5&lt;/td&gt;
&lt;td style="text-align: right"&gt;250&lt;/td&gt;
&lt;td style="text-align: right"&gt;165&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ramil Nurmanov&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;428&lt;/td&gt;
&lt;td style="text-align: right"&gt;54&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alessio Bonfiglio&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;406&lt;/td&gt;
&lt;td style="text-align: right"&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kai Uwe Broulik&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;58&lt;/td&gt;
&lt;td style="text-align: right"&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Akseli Lahtinen&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;49&lt;/td&gt;
&lt;td style="text-align: right"&gt;42&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antti Savolainen&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;37&lt;/td&gt;
&lt;td style="text-align: right"&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filip Fila&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;13&lt;/td&gt;
&lt;td style="text-align: right"&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oleksandr Bondar&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;11&lt;/td&gt;
&lt;td style="text-align: right"&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sergey Katunin&lt;/td&gt;
&lt;td style="text-align: right"&gt;2&lt;/td&gt;
&lt;td style="text-align: right"&gt;11&lt;/td&gt;
&lt;td style="text-align: right"&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Commit counts and line counts do not rank people the same way. Ramil Nurmanov and
Alessio Bonfiglio wrote two commits each and still added more lines than anyone
except the top two, because grouping by a separate criterion and the filter bar modes
each arrived whole. Ryan Nosurname's single commit is the opposite shape: removing the
video preview play arrow takes away 43 lines and adds none.&lt;/p&gt;
&lt;p&gt;Thirteen people landed their first Dolphin commit this cycle: Antti Savolainen, Areeb
Faisal, Brijesh krishna, Evgeniy Harchenko, Filip Fila, Florian RICHER, Jussi Räsänen,
Ketal Wang, Oleksandr Bondar, Ramil Nurmanov, Ryan Nosurname, Sebastian Englbrecht and
Wagner Soares. Kudos to them! Several are long-standing KDE contributors who had simply not touched
this repository before, so read it as new to Dolphin rather than new to KDE.&lt;/p&gt;
&lt;p&gt;The other 110 commits were mainly translation commits. Thank you, translators!&lt;/p&gt;
&lt;h2 id="bugs-fixed"&gt;Bugs fixed&lt;/h2&gt;
&lt;p&gt;Nineteen bugs are fixed in 26.08 that were not already fixed in a 26.04.x point
release. Ten of them are the changes described above, so here are the other nine:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bug&lt;/th&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Who&lt;/th&gt;
&lt;th&gt;Commit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=492298"&gt;492298&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Menubar visibility applied after the UI has loaded&lt;/td&gt;
&lt;td&gt;Oleksandr Bondar&lt;/td&gt;
&lt;td&gt;&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/c3ef613f29dd256e1b6065f1c744241b6f69788a"&gt;&lt;code&gt;c3ef613f&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=506884"&gt;506884&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Inline rename preserved when the item scrolls out of view&lt;/td&gt;
&lt;td&gt;Pan Zhang&lt;/td&gt;
&lt;td&gt;&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/5e35194b00d84db6aea3370ee8bb0ad560428c62"&gt;&lt;code&gt;5e35194b&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=508465"&gt;508465&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Item widgets use style primitives instead of custom painting&lt;/td&gt;
&lt;td&gt;Akseli Lahtinen&lt;/td&gt;
&lt;td&gt;&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/61b6e173f2647e885814f5c11f9861e7bb9144c2"&gt;&lt;code&gt;61b6e173&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=509150"&gt;509150&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Wrong item count in the Size column for folders of 200+ entries&lt;/td&gt;
&lt;td&gt;Pan Zhang&lt;/td&gt;
&lt;td&gt;&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/914cd9010b52125a01e607c0b0f08401be225106"&gt;&lt;code&gt;914cd901&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=510469"&gt;510469&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Animated-height widgets no longer scroll the viewport&lt;/td&gt;
&lt;td&gt;Pan Zhang&lt;/td&gt;
&lt;td&gt;&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/cde91dd71a89d1f82bc87dabe95643cc93853e50"&gt;&lt;code&gt;cde91dd7&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=514401"&gt;514401&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Re-triggering an inline rename made robust&lt;/td&gt;
&lt;td&gt;Méven Car&lt;/td&gt;
&lt;td&gt;&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/7ca6daea69a38c006a001bb423b9398b639d027f"&gt;&lt;code&gt;7ca6daea&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=515236"&gt;515236&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No spurious history entry when leaving search results&lt;/td&gt;
&lt;td&gt;Pan Zhang&lt;/td&gt;
&lt;td&gt;&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/35b309aa3efac59b12e0c6bfc127516649f8cfa2"&gt;&lt;code&gt;35b309aa&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=518285"&gt;518285&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Non-Breeze styles may style the non-toolbar navigation bar&lt;/td&gt;
&lt;td&gt;Filip Fila&lt;/td&gt;
&lt;td&gt;&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/76f6eb07739290bd7e7a61946f51d7329fb75545"&gt;&lt;code&gt;76f6eb07&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523348"&gt;523348&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Delete action shown in selection mode in the trash&lt;/td&gt;
&lt;td&gt;Méven Car&lt;/td&gt;
&lt;td&gt;&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/d392e6b5fae18d78233344fe9d01931fc404b045"&gt;&lt;code&gt;d392e6b5&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="two-regressions-worth-knowing-about"&gt;Two regressions worth knowing about&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Icons could be missing entirely.&lt;/strong&gt; On a freshly opened view every item drew a blank where
its icon should be, and it stayed that way until the view mode was switched or the zoom
slider moved (&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523228"&gt;bug 523228&lt;/a&gt;). A regression from
&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/0f7a9c681"&gt;per-folder zoom&lt;/a&gt;, fixed in
&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/9c652faca"&gt;&lt;code&gt;9c652faca&lt;/code&gt;&lt;/a&gt;. That fix brought one
of its own, turning previews off in icons view rendering at 16 pixels rather than the 32 that
mode is set to (&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524606"&gt;bug 524606&lt;/a&gt;), fixed in
&lt;a target="_blank" href="https://invent.kde.org/system/dolphin/-/commit/57c6b10e1"&gt;&lt;code&gt;57c6b10e1&lt;/code&gt;&lt;/a&gt;. Both are on the
&lt;code&gt;release/26.08&lt;/code&gt; branch and ship in &lt;strong&gt;Dolphin 26.08.1&lt;/strong&gt;, due in the first half of September
2026.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Service submenus disappeared from the context menu.&lt;/strong&gt; Entries that a service menu file
groups into a submenu were missing from the context menu, in any application that builds one
with &lt;code&gt;KFileItemActions&lt;/code&gt;, Dolphin included (&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524239"&gt;bug
524239&lt;/a&gt;). A regression from
&lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/148b9253d"&gt;&lt;code&gt;148b9253d&lt;/code&gt;&lt;/a&gt; in 6.29, fixed by
Luis Bocanegra in
&lt;a target="_blank" href="https://invent.kde.org/frameworks/kio/-/commit/774defb94"&gt;&lt;code&gt;774defb94&lt;/code&gt;&lt;/a&gt;, which ships in &lt;strong&gt;KDE
Frameworks 6.30&lt;/strong&gt;, due in the first week of September 2026.&lt;/p&gt;
&lt;p&gt;Neither was found by a test, and both have one now: &lt;code&gt;dolphinitemlistviewtest&lt;/code&gt;, which is new,
and three cases in &lt;code&gt;dolphinviewtest&lt;/code&gt; for the per-folder cache, and
&lt;code&gt;testServiceMenuSubmenuActions&lt;/code&gt; with a &lt;code&gt;submenu.desktop&lt;/code&gt; fixture in KIO.&lt;/p&gt;
&lt;h2 id="closing"&gt;Closing&lt;/h2&gt;
&lt;p&gt;If you want to help, the leak and lifetime work above is a good way in, and so is
picking a bug from the list. The KIO copy path still has more in it than 6.29 ships:
the batching that closes most of the remaining gap to &lt;code&gt;cp&lt;/code&gt; is written and measured in
&lt;a target="_blank" href="https://blogs.kde.org/2026/07/28/making-kio-copy-many-files-fast/"&gt;Making KIO copy many files fast&lt;/a&gt; but not yet finished.&lt;/p&gt;
&lt;p&gt;That's all, folks.&lt;/p&gt;</description><author>Méven Car</author></item><item><title>What’s Happening In KDE Remote Desktop – Improved Unattended Mode and More</title><link>http://blog.davidedmundson.co.uk/blog/whats-happening-in-kde-remote-desktop-improved-unattended-mode-and-more/</link><pubDate>Tue, 25 Aug 2026 06:29:21 +0000</pubDate><guid isPermaLink="true">https://blog.davidedmundson.co.uk/?p=617</guid><description>&lt;p&gt;Remote desktop has been one of the weaker areas of the transition to Wayland. There's a lot of software written exclusively for X that has a direct Wayland equivalent. Within KDE, we already have a Plasma-native RDP and VNC solution for Wayland, but we're aware that it hasn't yet reached the level we want it to.&lt;/p&gt;
&lt;p&gt;Throughout the path to Plasma 6.8 it has been an area of focus, with contributions from me, Shouvik Kar, Nick Haghiri, Oliver Beard and Wensheng Tang.&lt;/p&gt;
&lt;h2&gt;Improved Unattended mode&lt;/h2&gt;
&lt;p&gt;There are a few different use cases for remote desktop:&lt;/p&gt;
&lt;h3&gt;Support Mode&lt;/h3&gt;
&lt;p&gt;&lt;img decoding="async" src="https://blog.davidedmundson.co.uk/wp-content/uploads/2026/08/shared-e1787640161243-1024x351.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;This is the typical remote session. You see exactly the same thing on the remote client as on the host, with the contents matching the size of the monitors on the host machine.&lt;/p&gt;
&lt;p&gt;This is great when there's someone at the host machine and someone else remoting in, and you want to work together while both seeing the same content.&lt;/p&gt;
&lt;h3&gt;Unattended mode&lt;/h3&gt;
&lt;p&gt;&lt;img decoding="async" src="https://blog.davidedmundson.co.uk/wp-content/uploads/2026/08/unattended-e1787640182543-1024x327.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The above mode isn't so great when there's just you. If I'm connecting to my home PC from a tiny laptop, it's very unergonomic to have the remote screen be larger than my laptop display and have to scroll around it.&lt;/p&gt;
&lt;p&gt;Additionally if my remote PC is in an office, I don't want my colleagues to see my cursor moving around clicking on windows when I'm not there.&lt;/p&gt;
&lt;p&gt;We have a new UX that solves all of these issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On connection, the remote machine shows the login screen.&lt;/li&gt;
&lt;li&gt;For the sesssion you log into, the host machine's screens are removed, ensuring privacy and security.&lt;/li&gt;
&lt;li&gt;The remote screens are resized to match the size and layout of the client's screen setup.&lt;/li&gt;
&lt;li&gt;When streaming in a window, the remote screen dynamically resizes to match the window size.&lt;/li&gt;
&lt;li&gt;Best of all, after the remote session is closed and the user logs back into the host machine, all their windows return to where they were last positioned on the host setup.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The underlying work also sets us up nicely for the full headless case.&lt;/p&gt;
&lt;h2&gt;Clipboard&lt;/h2&gt;
&lt;p&gt;Clipboard support has been massively improved with bi-directional text snippets and upcoming work for file transfers, including support in KRDC.&lt;/p&gt;
&lt;h2&gt;Performance&lt;/h2&gt;
&lt;p&gt;We've been cutting down latency throughout the system. A new timing mechanism tracks every frame throughout the entire process, letting us see where delays build up, from receiving the raw frame and encoding it, through transmission over the network, to rendering on the client and finally receiving the acknowledgement.&lt;/p&gt;
&lt;p&gt;We now coalesce frames that are still waiting to be sent to the client. A new algorithm determines the optimal number of frames to keep in flight, while improved backpressure handling keeps latency lower during network dropouts.&lt;/p&gt;
&lt;p&gt;There's also work happening to send multiple streams or even areas of the same desktop at once.&lt;/p&gt;
&lt;figure id="attachment_620" aria-describedby="caption-attachment-620" style="width: 660px" class="wp-caption aligncenter"&gt;&lt;img decoding="async" loading="lazy" src="https://blog.davidedmundson.co.uk/wp-content/uploads/2026/08/graph-1024x579.png" alt="" width="660" height="373" class="size-large wp-image-620" srcset="http://blog.davidedmundson.co.uk/wp-content/uploads/2026/08/graph-1024x579.png 1024w, http://blog.davidedmundson.co.uk/wp-content/uploads/2026/08/graph-300x170.png 300w, http://blog.davidedmundson.co.uk/wp-content/uploads/2026/08/graph-768x434.png 768w, http://blog.davidedmundson.co.uk/wp-content/uploads/2026/08/graph-1536x868.png 1536w, http://blog.davidedmundson.co.uk/wp-content/uploads/2026/08/graph.png 1892w" sizes="(max-width: 660px) 100vw, 660px" /&gt;&lt;figcaption id="caption-attachment-620" class="wp-caption-text"&gt;A graph taken midway through optimising&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;KRDC will also benefit from improved performance in 26.12 as an extra source of latency compared to the xfreerdp3's model performance has been addressed.&lt;/p&gt;
&lt;h2&gt;Better compatibility&lt;/h2&gt;
&lt;p&gt;One of the core reasons we have an RDP server is that there's a huge range of existing clients out there. That only helps if we actually support those clients, which isn't trivial given how much variation there is between them.&lt;/p&gt;
&lt;p&gt;We now support both RemoteFX Progressive encoding as well as full hardware accelerated H264 encoding with improved fallback for when H264 encoding fails. We also fixed NLA authentication for Windows clients.&lt;/p&gt;
&lt;h2&gt;libei port&lt;/h2&gt;
&lt;p&gt;Another large refactor is the port to libei: a library/protocol for sending emulated input to the compositor that's a lot more fleshed-out than the basic 'move mouse' 'send keysym' that existed directly in the XDG Portal specification. libei is far more robust: it can support any number of devices at once and provides the infrastructure for us to also support remote tablet and touch. &lt;/p&gt;
&lt;p&gt;We also have massively improved support throughout the stack for sending any keysym that isn't in the current keymap. i.e even if the host keyboard is set to US, you can still input on the remote side characters like ẞ, to even fully composed UTF-8 strings like &amp;quot;안녕 &lt;img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f44b.png" alt="👋" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt;&amp;quot;.&lt;/p&gt;
&lt;h2&gt;What's next&lt;/h2&gt;
&lt;h3&gt;Multi-user headless&lt;/h3&gt;
&lt;p&gt;Whilst I am confident that we will have a great single-user story in time for Plasma 6.8 even for truly headless setups, it is unlikely we will deliver a remote server that handles multiple concurrent users at this time. It is &lt;a target="_blank" href="https://www.suse.com/c/headless-remote-sessions-in-gnome-part-2/" title="far from trivial"&gt;far from trivial&lt;/a&gt;, and feature freeze for Plasma 6.8 is upon us.&lt;/p&gt;
&lt;h3&gt;Standardisation&lt;/h3&gt;
&lt;p&gt;Ultimately, it's frustrating that we're in a situation where we have to maintain this entire service at the KDE level, when much of it should be a solved and shared problem.&lt;/p&gt;
&lt;p&gt;Having our own implementation has been useful to work out how to provide tight integration with Plasma, but there are many competing remote-desktop services that should be able to benefit from the same underlying infrastructure.&lt;/p&gt;
&lt;p&gt;Others feel the same way, and there is some effort to start standardising the work for headless setups. I hope to have more news on that front shortly.&lt;/p&gt;
&lt;h2&gt;Call to action&lt;/h2&gt;
&lt;p&gt;As this remains a critical path for X11 holdouts, we need people to test and contribute. If you can, please run master builds and report any bugs you find. The final merge-requests for the parts mentioned above should be landing soon. Bug reports help; patches even more so!&lt;/p&gt;</description><author>David Edmundson</author></item><item><title>Redesigning Lokalize's Translation Memory Tab - GSoC Week 9</title><link>https://blogs.kde.org/2026/08/25/week9-gsoc-blog/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/25/week9-gsoc-blog/</guid><description>&lt;p&gt;After working on the UI of TM Tab in Lokalize during the first phase of GSoC, I got back to work on the backend. Currently, only a single TM can be searched in TM Tab. My changes enable querying across multiple selected TMs as per translators' feature request.&lt;/p&gt;
&lt;p&gt;A little about threads and mutexes before I share week-wise updates. The GUI runs on the main thread, while TM operations (querying, opening/closing databases, removing files) run as jobs on a separate worker thread pool, &lt;code&gt;TM::threadPool()&lt;/code&gt;. This pool is explicitly capped to a single worker thread at startup- &lt;code&gt;setMaxThreadCount(1)&lt;/code&gt;. This means TM jobs never actually run concurrently with each other, they queue and execute strictly one at a time (this can be changed given my new changes but will have to be careful).&lt;/p&gt;
&lt;p&gt;QSqlDatabase connections can only be used on the thread that created them, which is why each job looks up or clones a connection specific to the current thread before querying.&lt;/p&gt;
&lt;p&gt;A queued connection is what lets a signal emitted on the worker thread safely invoke a slot on the GUI thread: rather than running the slot's code immediately on the emitting thread.&lt;/p&gt;
&lt;p&gt;A mutex protects shared or concurrently-accessed data.&lt;/p&gt;
&lt;h2 id="week-7"&gt;Week 7&lt;/h2&gt;
&lt;p&gt;I spent week 7 exploring other approaches for quering multiple DBs and merging the results. &lt;a target="_blank" href="https://doc.qt.io/qt-6/qsqlquerymodel.html#details"&gt;QSqlQueryModel&lt;/a&gt; is only useful to get query results from a single db. It just enabled &lt;code&gt;std::move(*job-&amp;gt;query)&lt;/code&gt; and there was no way to append results from other TMs.&lt;/p&gt;
&lt;p&gt;I felt that my proposed approach, to fire N ExecQueryJobs, merge them in an in-memory SQLite db, and then pass it on to the view, was making things unnecessarily complex and somewhat redundant. I'm sharing the discarded ideas as well in case it helps someone in the future.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;a target="_blank" href="https://stackoverflow.com/questions/6824717/sqlite-how-do-you-join-tables-from-different-databases"&gt;ATTACH&lt;/a&gt; to add other db(s) and perform UNION on the search query. There were some concerns over the complexity of ATTACH and also Lokalize supports remote TMs (PostgreSQL) which doesn't have the provision of ATTACH.&lt;/li&gt;
&lt;li&gt;Then, I looked into &lt;code&gt;QConcatenateTablesProxyModel&lt;/code&gt; which some KDE apps already use, but there is some bug with its working with &lt;code&gt;QSortFilterProxyModel&lt;/code&gt;. I could have had &amp;quot;N TMDBModel instances&amp;quot; (which doesn't seem like a good idea) for each TM and later join them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="week-8"&gt;Week 8&lt;/h2&gt;
&lt;p&gt;I decided upon &lt;code&gt;QAbstractTableModel&lt;/code&gt;. Unlike &lt;code&gt;QSqlQueryModel&lt;/code&gt; (which is a subclass of it), it's more flexible and I had to refactor some of the code. This also meant lazy fetch couldn't be preserved and the results would be stored in &lt;code&gt;QSqlRecords&lt;/code&gt; (to preserve all the existing usage on results).&lt;/p&gt;
&lt;p&gt;Manually tested against a single TM. Rewrote the TMJob Test too. I find it strange that we always write a test for it to pass. Also from one of the &lt;a target="_blank" href="https://medium.com/@mlntdrv/about-them-automated-tests-d4300a59e870"&gt;articles&lt;/a&gt; I read: &amp;quot;Use test driven development. When you write the test just before the production code, you would never write a monster test, would you?&amp;quot;&lt;/p&gt;
&lt;h2 id="week-9"&gt;Week 9&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;setFilter()&lt;/code&gt; is modified such that &lt;code&gt;ExecQueryJob&lt;/code&gt; is fired for each TM. &lt;code&gt;slotQueryExecuted()&lt;/code&gt; accumulates each job's rows into the model as they arrive, and only fires &lt;code&gt;resultsFetched()&lt;/code&gt; once every selected TM's job has reported back. Row count is also reported directly at the end.&lt;/p&gt;
&lt;p&gt;Well, contrary to what I wrote in the last blog, I did end up with an approach quite similar to what TMView does. Are mentors always right?&lt;/p&gt;
&lt;p&gt;The part on which I spent a lot of time was what happens if someone retypes their query, or checks/unchecks a TM, while the previous search's jobs are still mid-flight. Stale results shouldn't be allowed to land on top of a newer search's rows. The fix is a generation counter to keep track.&lt;/p&gt;
&lt;p&gt;After a lot of coding and debugging, seeing the resuts from multiple TMs made the entire hard work finally pay off.&lt;/p&gt;
&lt;p&gt;While testing, the bug mentioned in the previous blog kept pestering me so I fixed it too. I was so fixated on empty/short string that I did not think that the place it was being used could be a problem. It's nice to see the Art of Debugging materialize out of pages of Roger S. Pressman's &lt;a target="_blank" href="https://books.google.co.in/books/about/Software_Engineering.html?id=5fiKo3qfiKYC"&gt;textbook&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'll begin to work on TM View once these changes are reviewed and merged.&lt;/p&gt;</description><author>Navya Sai Sadu</author></item><item><title>Sovereign Tech Fellowship for Freedesktop Tasks</title><link>https://blog.tenstral.net/2026/08/sovereign-tech-fellowship-for-freedesktop-tasks.html</link><pubDate>Mon, 24 Aug 2026 21:00:40 +0000</pubDate><guid isPermaLink="true">https://blog.tenstral.net/?p=2107</guid><description>&lt;p class="wp-block-paragraph"&gt;In 2025 I was honored to be selected for the first cohort of &lt;a target="_blank" href="https://www.sovereign.tech/programs/fellowship"&gt;Sovereign Tech Fellows&lt;/a&gt;, a program by Germany&amp;#8217;s &lt;a target="_blank" href="https://www.sovereign.tech/"&gt;Sovereign Tech Agency&lt;/a&gt; to improve the resilience of the open source ecosystem by supporting maintainers directly (complementing their existing support for larger FOSS organizations). Back in 2025, I was only working very limited hours &amp;#8211; however, this has changed in 2026.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;For the second half of 2026, I am working again as a Sovereign Tech Fellow, but this time with significantly increased hours. After finishing my PhD, I do have time now for new tasks (and new jobs!), and the fellowship presents an amazing opportunity to really advance projects that I maintain or am part of. This also has a very nice effect on contributors and bug reporters, as their feedback gets addressed a lot faster. With some luck, this ultimately will help finding new (co)maintainers for projects as well (although in the age of AI, a lot of how open source used to work is much more uncertain, but that is a matter for a different blog post).&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;The fellowship is time-limited, so I am intending to make the time I currently have count!&lt;/p&gt;
&lt;h2 class="wp-block-heading"&gt;So, what&amp;#8217;s planned?&lt;/h2&gt;
&lt;p class="wp-block-paragraph"&gt;I am involved in many projects, but three of them will be getting attention as part of the fellowship. I know I am notoriously slow at blogging, but expect more details on each of them very soon. Here&amp;#8217;s an overview:&lt;/p&gt;
&lt;h3 class="wp-block-heading"&gt;Freedesktop.org, Specifications and Organization&lt;/h3&gt;
&lt;p class="wp-block-paragraph"&gt;I maintain the &lt;a target="_blank" href="https://specifications.freedesktop.org/"&gt;Freedesktop Specifications&lt;/a&gt;, which is an area of Freedesktop that has traditionally been a bit chaotic. This &amp;#8220;worked&amp;#8221; in the past, because Freedesktop was never intended to be a formal standards body, but more a shared space where people could throw a lot of code and ideas over the wall and see what sticks and what people can collaborate on.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;While I very much love the spirit of this and want to keep it in some form, we definitely would benefit not just from more formalization and better procedures, but also from better organization of the specifications in general. A lot of conflicts can be avoided by that. I will work on improving procedures, crunching through the (lots!) of pending bug reports and MRs, and to make the specifications site better searchable and accessible (similar to how Mozilla&amp;#8217;s MDN presents information, but I am not sure if we will get quite that far). I also intent to add a compatibility matrix for specifications, so if a desktop opts out of any one of them (or does not implement them yet) that fact is documented and authors of applications know what they can expect. This will allow us to move a lot faster and avoid a lot of conflict, because there is no implicit assumption that &amp;#8220;everybody will implement everything&amp;#8221; anymore (which has never been quite true anyway).&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Hopefully, this will ultimately result in a Freedesktop that is both a lot more useful for application authors who want to bring their project to Linux, as well as developers of desktop environments who need to see which specifications are available and which ones are current.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;In addition to that, I have also worked on a Freedesktop.org website refresh, which is pretty much done in its first iteration (pending sysadmin action). The aim there is to have a more official website, separate from user-contributed wiki content, that showcases what Freedesktop is and which projects are using it for hosting. Once the new website is live, I will also review every page again, archive dead projects in their own section and reorganize the software and specifications directory. Those sections are severely outdated and are missing recent efforts from the community, while still containing long-dead old projects (remember &lt;a target="_blank" href="https://en.wikipedia.org/wiki/HAL_(software)"&gt;HAL&lt;/a&gt;? &lt;img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt;).&lt;/p&gt;
&lt;h3 class="wp-block-heading"&gt;AppStream&lt;/h3&gt;
&lt;p class="wp-block-paragraph"&gt;A lot of extra maintenance work will be (has been!) done on it. This includes things such as JPEG-XL support (blog post soon), sandboxed media processing, support for newer specification additions, better OARS integration (and potentially migrating it to fd.o infrastructure), improvements and API stabilization for &lt;em&gt;libappstream-compose&lt;/em&gt; and a lot of bugfixing and resolution of issues found by AI code review.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;a target="_blank" href="https://github.com/ximion/appstream"&gt;AppStream&lt;/a&gt; was originally designed to parse only trusted data from vetted Linux distribution sources &amp;#8211; this is no longer the case in today&amp;#8217;s world and in the way Flatpak uses it, so we need to increase resilience of the project.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;I am also exploring a project that could vastly improve search accuracy for AppStream. Stay tuned for that.&lt;/p&gt;
&lt;h3 class="wp-block-heading"&gt;PackageKit &amp;amp; System Upgrades&lt;/h3&gt;
&lt;p class="wp-block-paragraph"&gt;Many years ago, people thought we would all migrate to atomic Linux distributions and slowly not need &lt;a target="_blank" href="https://github.com/PackageKit/PackageKit"&gt;PackageKit&lt;/a&gt; anymore. This has not turned out to be the case, and there are still plenty of reasons to use a package-based OS, especially in development environments. At the same time, PackageKit has been basically the same for years, and its older architecture is beginning to show. It being a daemon who&amp;#8217;s literal job it is to modify the entire system also makes it one of the most security-sensitive components that a Linux system can have, while simultaneously making it near-impossible to sandbox.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;My plan is to create PackageKit 2.0 by building on the great foundation of PackageKit 1.0, but modernizing it. This will include simplifying its code and removing a bunch of features that have no more use in modern desktops, while also adding some features that PackageKit never had but that would be useful to expose to frontends (still no to interactivity an terminal-progress forwarding though!). PK 2.0 will also allow me to solve a few design issues that have been worked around in the past, by replacing them with better solutions. This will be a painful transition, as PackageKit 2.0 will break all interfaces PackageKit has &amp;#8211; and those interfaces have been frozen for more than a decade. However, I do fully expect this change to be worth the effort.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;In addition to that, I intend to look into the offline-update procedure again and improve it. The current multi-reboot operation comes with downsides, that newer systemd features such as soft-reboot can alleviate. The end result should be a much smoother, less annoying offline-update experience for users (I especially want to get rid of updates running on system startup, which I consider quite bad from a usability perspective). The new behavior is in the early drafting stages and may need direct support from systemd. I will share more about it once I can.&lt;/p&gt;
&lt;h2 class="wp-block-heading"&gt;That&amp;#8217;s a lot of tasks!&lt;/h2&gt;
&lt;p class="wp-block-paragraph"&gt;Yes! I will see how far I get. I am moving project-by-project though, to allow me to focus on one project at a time, rather than scattering my attention continuously. Amazingly, this means that the major tasks for AppStream are already almost done, and we are nearing the 1.2.0 release. AppStream got priority, because the new Freedesktop Flatpak runtime will be released soon, and because I want FlatHub/Flatpak to have access to the new AppStream release sooner. Freedesktop and PackageKit are next on the task list.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;Either way, a lot of progress is coming &amp;#8211; if you have any feedback or want to help out, please don&amp;#8217;t hesitate to reach out! All work is happening fully in the open, so you can also chime in on the respective GitHub/GitLab tasks &lt;img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt;.&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;You can also expect blog posts about key features or interesting changes, so stay tuned! &lt;img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;
&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;</description><author>Matthias Klumpp</author></item><item><title>Tellico 4.2.2 Released</title><link>https://tellico-project.org/tellico-4-2-2-released/</link><pubDate>Sat, 22 Aug 2026 01:29:13 +0000</pubDate><guid isPermaLink="true">https://tellico-project.org/?p=527</guid><description>&lt;p&gt;Tellico 4.2.2 &lt;a href="//tellico-project.org/download"&gt;is available&lt;/a&gt;, with some improvements and bug fixes.&lt;br /&gt;
&lt;span id="more-527"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Improvements:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Updated to automatically add default file extension (.tc) to save files with no extension.&lt;/li&gt;
&lt;li&gt;Removed gradient image files for entry templates, in favor of data URLs.&lt;l/i&gt;
&lt;li&gt;Added option to disable ISBN validation in entry editor (&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=514622"&gt;Bug 514622&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Improved ISBN formatting for all country regions (path from Alex Oio).&lt;/li&gt;
&lt;li&gt;Updated ISBN validation to apply to multiple values (&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=521157"&gt;Bug 521157&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Updated &lt;a target="_blank" href="https://upcitemdb.com"&gt;UPCItemDb&lt;/a&gt; to accept multiple search values.&lt;/li&gt;
&lt;li&gt;Improved caching of entry images for the icon view.&lt;/li&gt;
&lt;li&gt;Improved &lt;em&gt;Title&lt;/em&gt; search for &lt;a target="_blank" href="https://arxiv.org/"&gt;arXiv&lt;/a&gt; and &lt;a target="_blank" href="https://openlibrary.org/"&gt;OpenLibrary&lt;/a&gt; sources.&lt;/li&gt;
&lt;li&gt;Improved entry updating from iTunes source.&lt;/li&gt;
&lt;li&gt;Added drag-and-drop text importing for RIS.&lt;/li&gt;
&lt;li&gt;Removed defunct DVDFr data source.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Bug Fixes:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fixed crashing bug when exporting HTML for entries with no title (&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523140"&gt;Bug 523140&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fixed bug with updating UI after checking-in entries.&lt;/li&gt;
&lt;li&gt;Fixed bug with updating UI for updating entries (&lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=522673"&gt;Bug 522673&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;</description><author>Tellico Blog</author></item><item><title>This Week in Plasma: UI and Performance Improvements</title><link>https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/</link><pubDate>Sat, 22 Aug 2026 00:00:01 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/</guid><description>&lt;!-- Example wording for a change, MR version. (Developer Name, [repo-name MR #xxx](https://invent.kde.org/plasma/repo-name/-/merge_requests/xxx)) --&gt;
&lt;!-- Example wording for a change, Bugzilla version. (Developer Name, [KDE Bugzilla #xxx](https://bugs.kde.org/show_bug.cgi?id=xxx)) --&gt;
&lt;!-- ![](thumbnail.png) --&gt;
&lt;!--
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
--&gt;
&lt;!--
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="%25!s%28%3cnil%3e%29something.mp4" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
--&gt;
&lt;p&gt;Welcome to a new issue of &lt;em&gt;This Week in Plasma!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This week was heavy on improvements for both the user interface and also performance, helping Plasma 6.8 to shape up quite nicely:&lt;/p&gt;
&lt;h2 id="notable-new-features"&gt;Notable new features&lt;/h2&gt;
&lt;!-- Can find some with https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Feature&amp;first_page_size=20 --&gt;
&lt;h3 id="plasma-68"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;When using the system in a language other than English, you can now search for and find System Settings pages using keywords in English as well as the current language. (Sergey Katunin, &lt;a target="_blank" href="https://invent.kde.org/plasma/systemsettings/-/merge_requests/418"&gt;systemsettings MR #418&lt;/a&gt;)&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Search for “mouse” and it finds “souris” (“mouse” in French)" src="https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/search-for-mouse-find-souris.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;p&gt;You can now disable entries on System Settings’ Autostart page without having to fully delete them. (Ramil Nurmanov, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6951"&gt;plasma-workspace MR #6951&lt;/a&gt;)&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Disable-able autostart entries" src="https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/disable-able-autostart-entries.webp"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;h2 id="notable-ui-improvements"&gt;Notable UI improvements&lt;/h2&gt;
&lt;!-- Can find some with https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Enhancement&amp;first_page_size=20 --&gt;
&lt;h3 id="plasma-68-1"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;You can now select on the lock screen which authentication type you want to use when multiple types are available, and each one gets a nicer UI. This is an experimental change that just landed, and there’s no GUI yet to set up all the authentication types. We’re working on documenting it, for a start! (Harald Sitter, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3689"&gt;plasma-desktop MR #3689&lt;/a&gt;, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6542"&gt;plasma-workspace MR #6542&lt;/a&gt;, and &lt;a target="_blank" href="https://invent.kde.org/plasma/kscreenlocker/-/merge_requests/318"&gt;kscreenlocker MR #318&lt;/a&gt;)&lt;/p&gt;
&lt;figure&gt;
&lt;img class="img-fluid" alt="Selectable authentication methods on the lock screen" src="https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/selectable-authentication-methods-on-the-lock-screen.png"
style="max-width: 100%; height: auto"
/&gt;
&lt;/figure&gt;
&lt;p&gt;You can no longer set the resolution to a value so low that you’ll probably break your system and be unable to recover without the intervention of an expert. (Xaver Hugl, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9765"&gt;kwin MR #9765&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Improved the alignment of the buttons on the lock screen, which is especially visible in some languages. (Ramil Nurmanov, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3951"&gt;plasma-dsktop MR #3951&lt;/a&gt;)&lt;/p&gt;
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;div class="swiper-slide swiper-slide-active"&gt;
&lt;img src="https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/lock-screen-new.png" alt="New" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;New&lt;/span&gt;
&lt;/div&gt;
&lt;div class="swiper-slide"&gt;
&lt;img src="https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/lock-screen-old.png" alt="Old" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;Old&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;p&gt;Discover now remembers which reviews you’ve rated as useful or useless and doesn’t let you submit new ratings for them later, because the reviews server doesn’t support this, and it would emit an ugly error code in response to you trying. (Taras Oleksyn, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=521866"&gt;KDE Bugzilla #521866&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Auto-hide panels now hide themselves only 50 milliseconds after the pointer leaves them — reduced from the previous value of 500 milliseconds. This makes them feel much more responsive. (Seb Jo, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6885"&gt;plasma-workspace MR #6885&lt;/a&gt;)&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/more-responsive-panel-auto-hide.webm" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;p&gt;The automatic brightness feature now adjusts in a smarter way to any manual brightness changes you make, so the system does a better job of learning your screen brightness preferences in various lighting conditions over time. (Matt Whitlock, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9237"&gt;kwin MR #9237&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;When an Audio Volume widget is placed on a panel in standalone form, its popup now starts out large enough to accommodate everything in it without scrolling. (Nate Graham, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=522654"&gt;KDE Bugzilla #522654&lt;/a&gt;)&lt;/p&gt;
&lt;section class="swiper d-flex mb-5" aria-label="Screenshots" role="list"&gt;
&lt;div class="swiper-wrapper d-flex my-3" role="listitem"&gt;
&lt;div class="swiper-slide swiper-slide-active"&gt;
&lt;img src="https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/audio-volume-popup-new.png" alt="New" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;New&lt;/span&gt;
&lt;/div&gt;
&lt;div class="swiper-slide"&gt;
&lt;img src="https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/audio-volume-popup-old.png" alt="Old" lazy class="rounded"&gt;
&lt;span class="d-block text-center mt-2"&gt;Old&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="swiper-pagination" style="bottom: 0"&gt;&lt;/div&gt;
&lt;div class="swiper-button-prev"&gt;&lt;/div&gt;
&lt;div class="swiper-button-next"&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;p&gt;Improved the way error messages from the audio subsystem are communicated to the user while using the microphone tester feature. (Nate Graham, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-pa/-/merge_requests/419"&gt;plasma-pa MR #419&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Implemented highlighting for non-default settings on System Settings’ Remote Desktop page. (Tobias Ozór, &lt;a target="_blank" href="https://invent.kde.org/plasma/krdp/-/merge_requests/232"&gt;krdp MR #232&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Cursor feedback effects now dodge screen edges, so they are always fully visible. (Oliver Beard, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=498068"&gt;KDE Bugzilla #498068&lt;/a&gt;)&lt;/p&gt;
&lt;figure class="text-center ratio ratio-16x9" style=""&gt;
&lt;video controls&gt;&lt;source src="https://blogs.kde.org/2026/08/22/this-week-in-plasma-ui-and-performance-improvements/bouncy-feedback-remaining-on-screen.webm" type="video/mp4" /&gt;&lt;/video&gt;&lt;/figure&gt;
&lt;p&gt;KWin’s notifications about GPU resets now trigger for all GPUs, not just the primary one. (Xaver Hugl, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9768"&gt;kwin MR #9768&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Improved the Breeze styling for GTK 4 apps’ menus and window borders. (Rocket Aaron, &lt;a target="_blank" href="https://invent.kde.org/plasma/breeze-gtk/-/merge_requests/104"&gt;breeze-gtk MR #104&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="notable-bug-fixes"&gt;Notable bug fixes&lt;/h2&gt;
&lt;!--
Can find some with:
- HI and VHI bugs fixed: https://tinyurl.com/bdepnh4v
- All bugs fixed: https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&amp;state=merged&amp;label_name%5B%5D=Bugfix&amp;first_page_size=20
--&gt;
&lt;h3 id="plasma-667"&gt;Plasma 6.6.7&lt;/h3&gt;
&lt;p&gt;Fixed multiple issues relating to Discover failing to terminate all of its processes after quitting, which would lead to it being unable to launch properly later. (Aleix Pol Gonzalez, &lt;a target="_blank" href="https://invent.kde.org/plasma/discover/-/merge_requests/1393"&gt;discover MR #1393&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed multiple issues relating to System Settings not switching its sub-category sidebar view when expected during various less-common modes of interaction. (Mradul Pal, &lt;a target="_blank" href="https://invent.kde.org/plasma/systemsettings/-/merge_requests/415"&gt;systemsettings MR #415&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The Digital Clock widget’s tooltip no longer lets really long text overflow; instead it expands to make room. (Luis Bocanegra, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6950"&gt;plasma-workspace MR #6950&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The Weather Widget no longer shows info buttons for alerts that do nothing when clicked; now they only appear if they’ll do something. (Nate Graham, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=519676"&gt;KDE Bugzilla #519676&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-675"&gt;Plasma 6.7.5&lt;/h3&gt;
&lt;p&gt;Fixed multiple cases where the “KDE daemon” background process could crash while reading to or writing from the system’s password storage system when network conditions changed in various ways. (Mickaël Thomas, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-nm/-/merge_requests/624"&gt;plasma-nm MR #624&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed an issue where Task Manager window thumbnails could sometimes go missing. (Vlad Zahorodnii, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3959"&gt;plasma-desktop MR #3959&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The Calendar widget no longer oddly changes the date it’s showing when dragged from one screen to another. (Antti Savolainen, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=472360"&gt;KDE Bugzilla #472360&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="plasma-68-2"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;Screen readers can now read all of the UI elements on the Activities sidebar. (Nate Graham, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=519306"&gt;KDE Bugzilla #519306&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Using the clipboard’s “Keep the selection and clipboard the same” setting no longer breaks the ability to copy multi-cell data between sheets of a spreadsheet in LibreOffice Calc. (Tomáš Hnyk, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=505209"&gt;KDE Bugzilla #505209&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;When a remote desktop connection is unexpectedly severed, the System Tray icon notifying you about it now disappears as expected, instead of sticking around until the system is restarted. (Nick Haghiri, &lt;a target="_blank" href="https://invent.kde.org/plasma/krdp/-/merge_requests/234"&gt;krdp MR #234&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fixed two issues where the Audio Volume widget would show the wrong panel icon under some unusual conditions. (Seth Morris, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-pa/-/merge_requests/422"&gt;plasma-pa MR #422&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="frameworks-630"&gt;Frameworks 6.30&lt;/h3&gt;
&lt;p&gt;The “Do you really want to permanently delete this item?” dialog for items on the desktop no longer percent-encodes special characters in file names, because it looked ugly. (Nate Graham, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=522470"&gt;KDE Bugzilla #522470&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="notable-in-performance--technical"&gt;Notable in performance &amp;amp; technical&lt;/h2&gt;
&lt;h3 id="plasma-68-3"&gt;Plasma 6.8&lt;/h3&gt;
&lt;p&gt;Discover’s background notifier process now uses much less memory when it checks for updates. (Méven Car, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=509180"&gt;KDE Bugzilla #509180&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Improved Plasma’s startup speed a bit by doing less unnecessary work when loading wallpapers. (Nicolas Fella, &lt;a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6898"&gt;plasma-workspace MR #6898&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Further improved the speed and efficiency of KWin’s “take a screenshot” functionality. (Zhora Zmeykin, &lt;a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9756"&gt;kwin MR #9756&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Improved the smoothness of screen recordings made on high-refresh-rate screens. (Fililip, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=524129"&gt;KDE Bugzilla #524129&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The microphone tester feature now records audio at the system’s current sample rate rather than forcing a 44.1kHz sample rate, which could have ramifications elsewhere on the system if you’re doing audio production. (Dan Fi, &lt;a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=523693"&gt;KDE Bugzilla #523693&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="frameworks-630-1"&gt;Frameworks 6.30&lt;/h3&gt;
&lt;p&gt;Improved the way SVG images are cached, which slightly increases speed and reduces video memory usage. (Méven Car, &lt;a target="_blank" href="https://invent.kde.org/frameworks/ksvg/-/merge_requests/115"&gt;ksvg MR #115&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="how-you-can-help"&gt;How you can help&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Would you like to help put together this weekly report? Introduce yourself in &lt;a target="_blank" href="https://matrix.to/#/%23this-week-kde-apps:kde.org"&gt;the Matrix room&lt;/a&gt; and &lt;a target="_blank" href="https://community.kde.org/Promotion/This_week_in_KDE"&gt;join the team&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Beyond that, you can help KDE by directly &lt;a target="_blank" href="https://community.kde.org/Get_Involved"&gt;getting involved&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;You can also help out by &lt;a target="_blank" href="https://kde.org/donate"&gt;making a donation&lt;/a&gt;! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.&lt;/p&gt;
&lt;h2 id="to-get-a-new-plasma-feature-or-a-bug-fix-mentioned-here"&gt;To get a new Plasma feature or a bug fix mentioned here&lt;/h2&gt;
&lt;p&gt;Push a commit to &lt;a target="_blank" href="https://invent.kde.org/websites/blogs-kde-org/-/merge_requests/?label_name%5B%5D=This%20Week%20in%20Plasma"&gt;the relevant merge request on invent.kde.org&lt;/a&gt;.&lt;/p&gt;</description><author>Nate Graham</author></item><item><title>GSoC 2026: Building Join.Kde.Org</title><link>https://blogs.kde.org/2026/08/22/gsoc-2026-building-join.kde.org/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://blogs.kde.org/2026/08/22/gsoc-2026-building-join.kde.org/</guid><description>&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;Helloooooo,&lt;br&gt;
it’s me again, Ansh! , the mentee who has been working on the Join.kde.org&lt;br&gt;
This is the final update within the official timeline of GSoC 2026 for my project: &lt;strong&gt;Building Join.KDE.org&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A quick summary:&lt;br&gt;
Over the past 12 weeks, I have worked on creating, designing and implementing the join.kde site into a platform that can answer most of the basic questions a new contributor has. In this post, I’ll mainly focus on the progress from Week 6 to Week 12 along with my final thoughts.&lt;/p&gt;
&lt;p&gt;For a short summary, checkout this &lt;a target="_blank" href="https://community.kde.org/GSoC/2026/StatusReports/Ansh_Singhal"&gt;status report&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-6-contributesuggest"&gt;Week 6: Contribute/suggest&lt;/h3&gt;
&lt;p&gt;This week I worked on the ADD section which got renamed to contribute,
it includes several sub sections which allows people to contribute based on their interests.&lt;/p&gt;
&lt;p&gt;Routed the explore section to KDE.org for you section so people can explore and find their own use for KDE softwares.&lt;/p&gt;
&lt;p&gt;Created the suggest section which contains the information on how to report bugs/request for features.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-7-navbar"&gt;Week 7: Navbar&lt;/h3&gt;
&lt;p&gt;This week was more about improvements on the navbar, I noticed with all the text the nav-bar looked way too cluttered, and simply overwhelming
so with the advice from Anish and how he changed the navbar for the mentorship website, I worked up something similar and made dropdowns for the navbar so it can still have more content when clicked.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-8-work-on-projects"&gt;Week 8: Work on Projects&lt;/h3&gt;
&lt;p&gt;For this week I worked on the work on projects section which allows people to find groups of projects in invent based on skillset or the programming languages one knows.&lt;/p&gt;
&lt;p&gt;I added all the groups available in KDE invent in this section which little tags of skillset.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-9-incubate-projects"&gt;Week 9: Incubate projects&lt;/h3&gt;
&lt;p&gt;Worked on designing Incubate projects section: which basically explains what kind of projects fit in KDE and what are the benifits of it.
Linked it through a call-to-action button to the relevant resources to incubate project into KDE.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-10-read-page-suggest-page-improvement"&gt;Week 10: read page/ suggest page improvement&lt;/h3&gt;
&lt;p&gt;Designed the read page with 3 main blog sites&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;planet&lt;/li&gt;
&lt;li&gt;contributor blogs&lt;/li&gt;
&lt;li&gt;mentorship blogs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This week was something new, the cards for the read page were simple but the new design of dropdown in suggest page took some time figuring out.
added konqi images to the cards because duh it's konqi (but hey we can change them eventually).&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-11-divulge-page"&gt;Week 11: Divulge Page&lt;/h3&gt;
&lt;p&gt;Created the Divulge page which is more for people who want to create content for kde whether it be promo material, tutorials or whether help in promotion itself.&lt;/p&gt;
&lt;p&gt;It's kind of a copy of the read page but it can always be changed.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-12-events-page"&gt;Week 12: Events Page&lt;/h3&gt;
&lt;p&gt;Created the Events page, which included akademy as the main event and then a section for event's KDE hosts which had some sprints and conf.in
and then added the section for the events KDE participates in which will likely be expanded eventually.&lt;/p&gt;
&lt;p&gt;Fixed some tiny typos and dead link issues.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="related-merge-requests"&gt;Related Merge Requests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/12"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/13"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/14"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/15"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/16"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/17"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/18"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/18&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="my-own-development"&gt;My Own Development&lt;/h2&gt;
&lt;p&gt;I learned a lot from this project, both in coding and beyond. Here are the things I remember right now, though the list could go longer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Now I am very comfortable with &lt;strong&gt;Hugo&lt;/strong&gt;, semantic maps, and YAML files&lt;/li&gt;
&lt;li&gt;Finally learned how to deal with &lt;strong&gt;SVGs&lt;/strong&gt; (was my first time working with them)&lt;/li&gt;
&lt;li&gt;My &lt;strong&gt;frontend skills improved&lt;/strong&gt;, I think I can design better pages now&lt;/li&gt;
&lt;li&gt;I now want to create more stuff that helps people!&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Overall, GSoC 2026 has been a great experience for me. Over these 12 weeks I got the chance to work on issues that i faced myself and fix them in a way that helps everyone joining KDE.&lt;/p&gt;
&lt;p&gt;Along the way I learned some technical skills, learned how to work across different timezones, to communicate better, and most importantly realized that long discussions are often more necessary than jumping straight into implementation, especially in open source communities.&lt;/p&gt;
&lt;p&gt;Big thanks to my mentors Anish and umm Conulting mentor Paul&lt;/p&gt;
&lt;p&gt;This wraps up my GSoC journey, but I will be sticking around KDE and plan to explore other projects, especially in the mentorship side of things. See you around in the community.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="how-to-reach-me"&gt;How to Reach Me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;KDE GitLab: &lt;a target="_blank" href="https://invent.kde.org/anshs-lab"&gt;@anshs-lab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Matrix: &lt;a target="_blank" href="https://matrix.to/#/@anshs-lab:matrix.org"&gt;@anshs-lab:matrix.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Email: &lt;a href="mailto:anshsinghal1907@gmail.com"&gt;anshsinghal1907@gmail.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Ansh Singhal</author></item></channel></rss>