<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://gohugo.io/" version="0.150.0">Hugo -- gohugo.io</generator><title>Planet KDE | English</title><link href="https://planet.kde.org/" rel="alternate" type="text/html" title="html"/><link href="https://planet.kde.org/index.xml" rel="alternate" type="application/rss+xml" title="rss"/><link href="https://planet.kde.org/atom.xml" rel="self" type="application/atom+xml" title="atom"/><link href="https://planet.kde.org/index.jsn" rel="alternate" type="application/json" title="json"/><link href="https://planet.kde.org/es/" rel="alternate" type="text/html" hreflang="es" title="[Español] html"/><link href="https://planet.kde.org/es/index.xml" rel="alternate" type="application/rss+xml" hreflang="es" title="[Español] rss"/><link href="https://planet.kde.org/es/atom.xml" rel="alternate" type="application/atom+xml" hreflang="es" title="[Español] atom"/><link href="https://planet.kde.org/es/index.jsn" rel="alternate" type="application/json" hreflang="es" title="[Español] json"/><link href="https://planet.kde.org/tr/" rel="alternate" type="text/html" hreflang="tr" title="[Türkçe] html"/><link href="https://planet.kde.org/tr/index.xml" rel="alternate" type="application/rss+xml" hreflang="tr" title="[Türkçe] rss"/><link href="https://planet.kde.org/tr/atom.xml" rel="alternate" type="application/atom+xml" hreflang="tr" title="[Türkçe] atom"/><link href="https://planet.kde.org/tr/index.jsn" rel="alternate" type="application/json" hreflang="tr" title="[Türkçe] json"/><link href="https://planet.kde.org/ca/" rel="alternate" type="text/html" hreflang="ca" title="[Català] html"/><link href="https://planet.kde.org/ca/index.xml" rel="alternate" type="application/rss+xml" hreflang="ca" title="[Català] rss"/><link href="https://planet.kde.org/ca/atom.xml" rel="alternate" type="application/atom+xml" hreflang="ca" title="[Català] atom"/><link href="https://planet.kde.org/ca/index.jsn" rel="alternate" type="application/json" hreflang="ca" title="[Català] json"/><link href="https://planet.kde.org/de/" rel="alternate" type="text/html" hreflang="de" title="[Deutsch] html"/><link href="https://planet.kde.org/de/index.xml" rel="alternate" type="application/rss+xml" hreflang="de" title="[Deutsch] rss"/><link href="https://planet.kde.org/de/atom.xml" rel="alternate" type="application/atom+xml" hreflang="de" title="[Deutsch] atom"/><link href="https://planet.kde.org/de/index.jsn" rel="alternate" type="application/json" hreflang="de" title="[Deutsch] json"/><link href="https://planet.kde.org/eu/" rel="alternate" type="text/html" hreflang="eu" title="[Euskara] html"/><link href="https://planet.kde.org/eu/index.xml" rel="alternate" type="application/rss+xml" hreflang="eu" title="[Euskara] rss"/><link href="https://planet.kde.org/eu/atom.xml" rel="alternate" type="application/atom+xml" hreflang="eu" title="[Euskara] atom"/><link href="https://planet.kde.org/eu/index.jsn" rel="alternate" type="application/json" hreflang="eu" title="[Euskara] json"/><link href="https://planet.kde.org/fr/" rel="alternate" type="text/html" hreflang="fr" title="[Français] html"/><link href="https://planet.kde.org/fr/index.xml" rel="alternate" type="application/rss+xml" hreflang="fr" title="[Français] rss"/><link href="https://planet.kde.org/fr/atom.xml" rel="alternate" type="application/atom+xml" hreflang="fr" title="[Français] atom"/><link href="https://planet.kde.org/fr/index.jsn" rel="alternate" type="application/json" hreflang="fr" title="[Français] json"/><link href="https://planet.kde.org/it/" rel="alternate" type="text/html" hreflang="it" title="[Italiano] html"/><link href="https://planet.kde.org/it/index.xml" rel="alternate" type="application/rss+xml" hreflang="it" title="[Italiano] rss"/><link href="https://planet.kde.org/it/atom.xml" rel="alternate" type="application/atom+xml" hreflang="it" title="[Italiano] atom"/><link href="https://planet.kde.org/it/index.jsn" rel="alternate" type="application/json" hreflang="it" title="[Italiano] json"/><link href="https://planet.kde.org/nl/" rel="alternate" type="text/html" hreflang="nl" title="[Nederlands] html"/><link href="https://planet.kde.org/nl/index.xml" rel="alternate" type="application/rss+xml" hreflang="nl" title="[Nederlands] rss"/><link href="https://planet.kde.org/nl/atom.xml" rel="alternate" type="application/atom+xml" hreflang="nl" title="[Nederlands] atom"/><link href="https://planet.kde.org/nl/index.jsn" rel="alternate" type="application/json" hreflang="nl" title="[Nederlands] json"/><link href="https://planet.kde.org/pt-pt/" rel="alternate" type="text/html" hreflang="pt-pt" title="[Português] html"/><link href="https://planet.kde.org/pt-pt/index.xml" rel="alternate" type="application/rss+xml" hreflang="pt-pt" title="[Português] rss"/><link href="https://planet.kde.org/pt-pt/atom.xml" rel="alternate" type="application/atom+xml" hreflang="pt-pt" title="[Português] atom"/><link href="https://planet.kde.org/pt-pt/index.jsn" rel="alternate" type="application/json" hreflang="pt-pt" title="[Português] json"/><link href="https://planet.kde.org/sv/" rel="alternate" type="text/html" hreflang="sv" title="[Svenska] html"/><link href="https://planet.kde.org/sv/index.xml" rel="alternate" type="application/rss+xml" hreflang="sv" title="[Svenska] rss"/><link href="https://planet.kde.org/sv/atom.xml" rel="alternate" type="application/atom+xml" hreflang="sv" title="[Svenska] atom"/><link href="https://planet.kde.org/sv/index.jsn" rel="alternate" type="application/json" hreflang="sv" title="[Svenska] json"/><link href="https://planet.kde.org/sk/" rel="alternate" type="text/html" hreflang="sk" title="[Slovenčina] html"/><link href="https://planet.kde.org/sk/index.xml" rel="alternate" type="application/rss+xml" hreflang="sk" title="[Slovenčina] rss"/><link href="https://planet.kde.org/sk/atom.xml" rel="alternate" type="application/atom+xml" hreflang="sk" title="[Slovenčina] atom"/><link href="https://planet.kde.org/sk/index.jsn" rel="alternate" type="application/json" hreflang="sk" title="[Slovenčina] json"/><link href="https://planet.kde.org/ru/" rel="alternate" type="text/html" hreflang="ru" title="[Русский] html"/><link href="https://planet.kde.org/ru/index.xml" rel="alternate" type="application/rss+xml" hreflang="ru" title="[Русский] rss"/><link href="https://planet.kde.org/ru/atom.xml" rel="alternate" type="application/atom+xml" hreflang="ru" title="[Русский] atom"/><link href="https://planet.kde.org/ru/index.jsn" rel="alternate" type="application/json" hreflang="ru" title="[Русский] json"/><link href="https://planet.kde.org/uk/" rel="alternate" type="text/html" hreflang="uk" title="[Українська] html"/><link href="https://planet.kde.org/uk/index.xml" rel="alternate" type="application/rss+xml" hreflang="uk" title="[Українська] rss"/><link href="https://planet.kde.org/uk/atom.xml" rel="alternate" type="application/atom+xml" hreflang="uk" title="[Українська] atom"/><link href="https://planet.kde.org/uk/index.jsn" rel="alternate" type="application/json" hreflang="uk" title="[Українська] json"/><link href="https://planet.kde.org/ja/" rel="alternate" type="text/html" hreflang="ja" title="[日本語] html"/><link href="https://planet.kde.org/ja/index.xml" rel="alternate" type="application/rss+xml" hreflang="ja" title="[日本語] rss"/><link href="https://planet.kde.org/ja/atom.xml" rel="alternate" type="application/atom+xml" hreflang="ja" title="[日本語] atom"/><link href="https://planet.kde.org/ja/index.jsn" rel="alternate" type="application/json" hreflang="ja" title="[日本語] json"/><updated>2026-04-12T14:12:00+00:00</updated><icon>https://planet.kde.org/img/planet.png</icon><logo>https://planet.kde.org/img/planet.png</logo><id>https://planet.kde.org/</id><entry><title type="html">A week in Graz: KDE MegaSprint and Grazer Linuxtage</title><link href="https://tsdgeos.blogspot.com/2026/04/a-week-in-graz-kde-megasprint-and.html?utm_source=atom_feed" rel="alternate" type="text/html"/><id>tag:blogger.com,1999:blog-7523589.post-827732025224711026</id><author><name>Albert Astals Cid</name><uri>https://tsdgeos.blogspot.com/</uri></author><published>2026-04-12T14:12:00+00:00</published><updated>2026-04-12T14:12:06+00:00</updated><content type="html"><![CDATA[<p>I spent this week in <a target="_blank" href="https://en.wikipedia.org/wiki/Graz" target="_blank">Graz</a>, the weekdays as part of the <a target="_blank" href="https://community.kde.org/Sprints/MegaSprint/2026" target="_blank">KDE Mega Sprint 2026</a>&nbsp;and Saturday attending <a target="_blank" href="https://www.linuxtage.at/en/">Grazer Linuxtage 2026</a>.</p><p>Before arriving in Graz I already did some work on the train from Vienna. I published a new version of <a target="_blank" href="https://userbase.kde.org/Kio_gopher">kio-gopher</a>&nbsp;so KDE Frameworks 6 applications can browse gopher sites and helped finish the review of <a target="_blank" href="https://apps.kde.org/kdominate/">KDominate</a>, Albert Vaca's latest tactical game.</p><p>At the Sprint itself many things were achieved, too many to remember.&nbsp;</p><p>There was some discussion about improving release notes so they go into the appstream files and end up in lots of interesting places (apps.kde.org, Discover, etc).</p><p>I also talked a bit with David Edmundson on how to streamline our work in the KDE Security team.</p><p>Another important thing was that we introduced a way to help us enable the <a target="_blank" href="https://clang.llvm.org/docs/LeakSanitizer.html">LeakSanitizer</a> in more repositories (by ignoring leaks that are not our fault and that we can't control)&nbsp;</p><p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a target="_blank" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE7leNIuWUWJS9vIxQ8dzSU4s6rfh_IQ5vtc6T3GjeUmgemYX8TnDLrc9Rhqkghb5OisHJ86HB7CmOprx0tiIyic3leCoeIVFdrC2_buPw6nby4de4GAaaNuC_csHp6v_eLv04vSV4Pc0VXcJiIID4YcSh6SKYB5zpUPqWscagnv01G4zqQhol/s1156/lgt.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1156" data-original-width="868" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE7leNIuWUWJS9vIxQ8dzSU4s6rfh_IQ5vtc6T3GjeUmgemYX8TnDLrc9Rhqkghb5OisHJ86HB7CmOprx0tiIyic3leCoeIVFdrC2_buPw6nby4de4GAaaNuC_csHp6v_eLv04vSV4Pc0VXcJiIID4YcSh6SKYB5zpUPqWscagnv01G4zqQhol/w480-h640/lgt.png" width="480" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Non-planned group photo of Sprint attendees, a few are missing. Apologies!</td></tr></tbody></table><br />&nbsp;</p><p>While we were at the Sprint it was announced that we will have <a target="_blank" href="https://akademy.kde.org/2026/">Akademy 2026</a> also in Graz. So start preparing to visit Austria in late September!&nbsp;</p><p><br /></p><p>Grazer Linuxtage was very nice, as far as I've heard also very successful in attendance, with the estimate being around 50% more than the previous year (hard to calculate when you don't require registration).</p><p>There were not many talks in English but the ones I attended were interesting. If you have time I would recommend giving them a quick skim to see if they interest you.</p><p><a target="_blank" href="https://media.ccc.de/v/glt26-679-transitous-free-and-open-public-transport-routing">Transitous - Free and Open Public transport routing</a>&nbsp; (from KDE's own Volker Krause)</p><p><a target="_blank" href="https://media.ccc.de/v/glt26-615-what-can-we-learn-from-android-for-other-embedded-linux-systems-security">What can we learn from Android for other embedded Linux systems security?</a>&nbsp;(Every app in Android is a different Linux user)</p><p><a target="_blank" href="https://media.ccc.de/v/glt26-625-libreoffice-what-we-re-doing-where-we-re-going-and-how-you-can-help">LibreOffice: What we're doing, where we're going, and how you can help</a>&nbsp;(Very fashionable given the&nbsp;latest&nbsp;rifts in the community (sadly))</p><p><a target="_blank" href="https://media.ccc.de/v/glt26-718-how-we-hacked-the-bavarian-state-with-an-open-source-open-letter">How we hacked the Bavarian State with an Open Source Open Letter</a>&nbsp;(About how to pressure administrations not to give Microsoft all of our tax money)</p><p>I gave a talk about KDE and the 30 years of the Linux desktop, that from the reaction of the attendees I think it was well received, that's always nice :)&nbsp;</p><p>The video from my talk is available at <a target="_blank" href="https://media.ccc.de/v/glt26-691-kde-30-years-of-the-linux-desktop">https://media.ccc.de/v/glt26-691-kde-30-years-of-the-linux-desktop</a>&nbsp;</p><p>Thanks everyone involved in the organization and Kevin Krammer in particular for hosting us!&nbsp;</p>]]></content></entry><entry><title type="html">Analyzing KDE Project Health With git!</title><link href="https://pointieststick.com/2026/04/10/analyzing-kde-project-health-with-git/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>http://pointieststick.com/?p=28033</id><author><name>Nate Graham</name><uri>https://pointieststick.com</uri></author><published>2026-04-10T20:24:08+00:00</published><updated>2026-04-10T20:24:08+00:00</updated><content type="html"><![CDATA[<p class="wp-block-paragraph">I was reading <a target="_blank" href="https://ervin.ipsquad.net/blog/2026/04/10/web-review-week-2026-15/">the latest edition of Kevin Ottens&#8217; excellent weekly web review</a> and one particular article caught my eye: &#8220;<a target="_blank" href="https://piechowski.io/post/git-commands-before-reading-code/">The Git Commands I Run Before Reading Any Code</a>&#8220;. In a nutshell, you can use the <code>git</code> version control tool to quickly assess a project&#8217;s health, what breaks, who&#8217;s a key figure, how bad emergencies are, and so on.</p>



<p class="wp-block-paragraph">So useful!</p>



<p class="wp-block-paragraph">I immediately wanted to apply this to KDE projects. So I took the  commands from the post and made some shell aliases and functions for convenience:</p>


<div class="wp-block-code">
	<div class="cm-editor">
		<div class="cm-scroller">
			
<pre>
<code><div class="cm-line"># git repo analysis tools</div><div class="cm-line">alias what-changes=&quot;echo &apos;What changes a lot?&apos; &amp;&amp; git log --format=format: --name-only --since=&apos;1 year ago&apos; | rg -v &apos;po$|json$|desktop$&apos; | sort | uniq -c | sort -nr | head -20&quot;</div><div class="cm-line"></div><div class="cm-line">alias what-breaks=&quot;echo &apos;What breaks a lot?&apos; &amp;&amp; git log -i -E --grep=&apos;fix|bug|broke|bad|wrong|incorrect|problem&apos; --name-only --format=&apos;&apos; | sort | uniq -c | sort -nr | head -20&quot;</div><div class="cm-line"></div><div class="cm-line">alias emergencies=&quot;echo &apos;And what were the emergencies?&apos; &amp;&amp; git log --oneline --since=&apos;1 year ago&apos; | grep -iE &apos;revert|hotfix|emergency|urgent|rollback&apos;&quot;</div><div class="cm-line"></div><div class="cm-line">alias momentum=&quot;echo \&quot;What&apos;s the project&apos;s momentum over the past 5 years?\&quot; &amp;&amp; git log --format=&apos;%ad&apos; --date=format:&apos;%Y-%m&apos; | sort | uniq -c | tail -n 60&quot;</div><div class="cm-line"></div><div class="cm-line">alias maintainers-recently=&quot;echo \&quot;Who&apos;s been driving this project in the past year?\&quot; &amp;&amp; git shortlog -sn --no-merges --since=&apos;1 year ago&apos; | rg -v &apos;l10n daemon script&apos; | head -n 30&quot;</div><div class="cm-line"></div><div class="cm-line">alias maintainers-alltime=&quot;echo &apos;And what about for all time?&apos; &amp;&amp; git shortlog -sn --no-merges | rg -v &apos;l10n daemon script&apos; | head -n 30&quot;</div><div class="cm-line"></div><div class="cm-line">function repo-analysis &#123;</div><div class="cm-line">    what-changes</div><div class="cm-line">    echo</div><div class="cm-line">    what-breaks</div><div class="cm-line">    echo</div><div class="cm-line">    emergencies</div><div class="cm-line">    echo</div><div class="cm-line">    momentum</div><div class="cm-line">    echo</div><div class="cm-line">    maintainers-recently</div><div class="cm-line">    echo</div><div class="cm-line">    maintainers-alltime</div><div class="cm-line">}</div></code></pre>
		</div>
	</div>
</div>


<p class="wp-block-paragraph">Now let&#8217;s run it on Plasma. Here&#8217;s <code>plasma-workspace</code>, the core of Plasma:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">$ git clone ssh://git@invent.kde.org/plasma/plasma-workspace.git<br>$ cd plasma-workspace <br>$ repo-analysis<br>What changes a lot?<br>  1519  <br>    38 CMakeLists.txt<br>    29 shell/shellcorona.cpp<br>    24 runners/services/servicerunner.cpp<br>    21 wallpapers/image/imagepackage/contents/ui/config.qml<br>    19 libnotificationmanager/notifications.cpp<br>    18 shell/org.kde.plasmashell.desktop.cmake<br>    18 devicenotifications/devicenotifications.cpp<br>    17 kcms/lookandfeel/kcm.cpp<br>    16 wallpapers/image/plugin/model/packagelistmodel.cpp<br>    16 kcms/cursortheme/xcursor/xcursor.knsrc<br>    15 wallpapers/image/plugin/model/imagelistmodel.cpp<br>    15 applets/notifications/global/Globals.qml<br>    15 applets/devicenotifier/devicecontrol.cpp<br>    14 wallpapers/image/plugin/imagebackend.cpp<br>    14 shell/panelview.cpp<br>    14 .kde-ci.yml<br>    14 applets/systemtray/systemtray.cpp<br>    13 runners/services/autotests/servicerunnertest.cpp<br>    12 krunner/qml/RunCommand.qml<br><br>What breaks a lot?<br>   225 shell/shellcorona.cpp<br>   183 shell/panelview.cpp<br>    83 CMakeLists.txt<br>    74 applets/systemtray/package/contents/ui/main.qml<br>    71 applets/digital-clock/package/contents/ui/DigitalClock.qml<br>    63 klipper/klipper.cpp<br>    62 applets/notifications/package/contents/ui/NotificationItem.qml<br>    58 wallpapers/image/imagepackage/contents/ui/config.qml<br>    56 shell/desktopview.cpp<br>    56 libtaskmanager/tasksmodel.cpp<br>    54 shell/main.cpp<br>    54 applets/systemtray/systemtray.cpp<br>    53 shell/shellcorona.h<br>    52 krunner/view.cpp<br>    48 applets/digital-clock/package/contents/ui/CalendarView.qml<br>    47 runners/services/servicerunner.cpp<br>    46 wallpapers/image/imagepackage/contents/ui/main.qml<br>    45 applets/notifications/package/contents/ui/NotificationPopup.qml<br>    44 applets/systemtray/package/contents/ui/ExpandedRepresentation.qml<br>    43 startkde/startplasma.cpp<br><br>And what were the emergencies?<br>4f526a7bd1 <strong>Revert</strong> &#8220;applets/systemtray: Prevent popups from overlapping with the panel&#8221;<br>dca5788fee lookandfeel/components: <strong>Revert</strong> Plasma::setupPlasmaStyle<br>2c0fd34541 <strong>Revert</strong> &#8220;ContainmentLayoutManager: send recursive mouse release events too&#8221;<br>b6b230f4ff <strong>Revert</strong> &#8220;Read selenium-webdriver-at-spi-run location from CMake&#8221;<br>b8651b56f6 <strong>hotfix</strong>: Remove doc translations without actual doc<br>1f43f576e8 <strong>Revert</strong> &#8220;Add forceImageAnimation property to force animated image play&#8221;<br>f0349b6c81 <strong>hotfix</strong>: remove stray .po file<br>3ff7ae4269 <strong>Revert</strong> &#8220;CI: enable parallel testing&#8221;<br>83bebc7896 <strong>Revert</strong> &#8220;Limit evaluateScript execution at 2 seconds&#8221;<br>4f45f672be <strong>Revert</strong> &#8220;kcms/componentchooser: Don&#8217;t offer NoDisplay services&#8221;<br>3bf0ff8f56 <strong>Revert</strong> &#8220;Disable linux-qt6-next while the regression in Qt gets fixed&#8221;<br>80996f0633 <strong>Revert</strong> &#8220;kcms/wallpaper: set roleNames for WallpaperConfigModel&#8221;<br><br>What&#8217;s the project&#8217;s momentum over the past 5 years?<br>   148 2021-05<br>    87 2021-06<br>    62 2021-07<br>    85 2021-08<br>   121 2021-09<br>   106 2021-10<br>   146 2021-11<br>   190 2021-12<br>   191 2022-01<br>    84 2022-02<br>   168 2022-03<br>   130 2022-04<br>   146 2022-05<br>   141 2022-06<br>   136 2022-07<br>   107 2022-08<br>   232 2022-09<br>   234 2022-10<br>   181 2022-11<br>   150 2022-12<br>   154 2023-01<br>   161 2023-02<br>   156 2023-03<br>   156 2023-04<br>   163 2023-05<br>   137 2023-06<br>   186 2023-07<br>   190 2023-08<br>   275 2023-09<br>   226 2023-10<br>   283 2023-11<br>   157 2023-12<br>   131 2024-01<br>   147 2024-02<br>   249 2024-03<br>   180 2024-04<br>   188 2024-05<br>   158 2024-06<br>   128 2024-07<br>   146 2024-08<br>   169 2024-09<br>   156 2024-10<br>   116 2024-11<br>    98 2024-12<br>   145 2025-01<br>   126 2025-02<br>   120 2025-03<br>   116 2025-04<br>   131 2025-05<br>   131 2025-06<br>   132 2025-07<br>   115 2025-08<br>   110 2025-09<br>    97 2025-10<br>   147 2025-11<br>   114 2025-12<br>   140 2026-01<br>   131 2026-02<br>   119 2026-03<br>    44 2026-04<br><br>Who&#8217;s been driving this project in the past year?<br>  116  Vlad Zahorodnii<br>  113  Nicolas Fella<br>   87  Christoph Wolk<br>   82  Fushan Wen<br>   78  Nate Graham<br>   66  Kai Uwe Broulik<br>   48  Bohdan Onofriichuk<br>   37  Harald Sitter<br>   34  Tobias Fella<br>   31  Marco Martin<br>   30  David Edmundson<br>   25  Akseli Lahtinen<br>   21  Ismael Asensio<br>   17  David Redondo<br>   16  Niccolò Venerandi<br>   15  Bhushan Shah<br>   11  Alexander Lohnau<br>   11  Kristen McWilliam<br>    9  Oliver Beard<br>    9  Shubham Arora<br>    8  Alexey Rochev<br>    8  Han Young<br>    8  Philipp Kiemle<br>    7  Albert Astals Cid<br>    6  Aleix Pol<br>    6  Méven Car<br>    5  Devin Lin<br>    5  Joshua Goins<br>    4  Alexander Wilms<br>    4  Arjen Hiemstra<br><br>And what about for all time?<br> 1543  Fushan Wen<br> 1497  Marco Martin<br> 1374  Kai Uwe Broulik<br> 1030  David Edmundson<br>  772  Nate Graham<br>  658  Alexander Lohnau<br>  551  Aleix Pol<br>  548  Nicolas Fella<br>  438  ivan tkachenko<br>  385  Eike Hein<br>  264  Sebastian Kügler<br>  250  Martin Gräßlin<br>  238  Harald Sitter<br>  232  Martin Klapetek<br>  223  Jonathan Riddell<br>  207  Vlad Zahorodnii<br>  194  David Redondo<br>  190  Friedrich W. H. Kossebau<br>  189  Laurent Montel<br>  144  Bhushan Shah<br>  134  Christoph Wolk<br>  134  Ismael Asensio<br>  126  Lukáš Tinkl<br>  121  Niccolò Venerandi<br>  117  Méven Car<br>  105  Natalie Clarius<br>   91  Konrad Materka<br>   80  Vishesh Handa<br>   80  Volker Krause<br>   79  Ivan Čukić<br></p>
</blockquote>



<p class="wp-block-paragraph"><code>ShellCorona</code> both changing and breaking a lot is no great surprise to me; it&#8217;s fiddly and complicated. We need to do something about that. The number of emergencies doesn&#8217;t look too bad, and momentum feels fine too. The project also appears to have a nice healthy diversity of contributors. Excellent!</p>



<p class="wp-block-paragraph">It&#8217;s been quite illuminating to run these tools on KDE projects that I&#8217;m both more and less familiar with. Give it a try!</p>]]></content></entry><entry><title type="html">Web Review, Week 2026-15</title><link href="https://ervin.ipsquad.net/blog/2026/04/10/web-review-week-2026-15/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://ervin.ipsquad.net/blog/2026/04/10/web-review-week-2026-15/</id><author><name>Kevin Ottens</name><uri>https://ervin.ipsquad.net/</uri></author><published>2026-04-10T10:43:03+00:00</published><updated>2026-04-10T10:43:03+00:00</updated><content type="html"><![CDATA[<p>Let&rsquo;s go for my web review for the week 2026-15.</p>
<hr>
<h4 id="france-launches-government-linux-desktop-plan-as-windows-exit-begins">France Launches Government Linux Desktop Plan as Windows Exit Begins</h4>
<p><em>Tags: tech, foss, politics, desktop, france, europe</em></p>
<p>Well, what can I say? This is excellent news and I&rsquo;m excited to see it happen. Let&rsquo;s hope more governments do the same. It&rsquo;ll take a while of course, so we&rsquo;ll have to be patient.</p>
<p><a target="_blank" href="https://linuxiac.com/france-launches-government-linux-desktop-plan-as-windows-exit-begins/">https://linuxiac.com/france-launches-government-linux-desktop-plan-as-windows-exit-begins/</a></p>
<br/>
<h4 id="the-free-market-lie-why-switzerland-has-25-gbit-internet-and-america-doesnt">The Free Market Lie: Why Switzerland Has 25 Gbit Internet and America Doesn&rsquo;t</h4>
<p><em>Tags: tech, infrastructure, economics</em></p>
<p>A good explanation and illustration of how natural monopolies work. This is why you want to regulate infrastructure properly.</p>
<p><a target="_blank" href="https://sschueller.github.io/posts/the-free-market-lie/">https://sschueller.github.io/posts/the-free-market-lie/</a></p>
<br/>
<h4 id="you-can-absolutely-have-an-rss-dependent-website-in-2026">You can absolutely have an RSS dependent website in 2026</h4>
<p><em>Tags: tech, blog, rss</em></p>
<p>The stats are clear there. Beside in term of experience, RSS feeds are so superior to newsletters&hellip; I wish more bloggers would give up on the newsletter focus. There&rsquo;s also a good point in this post: as soon as you have a newsletter you will sit on a database of email addresses, it&rsquo;s definitely a liability.</p>
<p><a target="_blank" href="https://matduggan.com/you-can-absolutely-have-an-rss-dependent-website-in-2026/">https://matduggan.com/you-can-absolutely-have-an-rss-dependent-website-in-2026/</a></p>
<br/>
<h4 id="the-downfall-and-enshittification-of-microsoft-in-2026">The Downfall and Enshittification of Microsoft in 2026</h4>
<p><em>Tags: tech, microsoft, github, apple, linux, business, product-management</em></p>
<p>Indeed, the giant managed to make itself weak. This means opportunities for other ecosystems to grow faster than before.</p>
<p><a target="_blank" href="https://caio.ca/blog/the-downfall-and-enshittification-of-microsoft.html">https://caio.ca/blog/the-downfall-and-enshittification-of-microsoft.html</a></p>
<br/>
<h4 id="lets-talk-about-llms">Let’s talk about LLMs</h4>
<p><em>Tags: tech, ai, machine-learning, copilot, productivity, craftsmanship</em></p>
<p>Long but very precise piece about why you can likely ignore LLM for development purpose. Starting from older Fred Brooks work is spot on. Indeed whatever will remain of LLM based tools in the years to come, it&rsquo;s much smarter to focus on fundamental skills than chase the new tools. At least, I&rsquo;m trying to do my share in getting myself and others better at the craft.</p>
<p><a target="_blank" href="https://www.b-list.org/weblog/2026/apr/09/llms/">https://www.b-list.org/weblog/2026/apr/09/llms/</a></p>
<br/>
<h4 id="almost-half-of-us-data-centers-that-were-supposed-to-open-this-year-slated-to-be-canceled-or-delayed">Almost Half of US Data Centers That Were Supposed to Open This Year Slated to Be Canceled or Delayed</h4>
<p><em>Tags: tech, ai, machine-learning, gpt, energy, economics, infrastructure</em></p>
<p>It&rsquo;s getting clearer that the industrial LLM complex will have a hard time meeting its targets.</p>
<p><a target="_blank" href="https://futurism.com/science-energy/data-centers-construction-supply">https://futurism.com/science-energy/data-centers-construction-supply</a></p>
<br/>
<h4 id="cognitive-surrender-leads-ai-users-to-abandon-logical-thinking-research-finds">&ldquo;Cognitive surrender&rdquo; leads AI users to abandon logical thinking, research finds</h4>
<p><em>Tags: tech, ai, machine-learning, gpt, cognition, bias</em></p>
<p>It feels like it&rsquo;s supercharging an old bias&hellip; We tend to confuse confidence for competence.</p>
<p><a target="_blank" href="https://arstechnica.com/ai/2026/04/research-finds-ai-users-scarily-willing-to-surrender-their-cognition-to-llms/">https://arstechnica.com/ai/2026/04/research-finds-ai-users-scarily-willing-to-surrender-their-cognition-to-llms/</a></p>
<br/>
<h4 id="the-machines-are-fine-im-worried-about-us">The machines are fine. I&rsquo;m worried about us.</h4>
<p><em>Tags: tech, ai, machine-learning, gpt, copilot, learning, science, research</em></p>
<p>Excellent piece, it show quite well the problem of skipping the &ldquo;grunt work&rdquo;. Without it you can&rsquo;t really learn your trade (be it astrophysics or anything else). It also shows how the incentives on scientific careers are wrong. It&rsquo;s not new, but when LLM agents become available, things are definitely changing for the worst.</p>
<p><a target="_blank" href="https://ergosphere.blog/posts/the-machines-are-fine/">https://ergosphere.blog/posts/the-machines-are-fine/</a></p>
<br/>
<h4 id="giving-llms-a-formal-reasoning-engine-for-code-analysis">Giving LLMs a Formal Reasoning Engine for Code Analysis</h4>
<p><em>Tags: tech, ai, machine-learning, copilot, prolog, logic</em></p>
<p>Definitely interesting approach. I think neurosymbolic approaches are what we ultimately need so I&rsquo;m probably biased. At least it means using LLMs for what they&rsquo;re good at (language skills) and only that. Then rely on proper code symbolic models which do the reasoning heavy lifting. I&rsquo;d expect it can give nice output with smaller models.</p>
<p><a target="_blank" href="https://yogthos.net/posts/2026-04-08-neurosymbolic-mcp.html">https://yogthos.net/posts/2026-04-08-neurosymbolic-mcp.html</a></p>
<br/>
<h4 id="open-source-security-at-astral">Open source security at Astral</h4>
<p><em>Tags: tech, security, ci, supply-chain</em></p>
<p>Lots of interesting measures to reduce the risk of supply chain issues. Definitely to be considered on your projects.</p>
<p><a target="_blank" href="https://astral.sh/blog/open-source-security-at-astral">https://astral.sh/blog/open-source-security-at-astral</a></p>
<br/>
<h4 id="another-memory-corruption-case">another memory corruption case</h4>
<p><em>Tags: tech, hardware, memory, failure</em></p>
<p>Failing DRAM chips are real. Here is the case of debugging a single bit flip.</p>
<p><a target="_blank" href="https://trofi.github.io/posts/347-another-memory-corruption-case.html">https://trofi.github.io/posts/347-another-memory-corruption-case.html</a></p>
<br/>
<h4 id="the-git-commands-i-run-before-reading-any-code">The Git Commands I Run Before Reading Any Code</h4>
<p><em>Tags: tech, git, version-control, team, audit</em></p>
<p>Nice little commands to use to discover quickly the state of a code base&hellip; Or rather of its team.</p>
<p><a target="_blank" href="https://piechowski.io/post/git-commands-before-reading-code/">https://piechowski.io/post/git-commands-before-reading-code/</a></p>
<br/>
<h4 id="zsh-select-generated-files-with-om1-glob-qualifiers">Zsh: select generated files with (om[1]) glob qualifiers</h4>
<p><em>Tags: tech, zsh, shell</em></p>
<p>Oh this is super neat and convenient! I didn&rsquo;t know about those glob patterns modifiers in zsh.</p>
<p><a target="_blank" href="https://adamj.eu/tech/2026/01/27/zsh-om1-glob-qualifiers/">https://adamj.eu/tech/2026/01/27/zsh-om1-glob-qualifiers/</a></p>
<br/>
<h4 id="two-little-scripts-addup-and-sumup">Two little scripts: addup and sumup</h4>
<p><em>Tags: tech, unix, shell, scripting</em></p>
<p>A friendly reminder that one can go far mainly with awk.</p>
<p><a target="_blank" href="https://utcc.utoronto.ca/~cks/space/blog/sysadmin/LittleScriptsIX">https://utcc.utoronto.ca/~cks/space/blog/sysadmin/LittleScriptsIX</a></p>
<br/>
<h4 id="all-of-the-string-types">All of the String types</h4>
<p><em>Tags: tech, memory, unicode, encodings</em></p>
<p>So many string types! They all have a purpose of course. It&rsquo;s a good reminder that something mundane like a string type is not that simple.</p>
<p><a target="_blank" href="https://lambdalemon.gay/posts/string-types">https://lambdalemon.gay/posts/string-types</a></p>
<br/>
<h4 id="stamp-it-all-programs-must-report-their-version">Stamp It! All Programs Must Report Their Version</h4>
<p><em>Tags: tech, version-control, debugging</em></p>
<p>Examples of how i3 and go stamp versions. This is indeed good habits to ease dealing with errors in production.</p>
<p><a target="_blank" href="https://michael.stapelberg.ch/posts/2026-04-05-stamp-it-all-programs-must-report-their-version/">https://michael.stapelberg.ch/posts/2026-04-05-stamp-it-all-programs-must-report-their-version/</a></p>
<br/>
<h4 id="the-mvc-mistake">The MVC Mistake</h4>
<p><em>Tags: tech, architecture, complexity</em></p>
<p>Shows the problem with layer cakes in applications or how you might want to go toward onion architectures.</p>
<p><a target="_blank" href="https://entropicthoughts.com/mvc-mistake">https://entropicthoughts.com/mvc-mistake</a></p>
<br/>
<h4 id="the-mouse-that-roared">The Mouse That Roared</h4>
<p><em>Tags: tech, leadership, tests, tdd, agile, organisation</em></p>
<p>Cryptic title to be honest. But this is a good explanation of why any &ldquo;agile transformation&rdquo; better start close to the code and in particular with automated tests. If you can crack that nut (and it takes time), the rest will follow naturally.</p>
<p><a target="_blank" href="https://codemanship.wordpress.com/2026/03/30/the-mouse-that-roared/">https://codemanship.wordpress.com/2026/03/30/the-mouse-that-roared/</a></p>
<br/>
<h4 id="if-you-thought-the-speed-of-writing-code-was-your-problem---you-have-bigger-problems">If you thought the speed of writing code was your problem - you have bigger problems</h4>
<p><em>Tags: tech, productivity, organisation, leadership, ai, machine-learning, copilot</em></p>
<p>So much this&hellip; There are so many organisational problems that churning code faster is likely not what you need. When did we start to obsess with the number of lines of code?</p>
<p><a target="_blank" href="https://andrewmurphy.io/blog/if-you-thought-the-speed-of-writing-code-was-your-problem-you-have-bigger-problems">https://andrewmurphy.io/blog/if-you-thought-the-speed-of-writing-code-was-your-problem-you-have-bigger-problems</a></p>
<br/>
<h4 id="are-we-idiocracy-yet">Are We Idiocracy Yet?</h4>
<p><em>Tags: satire, culture</em></p>
<p>Getting there, one day at a time.</p>
<p><a target="_blank" href="https://idiocracy.wtf/">https://idiocracy.wtf/</a></p>
<br/>
<hr>
<p>Bye for now!</p>]]></content></entry><entry><title type="html">KDE in Graz</title><link href="https://mxdarkwater.com/2026/04/10/kde-in-graz/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://mxdarkwater.com/?p=26022</id><author><name>Bridging the Gap</name><uri>https://mxdarkwater.com</uri></author><published>2026-04-10T08:49:40+00:00</published><updated>2026-04-10T08:49:40+00:00</updated><content type="html"><![CDATA[<p>I&#8217;ve been on the Akademy organizing team and contributing in various cat-herding capacities since 2023, but this is the first time I&#8217;ve joined other contributors for a <a target="_blank" href="https://kde.org/community/calendar/2026/megasprint/">Sprint</a>. </p>



<p>My mission this week has been to scout locations and activities for the <a target="_blank" href="https://akademy.kde.org/2026">Akademy</a> conference later this year. One of the members of our local organizing team let me (temporarily) adopt their stuffed <a target="_blank" href="https://community.kde.org/Konqi">Konqi</a>, so I have been wandering around Graz and the state of Styria with a stuffed dragon taking a bunch of pictures, drinking Aperol Spritz, eating <a target="_blank" href="https://www.zotter.at/en/zotter-experience-world">chocolate, and petting animals</a> to make sure that all the places we visit in September will be fun and accessible for everyone who joins. </p>



<figure data-carousel-extra='&#123;&quot;blog_id&quot;:1,&quot;permalink&quot;:&quot;https://mxdarkwater.com/2026/04/10/kde-in-graz/&quot;}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="576" height="1024" data-attachment-id="26025" data-permalink="https://mxdarkwater.com/2026/04/10/kde-in-graz/pxl_20260408_114307027-mp/" data-orig-file="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_114307027.MP_-scaled.jpg?fit=1440%2C2560&amp;ssl=1" data-orig-size="1440,2560" data-comments-opened="1" data-image-meta="&#123;&quot;aperture&quot;:&quot;1.89&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Pixel 7a&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1775655787&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;5.43&quot;,&quot;iso&quot;:&quot;191&quot;,&quot;shutter_speed&quot;:&quot;0.010005&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="PXL_20260408_114307027.MP" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_114307027.MP_-scaled.jpg?fit=576%2C1024&amp;ssl=1" data-id="26025" src="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_114307027.MP_.jpg?resize=576%2C1024&#038;ssl=1" alt="Konqi in front of a chocolate fountain" class="wp-image-26025" srcset="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_114307027.MP_-scaled.jpg?resize=576%2C1024&amp;ssl=1 576w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_114307027.MP_-scaled.jpg?resize=169%2C300&amp;ssl=1 169w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_114307027.MP_-scaled.jpg?resize=768%2C1365&amp;ssl=1 768w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_114307027.MP_-scaled.jpg?resize=864%2C1536&amp;ssl=1 864w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_114307027.MP_-scaled.jpg?resize=1152%2C2048&amp;ssl=1 1152w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_114307027.MP_-scaled.jpg?w=1440&amp;ssl=1 1440w" sizes="(max-width: 576px) 100vw, 576px" /><figcaption class="wp-element-caption">Konqi at Zotter</figcaption></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" decoding="async" width="576" height="1024" data-attachment-id="26024" data-permalink="https://mxdarkwater.com/2026/04/10/kde-in-graz/pxl_20260408_133245720/" data-orig-file="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_133245720-scaled.jpg?fit=1440%2C2560&amp;ssl=1" data-orig-size="1440,2560" data-comments-opened="1" data-image-meta="&#123;&quot;aperture&quot;:&quot;1.89&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Pixel 7a&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1775662365&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;5.43&quot;,&quot;iso&quot;:&quot;42&quot;,&quot;shutter_speed&quot;:&quot;0.000408&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="PXL_20260408_133245720" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_133245720-scaled.jpg?fit=576%2C1024&amp;ssl=1" data-id="26024" src="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_133245720.jpg?resize=576%2C1024&#038;ssl=1" alt="Konqi holding my bag of chocolates" class="wp-image-26024" srcset="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_133245720-scaled.jpg?resize=576%2C1024&amp;ssl=1 576w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_133245720-scaled.jpg?resize=169%2C300&amp;ssl=1 169w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_133245720-scaled.jpg?resize=768%2C1365&amp;ssl=1 768w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_133245720-scaled.jpg?resize=864%2C1536&amp;ssl=1 864w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_133245720-scaled.jpg?resize=1152%2C2048&amp;ssl=1 1152w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_133245720-scaled.jpg?w=1440&amp;ssl=1 1440w" sizes="(max-width: 576px) 100vw, 576px" /><figcaption class="wp-element-caption">Konqi guarding my chocolates at the bus stop</figcaption></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" decoding="async" width="576" height="1024" data-attachment-id="26026" data-permalink="https://mxdarkwater.com/2026/04/10/kde-in-graz/pxl_20260408_093552765/" data-orig-file="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_093552765-scaled.jpg?fit=1440%2C2560&amp;ssl=1" data-orig-size="1440,2560" data-comments-opened="1" data-image-meta="&#123;&quot;aperture&quot;:&quot;2.2&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Pixel 7a&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1775648152&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;2.74&quot;,&quot;iso&quot;:&quot;97&quot;,&quot;shutter_speed&quot;:&quot;0.009992&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="PXL_20260408_093552765" data-image-description="" data-image-caption="&lt;p&gt;me and Konqi on the train&lt;/p&gt;
" data-large-file="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_093552765-scaled.jpg?fit=576%2C1024&amp;ssl=1" data-id="26026" src="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_093552765.jpg?resize=576%2C1024&#038;ssl=1" alt="" class="wp-image-26026" srcset="https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_093552765-scaled.jpg?resize=576%2C1024&amp;ssl=1 576w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_093552765-scaled.jpg?resize=169%2C300&amp;ssl=1 169w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_093552765-scaled.jpg?resize=768%2C1365&amp;ssl=1 768w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_093552765-scaled.jpg?resize=864%2C1536&amp;ssl=1 864w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_093552765-scaled.jpg?resize=1152%2C2048&amp;ssl=1 1152w, https://i0.wp.com/mxdarkwater.com/wp-content/uploads/2026/04/PXL_20260408_093552765-scaled.jpg?w=1440&amp;ssl=1 1440w" sizes="(max-width: 576px) 100vw, 576px" /><figcaption class="wp-element-caption">me and Konqi on the train</figcaption></figure>
</figure>



<p>This year KDE turns 30, so we are planning a big celebration for Akademy. I have been thrilled to discover that Graz is very accessible. The town tourism website has a <a target="_blank" href="https://www.graztourismus.at/en/getting-there-and-public-transport/accessible-graz">guide for navigating</a> with a wheelchair or other mobility devices; many restaurants have mocktails or homemade juice/tea options for non-alcoholic drinks; the city is full of plazas you can sit and sip a coffee in for hours when you need a break from walking, and there is an abundance of parks and fountains that children can expel their energy playing in.</p>



<p>I can&#8217;t wait to introduce the KDE community to Graz this <a target="_blank" href="https://akademy.kde.org/2026/register/">September</a>!</p>]]></content></entry><entry><title type="html">Akademy 2026 Call for Proposals is Now Open</title><link href="https://akademy.kde.org/news/2026-04-10_akademy-2026-call-for-proposals/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://akademy.kde.org/news/2026-04-10_akademy-2026-call-for-proposals/</id><author><name>Akademy</name><uri>https://akademy.kde.org/</uri></author><published>2026-04-10T08:04:55+00:00</published><updated>2026-04-10T08:04:55+00:00</updated><content type="html"><![CDATA[<h2 id="akademy-2026-call-for-participation">Akademy 2026: Call for Participation</h2>
<p><a target="_blank" href="https://akademy.kde.org/2026/">Akademy 2026</a> will be a hybrid event held
simultaneously in Graz, Austria, and online. The
<a target="_blank" href="https://akademy.kde.org/2026/cfp/"><strong>Call for Participation</strong></a> is open!
Send us your talk ideas and abstracts.</p>
<h3 id="why-talk-at-akademy2026">Why talk at #Akademy2026</h3>
<p>Akademy attracts artists, designers, developers, translators, users, writers,
companies, public institutions and many other KDE friends and contributors.
We celebrate the achievements and help determine the direction for the next
year. We all meet together to discuss and plan the future of the Community
and the technology we build. You will meet people who are receptive to your
ideas and can help you with their skills and experience. You will get an
opportunity to present your application, share ideas and best practices, or
gain new contributors. These sessions offer the opportunity to gain support
and make your plans for your project become a reality.</p>
<h3 id="how-to-get-started">How to get started</h3>
<p>Do not worry about details or slides right now. Just think of an idea and
submit some basic details about your talk. You can edit your abstract after
the initial submission. All topics relevant to the KDE Community are
welcome. Here are a few ideas to get you started on your proposal:</p>
<ul>
<li>How KDE can empower building robust communities in changing political climates</li>
<li>Work towards <a target="_blank" href="https://kde.org/goals/" title="https://kde.org/goals/"><em>KDE's goals</em></a>:
Streamlined Application Development Experience, We care about your Input, and
KDE Needs You</li>
<li>Giving people more digital freedom, sovereignty, and autonomy with KDE software</li>
<li>Advice on how to participate for new users, intermediates and experts</li>
<li>New developments/plans for KDE Frameworks, Plasma, Applications and other projects</li>
<li><strong>30 years of KDE: achievements, highlights, and what’s next</strong></li>
<li><strong>Anything else that might interest an audience of long-time, new, and potential KDE contributors!</strong></li>
</ul>
<p>To get an idea of talks that were accepted, check out the program from previous
years:
<a target="_blank" href="https://conf.kde.org/event/9/timetable//?layout=room#all"><em>2025</em></a>
<a target="_blank" href="https://conf.kde.org/event/6/contributions/"><em>2024</em></a>,
<a target="_blank" href="https://conf.kde.org/event/5/contributions/" title="https://conf.kde.org/event/5/contributions/"><em>2023</em></a>,
<a target="_blank" href="https://conf.kde.org/event/4/timetable/" title="https://conf.kde.org/event/4/timetable/"><em>2022</em></a>,
<a target="_blank" href="https://conf.kde.org/event/1/timetable/#20210619" title="https://conf.kde.org/event/1/timetable/#20210619"><em>2021</em></a>,
<a target="_blank" href="https://conf.kde.org/en/akademy2020/public/events" title="https://conf.kde.org/en/akademy2020/public/events"><em>2020</em></a>,
<a target="_blank" href="https://conf.kde.org/en/akademy2019/public/events" title="https://conf.kde.org/en/akademy2019/public/events"><em>2019</em></a>,
<a target="_blank" href="https://conf.kde.org/en/akademy2018/public/events" title="https://conf.kde.org/en/akademy2018/public/events"><em>2018</em></a>,
and
<a target="_blank" href="https://conf.kde.org/en/akademy2017/public/events" title="https://conf.kde.org/en/akademy2017/public/events"><em>2017</em></a>.</p>
<p>For more details and information, visit <a target="_blank" href="https://akademy.kde.org/2026/cfp/"><strong>Call for Participation</strong></a>.</p>]]></content></entry><entry><title type="html">Building C/C++ libraries for HarmonyOS with vcpkg</title><link href="https://www.qt.io/blog/building-libraries-for-harmonyos-with-vcpkg?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.qt.io/blog/building-libraries-for-harmonyos-with-vcpkg</id><author><name>Qt Dev Loop</name><uri>https://www.qt.io/blog/tag/loop/</uri></author><published>2026-04-10T07:14:41+00:00</published><updated>2026-04-10T07:14:41+00:00</updated><content type="html"><![CDATA[<div class="hs-featured-image-wrapper"> 
 <a target="_blank" href="https://www.qt.io/blog/building-libraries-for-harmonyos-with-vcpkg?hsLang=en" title="" class="hs-featured-image-link"> <img src="https://www.qt.io/hubfs/ohos-vcpkg.png" alt="Building C/C++ libraries for HarmonyOS with vcpkg" class="hs-featured-image" style="width:auto !important; max-width:50%; float:left; margin:0 15px 15px 0;"> </a> 
</div> 
<p>We're currently working on porting Qt to <a target="_blank" href="https://en.wikipedia.org/wiki/HarmonyOS">HarmonyOS</a>. For our CI and developer machines, we need a number of third-party libraries built for HarmonyOS. Cross-compiling open-source C and C++ libraries for this platform has been a manual, error-prone process. Each library has its own build system, whether CMake, Autotools, or Meson. Each needs individual attention to produce correct binaries for the OHOS target. We have been maintaining a hand-written shell script that builds libraries one by one, with per-library workarounds for cross-compilation quirks.<br><br>With our vcpkg fork, that script is now a single command.</p>  
<img src="https://track-eu1.hubspot.com/__ptq.gif?a=149513&amp;k=14&amp;r=https%3A%2F%2Fwww.qt.io%2Fblog%2Fbuilding-libraries-for-harmonyos-with-vcpkg&amp;bu=https%253A%252F%252Fwww.qt.io%252Fblog&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; ">]]></content></entry><entry><title type="html">Tighter KDE Connect Integration</title><link href="https://blog.broulik.de/2026/04/kde-connect-solid-back-end/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://blog.broulik.de/?p=2866</id><author><name>Kai Uwe Broulik</name><uri>https://blog.broulik.de/category/planetkde</uri></author><published>2026-04-10T01:14:00+00:00</published><updated>2026-04-10T01:14:00+00:00</updated><content type="html"><![CDATA[<p>In my opinion, <a target="_blank" href="https://kdeconnect.kde.org/" data-type="link" data-id="http://kdeconnect.kde.org/" target="_blank" rel="noreferrer noopener">KDE Connect</a> is one of the finest pieces of software KDE has ever produced. It lets you easily pair your devices and makes them work together. Copy some text on your computer, paste it on your phone. A call comes in and the video you’re watching in your browser pauses. How cool is that? For the past couple of weeks I’ve been working on even tighter integration between KDE Connect and the Plasma desktop.</p>



<figure class="wp-block-image size-large"><a target="_blank" href="https://blog.broulik.de/wp-content/uploads/2026/03/kdeconnectbackend.png"><img fetchpriority="high" decoding="async" width="1024" height="830" src="https://blog.broulik.de/wp-content/uploads/2026/03/kdeconnectbackend-1024x830.png" alt="Plasma’s “Power &amp; Battery ” popup, containing a power profile slider, and three batteries (intenral laptop battery, phone battery, and some other laptop battery)" class="wp-image-2900" srcset="https://blog.broulik.de/wp-content/uploads/2026/03/kdeconnectbackend-1024x830.png 1024w, https://blog.broulik.de/wp-content/uploads/2026/03/kdeconnectbackend-300x243.png 300w, https://blog.broulik.de/wp-content/uploads/2026/03/kdeconnectbackend-768x623.png 768w, https://blog.broulik.de/wp-content/uploads/2026/03/kdeconnectbackend.png 1305w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Battery Monitor displaying status about devices paired wirelessly using KDE Connect</figcaption></figure>



<span id="more-2866"></span>



<p>By adding a corresponding back end to Solid, KDE’s hardware abstraction framework, your phone’s battery status will show up in the “Power &amp; Battery” popup just like a wireless mouse would. The key advantage of reporting a KDE Connect device as storage media is that it can show up in various places just like a USB drive would, including the Places panel in Dolphin and “Disk &amp; Devices” in Plasma’s system tray. Right now, the Places panel entry is actually manually added by <em>kdeconnectd</em> creating a bookmark. This also means that any modifications done to the entry, such as hiding it, will be lost once the device disappears. If instead it is a proper Solid device with a unique identifier, the Places panel will remember that the device was hidden next time it is discovered. Additionally, PowerDevil, Plasma’s power management daemon, already automatically issues a notification when a connected external device runs low on battery.</p>



<p>Now that the fact that you can browse your phone’s storage remotely via KDE Connect is more obvious, I spent some time improving the user experience when doing so. Since KDE Connect is cross-desktop and cross-platform it uses <em>sshfs</em> to provide access to the phone. It doesn’t implement a proper KIO worker like we normally would since that really only works in KDE applications. This unfortunately comes with a couple of downsides: for example, the device is mounted into <em>/run/user/&lt;uid>/&lt;deviceid></em> which is gibberish that will be shown to the user in the address bar. More importantly, though, it makes the file manager think it’s a local path (which is normally fast to access) and could lead to UI freezes when the connection is slow or unstable.</p>



<p>To improve this, I made use of KIO’s <em>ForwardingWorkerBase</em>. This is a tiny KIO worker that just rewrites a URL and forwards it to a different location. This way, the application sees a “remote” <em>kdeconnect://device/path</em> URL and keeps everything nice and asynchronous but under the hood still uses the <em>sshfs</em> infrastructure we already have. It’s what the magic <em>desktop:/</em> URL uses that parses the name of <em>.desktop</em> files (so your get nice application names) but other than that merely reads from <em>/home/&lt;user>/Desktop</em>. This also makes the entry in the Places panel match up with the URL being browsed and ultimately makes the device’s name appear on the address bar instead of an ugly UUID.</p>



<figure class="wp-block-image size-large"><a target="_blank" href="https://blog.broulik.de/wp-content/uploads/2026/03/Bildschirmfoto_20260409_202108.png"><img decoding="async" width="1024" height="633" src="https://blog.broulik.de/wp-content/uploads/2026/03/Bildschirmfoto_20260409_202108-1024x633.png" alt="" class="wp-image-2901" style="border: 1px solid black" srcset="https://blog.broulik.de/wp-content/uploads/2026/03/Bildschirmfoto_20260409_202108-1024x633.png 1024w, https://blog.broulik.de/wp-content/uploads/2026/03/Bildschirmfoto_20260409_202108-300x185.png 300w, https://blog.broulik.de/wp-content/uploads/2026/03/Bildschirmfoto_20260409_202108-768x475.png 768w, https://blog.broulik.de/wp-content/uploads/2026/03/Bildschirmfoto_20260409_202108-825x510.png 825w, https://blog.broulik.de/wp-content/uploads/2026/03/Bildschirmfoto_20260409_202108.png 1294w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption"> No more gibberish <em>/run/user/somethingsomething</em> URL on the address bar</figcaption></figure>



<p>While at it, I also added a “KDE Connect Devices” link to the “Network” folder, like we already have for Bluetooth, MTP, and Apple devices. Finally, when there is only a single storage location on the device, such as “Internal Shared Storage”, it redirects into it automatically. This saves one click when opening the device and puts you directly where your stuff is. The back end has <a target="_blank" href="https://invent.kde.org/frameworks/solid/-/commit/75d19cd14c07dda587d429d0a86fa75df83496a4" data-type="link" data-id="https://invent.kde.org/frameworks/solid/-/commit/75d19cd14c07dda587d429d0a86fa75df83496a4" target="_blank" rel="noreferrer noopener">just been merged</a> and will be released next month as part of KDE Frameworks 6.26. However, since there’s still a bunch of infrastructure work needed around it, the back end is disabled by default. We will likely need to have at least KDE Gear 26.08 and Plasma 6.7 released that will include some necessary changes before we can flip the switch.</p>



<p>If you run latest KDE git builds, please give it a try and let me know what you think! You need to set the <em>SOLID_ENABLE_KDECONNECT=1</em> environment variable to use it. To enable all debug output to aid debugging, set QT_LOGGING_RULES=kf.solid.backends.kdeconnect*=true or use KDebugSettings. </p>]]></content></entry><entry><title type="html">KDE Ships Frameworks 6.25.0</title><link href="https://kde.org/announcements/frameworks/6/6.25.0/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://kde.org/announcements/frameworks/6/6.25.0/</id><author><name>KDE Community</name><uri>https://kde.org/</uri></author><published>2026-04-10T00:00:00+00:00</published><updated>2026-04-10T00:00:00+00:00</updated><content type="html"><![CDATA[<p>Friday, 10 April 2026</p>
<p>KDE today announces the release of KDE Frameworks 6.25.0.</p>
<p>This release is part of a series of planned monthly releases making improvements available to developers in a quick and predictable manner.</p>
<h2 id="new-in-this-version">New in this version</h2>
<details open="true" id="Baloo">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/baloo">Baloo</a></summary><ul>
<li>Fix remaining QFile::open nodiscard warnings. <a target="_blank" href="https://commits.kde.org/baloo/156dce7a29998c80cf39260394a564265185811b">Commit.</a></li>
<li>[FileIndexerConfigUtils] Fix a nodiscard warning in fixture setup. <a target="_blank" href="https://commits.kde.org/baloo/85ade38b968c0d87dc272c209037742d8b238c46">Commit.</a></li>
<li>[FileIndexerConfigUtils] Remove unneeded QTextStream. <a target="_blank" href="https://commits.kde.org/baloo/6d78cc117fdacd4d7f4456dfbf1e097a8a424b11">Commit.</a></li>
<li>[FileIndexerConfigTest] Get rid of an almost duplicate helper function. <a target="_blank" href="https://commits.kde.org/baloo/931c05de40097989ca2070920781a229222b871f">Commit.</a></li>
<li>[FileIndexerConfigTest] Reduce repetitions/manual expansion. <a target="_blank" href="https://commits.kde.org/baloo/8f72eeca8e12f5dbebe16f49a0243ee0f063e1a3">Commit.</a></li>
<li>[FileIndexerConfigTest] Reduce string puzzles to improve readability. <a target="_blank" href="https://commits.kde.org/baloo/1f283e5446a83021d162035df99bb9876163999d">Commit.</a></li>
<li>[FileIndexerConfigTest] Move single-use strings out of header file. <a target="_blank" href="https://commits.kde.org/baloo/efee67709d9b5b7ff1a8bff139783147f7e8cae2">Commit.</a></li>
<li>[DocumentUrlDBTest] Remove unused helper function. <a target="_blank" href="https://commits.kde.org/baloo/248eb5937a57658767fcebfbc9c40daa34cba9ab">Commit.</a></li>
<li>[ExtractorProcess] Verify transaction was sucessfully created. <a target="_blank" href="https://commits.kde.org/baloo/c6c7bc4fbd176d568d47995532148134da68554b">Commit.</a></li>
<li>Tell the compiler QFile::open(fd, ...) can not fail for STDIN. <a target="_blank" href="https://commits.kde.org/baloo/49d6f420314780bdd32c742ea55d8d4d9dd57e46">Commit.</a></li>
<li>[Query] Use explicit percent-encoding for title and json data. <a target="_blank" href="https://commits.kde.org/baloo/c44013d720e980b29b3fa0b9c9ea13a6a6e6d643">Commit.</a></li>
<li>[QuerySerializationTest] Extend test coverage for disallowed characters. <a target="_blank" href="https://commits.kde.org/baloo/8845cdd76f846b9ccbf60aa0e71b8c4087330241">Commit.</a></li>
<li>[QuerySerializationTest] Cover fromSearchUrl/toSearchUrl methods. <a target="_blank" href="https://commits.kde.org/baloo/e695f9a39ef6ce5138a90382c790d05f09f80cd5">Commit.</a></li>
<li>[QuerySerializationTest] Make JSON roundtrip test data driven. <a target="_blank" href="https://commits.kde.org/baloo/7cd8c817ac18c7e2d877e007770022670a229c19">Commit.</a></li>
</ul>
</details>
<details open="true" id="Breeze Icons">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/breeze-icons">Breeze Icons</a></summary><ul>
<li>Duplicate kdesrc-build icon as kde-builder icon. <a target="_blank" href="https://commits.kde.org/breeze-icons/0455b67bf7838cc3fb13cc2fd755c2660386d7f1">Commit.</a></li>
<li>Remove duplicate/bogous style sheets. <a target="_blank" href="https://commits.kde.org/breeze-icons/c625cec95034fce2519851ea3876443568a9db7b">Commit.</a></li>
<li>Remove unused path in im-invisible-user.svg that breaks webfont on MacOS. <a target="_blank" href="https://commits.kde.org/breeze-icons/99030401c788507f1818b8d25f4beae6438f4c8a">Commit.</a> See bug <a target="_blank" href="https://bugs.kde.org/499597">#499597</a></li>
<li>Add data-question status icon similar to other data-* status icons. <a target="_blank" href="https://commits.kde.org/breeze-icons/e6fecb0084412f3774bd111c457cb2a080cd0fbb">Commit.</a></li>
<li>Add nicer 16x16 variant of dialog-question. <a target="_blank" href="https://commits.kde.org/breeze-icons/e91ac6297bb4b4f8f4bc487bea3eb32983a1283b">Commit.</a></li>
<li>Add keyframe-warn. <a target="_blank" href="https://commits.kde.org/breeze-icons/a87027c1e2abe38814232039d24d6ab2bdf0aab1">Commit.</a></li>
<li>Resize kmouth, konversation, and kde-im-log-viewer to same height. <a target="_blank" href="https://commits.kde.org/breeze-icons/35dd4a361943a06c5e93bf7eb1a3f9b33227d163">Commit.</a></li>
<li>Add icon for conic gradients. <a target="_blank" href="https://commits.kde.org/breeze-icons/e8df9e8c28f57696487dfdb0771da228821440a8">Commit.</a></li>
<li>Add mask action icons. <a target="_blank" href="https://commits.kde.org/breeze-icons/dab63625feccab197cab0aa1c26903702f51b342">Commit.</a></li>
</ul>
</details>
<details open="true" id="Extra CMake Modules">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/extra-cmake-modules">Extra CMake Modules</a></summary><ul>
<li>KDECMakeSettings: Disable CMAKE_CXX_SCAN_FOR_MODULES. <a target="_blank" href="https://commits.kde.org/extra-cmake-modules/e10d4a6fe97c7ea51d9ed48c2a62f4205eb4c1fa">Commit.</a></li>
</ul>
</details>
<details open="true" id="KArchive">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/karchive">KArchive</a></summary><ul>
<li>Fix int overflow + QList assert on broken files. <a target="_blank" href="https://commits.kde.org/karchive/15d0f9278b0add83a4a0b81e985fa3f4d8b58e45">Commit.</a></li>
<li>Generate a pkgconfig file. <a target="_blank" href="https://commits.kde.org/karchive/b4433c93a16f52b6b6c9985b5b1c6839e79ebbfd">Commit.</a></li>
</ul>
</details>
<details open="true" id="KCalendarCore">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kcalendarcore">KCalendarCore</a></summary><ul>
<li>CI - add pre-commit support. <a target="_blank" href="https://commits.kde.org/kcalendarcore/ca216d5f0ba6f8d91b613cf40d2b6c6073c52551">Commit.</a></li>
<li>Use markdownlint-cli2 to format markdown files. <a target="_blank" href="https://commits.kde.org/kcalendarcore/3283afd2f4ede18e74b571aa428d174dd738b8f0">Commit.</a></li>
<li>Use gersemi to format CMake files. <a target="_blank" href="https://commits.kde.org/kcalendarcore/9603fba9086e86fe4da67643319a53f873e01da1">Commit.</a></li>
<li>Src/filestorage.h - fix a misspelled word. <a target="_blank" href="https://commits.kde.org/kcalendarcore/cfd4cfa0bbc800320f179df1b41fccb6ae431512">Commit.</a></li>
<li>Clang-format project. <a target="_blank" href="https://commits.kde.org/kcalendarcore/7b509488956d844014ffebb09dc67b9987755419">Commit.</a></li>
<li>Clean whitespace issues. <a target="_blank" href="https://commits.kde.org/kcalendarcore/6a77794b5df744b62dfd31382322620385f70cbe">Commit.</a></li>
</ul>
</details>
<details open="true" id="KCodecs">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kcodecs">KCodecs</a></summary><ul>
<li>We depend against qt 6.8 =&gt; we can remove check here. <a target="_blank" href="https://commits.kde.org/kcodecs/615c0d6a7425e2fadc8a819eb1a5077ddeabca1a">Commit.</a></li>
<li>Propagate C++20 requirement to consumers. <a target="_blank" href="https://commits.kde.org/kcodecs/6a8cacede143eac4adb08938df3e7b41af605e6f">Commit.</a></li>
<li>[KEncodingProber] Remove unused/unreachable Reset() method. <a target="_blank" href="https://commits.kde.org/kcodecs/9c5771326a58bf8ebf411a50d3acc94d06667648">Commit.</a></li>
<li>[KEncodingProber] Use in-class initialization for prober members. <a target="_blank" href="https://commits.kde.org/kcodecs/41019af000f0cc542fe0f2cdc47181ad41f0ecc6">Commit.</a></li>
<li>[Codec] Default constructors/destructors, annotate as constexpr. <a target="_blank" href="https://commits.kde.org/kcodecs/e5a6f2f7dd9e2a834bee8408f4b7c04420dcee83">Commit.</a></li>
<li>[Codec] Simplify codecForName lookup. <a target="_blank" href="https://commits.kde.org/kcodecs/9ee5fb2f6a14ce44d6f3c522d45bf8a3d069c09e">Commit.</a></li>
<li>[Codec] Benchmark codecForName lookup. <a target="_blank" href="https://commits.kde.org/kcodecs/f31a00dee17e428ba660ca375014fef1bf0efd7c">Commit.</a></li>
<li>[Codec] Move test class declaration to implementation file. <a target="_blank" href="https://commits.kde.org/kcodecs/441f0cc46668f3fb5b9312ebaf78643175a290cc">Commit.</a></li>
<li>[Codec] Remove double quote for invalid codec warning. <a target="_blank" href="https://commits.kde.org/kcodecs/123c9cd65b7cdb544e3b5549ad739dd33f954701">Commit.</a></li>
<li>[KCharsets] Simplify instance singleton. <a target="_blank" href="https://commits.kde.org/kcodecs/aba1d7edddaac2429d28110ecf1fb02cfc818279">Commit.</a></li>
<li>[KCharsets] Reuse translated strings from encodingsByScript. <a target="_blank" href="https://commits.kde.org/kcodecs/f4de617ce50ee1647063f4cd50791136e20f849c">Commit.</a></li>
<li>[KCharsets] Fix possible initialization race for encodingsByScript. <a target="_blank" href="https://commits.kde.org/kcodecs/c1c63d6d51b60cf088cfd139774496357166fc15">Commit.</a></li>
<li>[KCharsets] Remove unused include. <a target="_blank" href="https://commits.kde.org/kcodecs/4183c6d005ecb3cd2f8b0f73d5614a62054d2776">Commit.</a></li>
<li>[KCharsetsTest] Reduce call nesting to improve readability. <a target="_blank" href="https://commits.kde.org/kcodecs/4d363ffdbee802f41b68957755286a1432b91f33">Commit.</a></li>
</ul>
</details>
<details open="true" id="KConfig">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kconfig">KConfig</a></summary><ul>
<li>Kreadconfig: Add flag to include globals. <a target="_blank" href="https://commits.kde.org/kconfig/0f90cf5ca7999bf49812b217198ad44ca7232f46">Commit.</a></li>
<li>Kdesktopfile: tolerate nameless action for <em>SEPARATOR</em>. <a target="_blank" href="https://commits.kde.org/kconfig/ff314a773c65ea5495f6967b7b9cd78a77c52832">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/517770">#517770</a></li>
<li>Remove ifdef now that we depend on Qt &gt;= 6.9.0. <a target="_blank" href="https://commits.kde.org/kconfig/e5fc883361bba932b564a8f8beb4f43e72a37121">Commit.</a></li>
<li>QDoc fixes. <a target="_blank" href="https://commits.kde.org/kconfig/50116c5d987ce968c4cb2958a457b3ae1e3eb221">Commit.</a></li>
<li>Kreadconfig: Add flag to dump all entries. <a target="_blank" href="https://commits.kde.org/kconfig/d795ce74fa300e41778e898f4b4fdcd17bfcbf79">Commit.</a></li>
<li>Do not try to read registry entries for absolute config file names. <a target="_blank" href="https://commits.kde.org/kconfig/0b07b67f753410dfedf74b19a6ecc14f587f9b5f">Commit.</a></li>
<li>Avoid creation of not already existing registry keys. <a target="_blank" href="https://commits.kde.org/kconfig/6390ea9ac506b4d2012e00cf0879dc56ef53ccc7">Commit.</a></li>
</ul>
</details>
<details open="true" id="KCoreAddons">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kcoreaddons">KCoreAddons</a></summary><ul>
<li>Remove unused cmake variable. <a target="_blank" href="https://commits.kde.org/kcoreaddons/83fe0683fb477ee7b7857f93b181716c8899010b">Commit.</a></li>
</ul>
</details>
<details open="true" id="KDocTools">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kdoctools">KDocTools</a></summary><ul>
<li>Dynamically retrieve the list of languages to install. <a target="_blank" href="https://commits.kde.org/kdoctools/6af51912e9854150cb3b1c4b8b588cbf3db99f8d">Commit.</a></li>
<li>Install arabic files. <a target="_blank" href="https://commits.kde.org/kdoctools/bdf4dcf3c8b4a9673808577d0922c2ca87a6f799">Commit.</a></li>
</ul>
</details>
<details open="true" id="KFileMetaData">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kfilemetadata">KFileMetaData</a></summary><ul>
<li>ExtractionPluginManager -&gt; ExtractorCollection. <a target="_blank" href="https://commits.kde.org/kfilemetadata/78c638545babc35fdafef81b312b6975d6e9ec87">Commit.</a></li>
<li>Ffmpeg: use qScopeGuard to release AVFormatContext on failure. <a target="_blank" href="https://commits.kde.org/kfilemetadata/dc91deb6f70c602ac4c36bdf59346d9015b66728">Commit.</a></li>
<li>Extractors/exiv2: remove version check for BMFF_SUPPORT. <a target="_blank" href="https://commits.kde.org/kfilemetadata/cf42bcdedb563e6ac52a67fd60bba64c49de5c96">Commit.</a></li>
<li>Ffmpegextractor: when color_space_name is &quot;unkwown&quot; don't set ColorSpace. <a target="_blank" href="https://commits.kde.org/kfilemetadata/d8d8d917d54ecc8573233d6d04f3649c702e4372">Commit.</a></li>
</ul>
</details>
<details open="true" id="KGuiAddons">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kguiaddons">KGuiAddons</a></summary><ul>
<li>Waylandclipboard: Wait for up to 1s for the clipboard contents. <a target="_blank" href="https://commits.kde.org/kguiaddons/5724d86b54bcbb0bbde70270a1f5080d70c8116b">Commit.</a></li>
<li>Waylandclipboard: Properly interrupt thread when client extension goes inactive. <a target="_blank" href="https://commits.kde.org/kguiaddons/69c84408d2e3ef7a9819d3238ab7af84f9575220">Commit.</a></li>
<li>Remove ifdef now that we depend on Qt &gt;= 6.9.0. <a target="_blank" href="https://commits.kde.org/kguiaddons/315cfff23ac9b0983a469202324ecc4c631ee480">Commit.</a></li>
<li>Change include in ksysteminhibitor_dbus.cpp preventing building when using a QT version &lt; 6.9. <a target="_blank" href="https://commits.kde.org/kguiaddons/5c512b59693b29a464ff6db83cd5a8cc47477a14">Commit.</a></li>
<li>Systemclipboard: waylandApp ptr validation cleanup. <a target="_blank" href="https://commits.kde.org/kguiaddons/148da3aa2e65ab623b19f5277331c1357043761c">Commit.</a></li>
<li>Systemclipboard/wlrwaylandclipboard: Fix WlrDataControlDevice::setPrimarySelection. <a target="_blank" href="https://commits.kde.org/kguiaddons/7789521ed3135db615fcc34d177dd4496193c678">Commit.</a></li>
</ul>
</details>
<details open="true" id="KHolidays">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kholidays">KHolidays</a></summary><ul>
<li>Update holidays of 2026 for Taiwan. <a target="_blank" href="https://commits.kde.org/kholidays/25b39c5ed8d98098a5f9ebb9958c1b08d518add3">Commit.</a></li>
<li>CI - add pre-commit support. <a target="_blank" href="https://commits.kde.org/kholidays/3384a155aa85b17b2d1037c5a7ab42564058cc11">Commit.</a></li>
<li>Use markdownlint-cli2 to format markdown files. <a target="_blank" href="https://commits.kde.org/kholidays/5e293f852e81aa6f83ed48f59fa0a22bed13893e">Commit.</a></li>
<li>Use gersemi to format CMake files. <a target="_blank" href="https://commits.kde.org/kholidays/6806c0ad3927ad338499da5437c45a2d398da775">Commit.</a></li>
<li>.codespellrc - allow &quot;lightening&quot;. <a target="_blank" href="https://commits.kde.org/kholidays/e01fc7129c95c09b2e96de7092e7cbd0b559a827">Commit.</a></li>
<li>Clang-format fixes. <a target="_blank" href="https://commits.kde.org/kholidays/4d90ed281069a60cc13b3009b5a8ad98ea6f8df4">Commit.</a></li>
<li>Clean whitespace issues. <a target="_blank" href="https://commits.kde.org/kholidays/186f59973c7e05ae88a1173e7a66eb1164c15fb3">Commit.</a></li>
<li>Edit portuguese holidays. <a target="_blank" href="https://commits.kde.org/kholidays/1f03ce6bf189feb3a4c3c28ba29c54044f037d56">Commit.</a></li>
</ul>
</details>
<details open="true" id="KIconThemes">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kiconthemes">KIconThemes</a></summary><ul>
<li>Explain why SVG preference was reverted. <a target="_blank" href="https://commits.kde.org/kiconthemes/495875e76cabf38e5da116953b075e7aab345626">Commit.</a></li>
<li>Don't try to create KIconTheme with empty theme name. <a target="_blank" href="https://commits.kde.org/kiconthemes/9c0810e53a4d67731cc5adece75ae5536443e67b">Commit.</a></li>
<li>Revert &quot;KIconTheme: Prefer SVG files over PNG files&quot;. <a target="_blank" href="https://commits.kde.org/kiconthemes/2dc30a2f27e2383994eb77e79b0c33f47ce4e0c7">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/516007">#516007</a>. See bug <a target="_blank" href="https://bugs.kde.org/502273">#502273</a></li>
</ul>
</details>
<details open="true" id="KImageformats">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kimageformats">KImageformats</a></summary><ul>
<li>TIM: PlayStation graphics read only support. <a target="_blank" href="https://commits.kde.org/kimageformats/142ec14c81233187cc12565fe1daaa03cbf0a4ae">Commit.</a></li>
<li>Remove ifdef now that we depend on Qt &gt;= 6.9.0. <a target="_blank" href="https://commits.kde.org/kimageformats/38b8b703046d58d489b98c262459633bb0bc859f">Commit.</a></li>
<li>IFF: fix Integer-overflow in IDATChunk::strideSize. <a target="_blank" href="https://commits.kde.org/kimageformats/7c86ccaefb2827230b7a31ac62444ebcb535d70c">Commit.</a></li>
</ul>
</details>
<details open="true" id="KIO">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kio">KIO</a></summary><ul>
<li>Kfileitem: isExecutable: rely on QFileinfo. <a target="_blank" href="https://commits.kde.org/kio/186c2daa61896bf0145d27e023b35bed096ae6dc">Commit.</a></li>
<li>Revert &quot;KFileItem: use permissions to determine isWritable and isReadable&quot;. <a target="_blank" href="https://commits.kde.org/kio/5c7b5e7ac1a24997cb5137765bc015b3a4128bae">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/504287">#504287</a>. Fixes bug <a target="_blank" href="https://bugs.kde.org/506472">#506472</a></li>
<li>KFileItem: Check desktop MIME type before isSlow. <a target="_blank" href="https://commits.kde.org/kio/e3a9579ca31af78a9680adc07110497f20a8e075">Commit.</a></li>
<li>Widgets: Don't show an error when trying do paste while there is nothing to paste. <a target="_blank" href="https://commits.kde.org/kio/4ccd88147fbb266c90a474bf219c4bfbbf239b2b">Commit.</a></li>
<li>Kio_ftp: Enable UTF-8 encoding negotiation after successful login. <a target="_blank" href="https://commits.kde.org/kio/0f2530253adf065959afbaa174e4d3029ff67191">Commit.</a> See bug <a target="_blank" href="https://bugs.kde.org/269370">#269370</a>. See bug <a target="_blank" href="https://bugs.kde.org/165044">#165044</a></li>
<li>Autotests/openurljobtest: ensure to have deleteLater launched. <a target="_blank" href="https://commits.kde.org/kio/4b79f4ade878435184a3b970f071e0886331d87f">Commit.</a></li>
<li>Filewidgets/kfileplacesview: clear job in destructor. <a target="_blank" href="https://commits.kde.org/kio/674a502b72e3dd0b492db437505e981d3749049f">Commit.</a></li>
<li>Autotests: openurljobtest, prevent memleak in negative tests. <a target="_blank" href="https://commits.kde.org/kio/6b112e74fd5b10982dbcd174afcc67f536aeeac0">Commit.</a></li>
<li>Kpasswdserver: prevent memleak of retry dialog. <a target="_blank" href="https://commits.kde.org/kio/729acba1409ccbf75aee5d144e64b8ae929379ca">Commit.</a></li>
<li>Core/kcoredirlister: prevent mem-leak upon redirection. <a target="_blank" href="https://commits.kde.org/kio/b4376a67d32f8d362bb2bf3c6e5d222a776ae507">Commit.</a></li>
<li>Filewidgets/knewfilemenu: prevent small leak. <a target="_blank" href="https://commits.kde.org/kio/ddb8e616c57595c0d7c19b75e42119b3e58f7010">Commit.</a></li>
<li>Autotests/threadtest: prevent memleak in test. <a target="_blank" href="https://commits.kde.org/kio/917169854129d847e47bdfb0c086554423bb6c4b">Commit.</a></li>
<li>KfilePlacesView: delete FileSystemFreeSpaceJob once it is finished. <a target="_blank" href="https://commits.kde.org/kio/cb89b6f6ac82e06b7817aac86a21b88d098834d1">Commit.</a></li>
<li>Krecentdocumenttest: prevent a memleak. <a target="_blank" href="https://commits.kde.org/kio/bd68846567b6684912a18f37bc36ed8737350abc">Commit.</a></li>
<li>DropJob: parent DndPopupMenuPlugin to the dropjob. <a target="_blank" href="https://commits.kde.org/kio/34834830d5ed504450dcddb8f3585e86af95eb94">Commit.</a></li>
<li>Fix protocol in &quot;Destination&quot; header for WebDAV copy/move. <a target="_blank" href="https://commits.kde.org/kio/a4e30ebca073339d496e8a4d924a347e30537b3c">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/487503">#487503</a>. Fixes bug <a target="_blank" href="https://bugs.kde.org/443386">#443386</a></li>
<li>Filepreviewjob: Track subjobs using QPointer. <a target="_blank" href="https://commits.kde.org/kio/8b5b5ac8104754a627dca5caff166cd747a18870">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/517867">#517867</a></li>
<li>Filecopyjob: Pass source file size to put() workers via setSourceSize(). <a target="_blank" href="https://commits.kde.org/kio/723c6921495b1c16d928d5100141dfc39526a4ba">Commit.</a></li>
<li>Tweak ifdef now that we depend on Qt &gt;= 6.9.0. <a target="_blank" href="https://commits.kde.org/kio/3b517c822dc88a51799ea33f071d6feed8629cad">Commit.</a></li>
<li>Core: listjob: Support selective StatDetails for directory listing. <a target="_blank" href="https://commits.kde.org/kio/3d0e07a087a706b7ffa3fb19bd5f047cf7c64cb3">Commit.</a></li>
<li>Gui/filepreviewjob: return an error in case the sub-job failed. <a target="_blank" href="https://commits.kde.org/kio/599015c06c3aecd15af27dd3bfd3a7e3fabeab75">Commit.</a></li>
<li>Gui/filepreviewjob: avoid a crash when temp is removed. <a target="_blank" href="https://commits.kde.org/kio/82c1a1c34ac7b2c8bd21a1b12020c4d7686faf33">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/516575">#516575</a></li>
<li>File: In LSTAT also stat subvolid and mntid when requested. <a target="_blank" href="https://commits.kde.org/kio/c698698b28837e578afcd24c711afc3218cc3922">Commit.</a></li>
<li>Kurlnavigator: Change fallback behaviour for user input url. <a target="_blank" href="https://commits.kde.org/kio/b37126507491be7de55ef06fb6da9bdbbbe9a639">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/408315">#408315</a></li>
<li>Fix some cmake warnings. <a target="_blank" href="https://commits.kde.org/kio/b312008450549147c34656c8b2fd1a4c95651e29">Commit.</a></li>
<li>Filepreviewjob: allow to log the file being previewed. <a target="_blank" href="https://commits.kde.org/kio/5012f5ad42ffca85637cce2514405c4a4c638b62">Commit.</a></li>
<li>Forwardingworkerbase: Forward stat side and details. <a target="_blank" href="https://commits.kde.org/kio/9f3784da4a202a0e60774d08a9e47e8c819c4d5d">Commit.</a></li>
<li>Fix build on macOS relating to tv_nsec. <a target="_blank" href="https://commits.kde.org/kio/b526db12e6ddb746910d6147cf597515015ff42c">Commit.</a></li>
<li>Core/udsentry: don't reduce nanosecond precision to millisecond. <a target="_blank" href="https://commits.kde.org/kio/d59a5dcf5663e61ac674479c2a454301f3145137">Commit.</a></li>
<li>KFileItemDelegate: Use margins directly from style. <a target="_blank" href="https://commits.kde.org/kio/ebd5f9836a8f644068325bf1cea3a96a6bb54624">Commit.</a></li>
</ul>
</details>
<details open="true" id="Kirigami">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kirigami">Kirigami</a></summary><ul>
<li>Disable Alpine CI. <a target="_blank" href="https://commits.kde.org/kirigami/a18dbe4208941b7211f233747903267e2e2c2e1d">Commit.</a></li>
<li>Disable qmllint for some modules. <a target="_blank" href="https://commits.kde.org/kirigami/0228f311838e1159e8afe731cb105fe666b77952">Commit.</a></li>
<li>PageRow: don't leak the dialog layer window. <a target="_blank" href="https://commits.kde.org/kirigami/38dc306a61c89ae694220519a22d9d1d6e4f0104">Commit.</a></li>
<li>Fix AboutPage license sheet. <a target="_blank" href="https://commits.kde.org/kirigami/00e26ee01cfa8061ef73e1b21b4b3014a1de2fd5">Commit.</a></li>
<li>Remove duplicate FeatureSummary include. <a target="_blank" href="https://commits.kde.org/kirigami/fa3a3911a80c16f681539c1d7d1761490648fbf9">Commit.</a></li>
<li>Don't include quiet packages in feature_summary. <a target="_blank" href="https://commits.kde.org/kirigami/0d45a05ccafb164154257845a43777d945dd47f3">Commit.</a></li>
<li>TitleSubtitle: Add tweakable textFormat property. <a target="_blank" href="https://commits.kde.org/kirigami/b2209d7bc1c23a4f5adf6e1d4e709c4d97dff7fa">Commit.</a></li>
<li>Platform: Prefer filesystem over qrc when determining install root. <a target="_blank" href="https://commits.kde.org/kirigami/7c285a733c1624186fd2886f23239c045a0a3703">Commit.</a></li>
<li>LinkButton: Create template, move items from control to template. <a target="_blank" href="https://commits.kde.org/kirigami/b4cd4993b8e78000c009c9dd2ee447f8a7e2bbbb">Commit.</a></li>
</ul>
</details>
<details open="true" id="KItemModels">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kitemmodels">KItemModels</a></summary><ul>
<li>Remove unused cmake variabls. <a target="_blank" href="https://commits.kde.org/kitemmodels/b320ba4a206f1c588ada6c00104baa5e2d7d1643">Commit.</a></li>
</ul>
</details>
<details open="true" id="KNewStuff">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/knewstuff">KNewStuff</a></summary><ul>
<li>Use KF6Kirigami, fix cmake variable use KF_DEP_VERSION. <a target="_blank" href="https://commits.kde.org/knewstuff/45eeb0aedd65242b547a6d8a3f4faefc4e2faf27">Commit.</a></li>
</ul>
</details>
<details open="true" id="KRunner">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/krunner">KRunner</a></summary><ul>
<li>Fix cmake warnings (use correct Qt version). <a target="_blank" href="https://commits.kde.org/krunner/eaf2dac09b2e5a37db516502c1d4bdb98d551585">Commit.</a></li>
</ul>
</details>
<details open="true" id="KService">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kservice">KService</a></summary><ul>
<li>Bump sycoca version after changing the hash. <a target="_blank" href="https://commits.kde.org/kservice/8f056cb5fcb6fc8fbf9fd27dc752fdbba7651169">Commit.</a></li>
<li>Extract to variable. <a target="_blank" href="https://commits.kde.org/kservice/29999ab845002098eb251c0758a4862515c480c0">Commit.</a></li>
<li>Fix a typo in the bitmask used in the hash. <a target="_blank" href="https://commits.kde.org/kservice/7e0182061b922ce20b0d9997b7fe26f4ae4f24c5">Commit.</a></li>
</ul>
</details>
<details open="true" id="KStatusNotifieritem">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kstatusnotifieritem">KStatusNotifieritem</a></summary><ul>
<li>Don't include quiet packages in feature_summary. <a target="_blank" href="https://commits.kde.org/kstatusnotifieritem/cd5b9937cc4c27a4c450461e3d3adc602fe7f57a">Commit.</a></li>
</ul>
</details>
<details open="true" id="KSVG">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/ksvg">KSVG</a></summary><ul>
<li>Add basic test for Svg. <a target="_blank" href="https://commits.kde.org/ksvg/552137ab1eee2f0920815afbb31b6ac05961d19f">Commit.</a></li>
</ul>
</details>
<details open="true" id="KTextEditor">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/ktexteditor">KTextEditor</a></summary><ul>
<li>Don't do reverse encoding if the target is the null char. <a target="_blank" href="https://commits.kde.org/ktexteditor/3ae7657a298e304d70b2f5941e4eeb26bad83d2b">Commit.</a></li>
<li>KTextEditor::DocumentPrivate constructor does the register. <a target="_blank" href="https://commits.kde.org/ktexteditor/bc72e1502dbad534b9f67fdc26501c1ad8d08066">Commit.</a></li>
<li>Katedocument: Use first line of text as document title. <a target="_blank" href="https://commits.kde.org/ktexteditor/a981fa714c8c7b323150906104c8f71051ff6064">Commit.</a></li>
<li>Katedocument: Add relevant MIME types to Save dialog. <a target="_blank" href="https://commits.kde.org/ktexteditor/c72c65c3b994a53ce3aa22dd6192b265401aa2dc">Commit.</a></li>
<li>Remove cmake warning. <a target="_blank" href="https://commits.kde.org/ktexteditor/a02b404eb0874e969f3c918e98113e324ae0c9df">Commit.</a></li>
<li>Update MiniMap Area. <a target="_blank" href="https://commits.kde.org/ktexteditor/319bde40df03f32510fb4f855e2cd25ac9774eda">Commit.</a></li>
</ul>
</details>
<details open="true" id="KUnitConversion">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kunitconversion">KUnitConversion</a></summary><ul>
<li>Add missing since documentation to Momme. <a target="_blank" href="https://commits.kde.org/kunitconversion/a54c7953971885d881ca77b04d791c554fb7c2ef">Commit.</a></li>
<li>Add conversions to/from momme for silk fabric weight. <a target="_blank" href="https://commits.kde.org/kunitconversion/15f4f022d42f3e640867d41a33c7c78734335125">Commit.</a></li>
</ul>
</details>
<details open="true" id="KUserFeedback">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kuserfeedback">KUserFeedback</a></summary><ul>
<li>We depend against qt6. <a target="_blank" href="https://commits.kde.org/kuserfeedback/c5c91c7d06fbb3f738fe71cafbbadbaa4a62dad6">Commit.</a></li>
<li>Fix some cmake warnings. <a target="_blank" href="https://commits.kde.org/kuserfeedback/638275a259595acb6c5060efc92802600094a0d6">Commit.</a></li>
</ul>
</details>
<details open="true" id="KWallet">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kwallet">KWallet</a></summary><ul>
<li>Fix find_package calls when not building kwalletd and ksecretd. <a target="_blank" href="https://commits.kde.org/kwallet/4123ed99b4a0451a6a0149bdb7e376ad73957a42">Commit.</a></li>
<li>Hardcode one short DH key instead of brute-forcing one. <a target="_blank" href="https://commits.kde.org/kwallet/8bfdab0783b1025de3830c5cd0feebf9c57ee429">Commit.</a></li>
<li>Ksecretd: fix intermittent Secret Service session key mismatches with libsecret. <a target="_blank" href="https://commits.kde.org/kwallet/307db62637ac2ca78ff670d746433be9381a923b">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/514194">#514194</a></li>
</ul>
</details>
<details open="true" id="KWidgetsAddons">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kwidgetsaddons">KWidgetsAddons</a></summary><ul>
<li>KMessageBox: Set very long lines to wrap, even on very wide screens. <a target="_blank" href="https://commits.kde.org/kwidgetsaddons/332678d8a4f635d6938eb3e9ec03d845aa89697a">Commit.</a></li>
<li>KAccelatorManager: Avoid unnecessary allocations. <a target="_blank" href="https://commits.kde.org/kwidgetsaddons/4da51204c73e096702cf252fcc2e353ee80efb55">Commit.</a></li>
<li>Add test for resizing dialogs with squeezed messages. <a target="_blank" href="https://commits.kde.org/kwidgetsaddons/18374277e388ac4f76c4dcba78e4d14e05b46d10">Commit.</a></li>
<li>Re-enable logic to allow resizing of some KMessageBox dialogs. <a target="_blank" href="https://commits.kde.org/kwidgetsaddons/31abc8e4238dc4417b6ce000ba1f97a923ea25e9">Commit.</a></li>
</ul>
</details>
<details open="true" id="KWindowSystem">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kwindowsystem">KWindowSystem</a></summary><ul>
<li>Kxcbevent_p.h: FWD KXcbEvent as class instead of struct. <a target="_blank" href="https://commits.kde.org/kwindowsystem/1a6cb51cee32538624e6f76c01d8ba55d30c7f3b">Commit.</a></li>
<li>Add missing Q_EMIT to signal call. <a target="_blank" href="https://commits.kde.org/kwindowsystem/a99f40e9c77245c3647753f7dbb0e8c71028da70">Commit.</a></li>
<li>Platforms/wayland: Fix a crash in WindowEffects::installBlur(). <a target="_blank" href="https://commits.kde.org/kwindowsystem/b7bfe25a9954435b4cb18350784c6efd231cf629">Commit.</a></li>
</ul>
</details>
<details open="true" id="KXMLGUI">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/kxmlgui">KXMLGUI</a></summary><ul>
<li>KKeySequenceWidget: Add text to clear button. <a target="_blank" href="https://commits.kde.org/kxmlgui/f006ebed8a159e51925c83675f1ee11d9dd996f7">Commit.</a></li>
</ul>
</details>
<details open="true" id="Modem Manager Qt">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/modemmanager-qt">Modem Manager Qt</a></summary><ul>
<li>Fix version guards. <a target="_blank" href="https://commits.kde.org/modemmanager-qt/cc0c310f809a405ec90c6796bc82684da23cffe4">Commit.</a></li>
</ul>
</details>
<details open="true" id="Network Manager Qt">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/networkmanager-qt">Network Manager Qt</a></summary><ul>
<li>Fix cmake warnings. <a target="_blank" href="https://commits.kde.org/networkmanager-qt/8e8c89c99b3f365042065048889edf4146972435">Commit.</a></li>
</ul>
</details>
<details open="true" id="QQC2 Desktop Style">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/qqc2-desktop-style">QQC2 Desktop Style</a></summary><ul>
<li>SpinBox: Use displayText for display text. <a target="_blank" href="https://commits.kde.org/qqc2-desktop-style/120035f3e93b82e3aea690041a2467e03c2f8056">Commit.</a></li>
<li>Popup: remove default contentItem. <a target="_blank" href="https://commits.kde.org/qqc2-desktop-style/e3eae33ece17df6042482be2b65e510a07a12116">Commit.</a></li>
<li>Popup: don't clip by default. <a target="_blank" href="https://commits.kde.org/qqc2-desktop-style/90c2ecc0165ca9abc1ff47edb387dcbabae06721">Commit.</a></li>
</ul>
</details>
<details open="true" id="Solid">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/solid">Solid</a></summary><ul>
<li>Fstab: Use qCCritical instead of qCritical. <a target="_blank" href="https://commits.kde.org/solid/237775e1fa904e72989408e79c16f84034d20ded">Commit.</a></li>
</ul>
</details>
<details open="true" id="Sonnet">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/sonnet">Sonnet</a></summary><ul>
<li>Remove seemingly useless text position check. <a target="_blank" href="https://commits.kde.org/sonnet/f20cdb9485ae67293029506fb564038ff113bd8d">Commit.</a></li>
</ul>
</details>
<details open="true" id="Syntax Highlighting">
<summary class="h4"><a target="_blank" href="https://commits.kde.org/syntax-highlighting">Syntax Highlighting</a></summary><ul>
<li>Add highlighting for ISO 10303-21 STEP files. <a target="_blank" href="https://commits.kde.org/syntax-highlighting/e950b3d917e937d55d162bc4eaaea079f8d2d185">Commit.</a></li>
<li>Cmake.xml: update syntax for CMake 4.3. <a target="_blank" href="https://commits.kde.org/syntax-highlighting/d1c7a2ae89b9a76a1fe9ac207550f8284b322d9e">Commit.</a></li>
<li>Adapt XSD and code to docs. <a target="_blank" href="https://commits.kde.org/syntax-highlighting/75b3dd8ab13ebab494eb769d749db5a855a77503">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/517428">#517428</a></li>
<li>Fix reading of spellchecking element to match XSD. <a target="_blank" href="https://commits.kde.org/syntax-highlighting/b88ec9274b59b624544ca18118e901ce1fc4c977">Commit.</a> Fixes bug <a target="_blank" href="https://bugs.kde.org/517428">#517428</a></li>
<li>Add license. <a target="_blank" href="https://commits.kde.org/syntax-highlighting/2a4eba805b99f9524a5bbb94da524e710213f312">Commit.</a></li>
<li>Add PIO Assembler syntax highlighting. <a target="_blank" href="https://commits.kde.org/syntax-highlighting/84e1a97246ec46fc65d66f7f355fba894968dd23">Commit.</a></li>
<li>Add autotest reference file. <a target="_blank" href="https://commits.kde.org/syntax-highlighting/a8f706fa82027c3232eab8425ffefd5beca349a1">Commit.</a></li>
<li>Add syntax file and tests for SAS. <a target="_blank" href="https://commits.kde.org/syntax-highlighting/e485d0b267199dbd9c8573366386acf170073725">Commit.</a></li>
<li>Systemd unit: update to systemd v260. <a target="_blank" href="https://commits.kde.org/syntax-highlighting/03983ea414591708ff791416da8807d372e85914">Commit.</a></li>
</ul>
</details>]]></content></entry><entry><title type="html">Season Of KDE 2026 Conclusion</title><link href="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/</id><author><name>KDE Mentorship</name><uri>https://mentorship.kde.org/</uri></author><published>2026-04-10T00:00:00+00:00</published><updated>2026-04-10T00:00:00+00:00</updated><content type="html"><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Another year, another successful Season Of KDE for 20 contributors!
This article has been co-written with the input from all contributors.</p>
<h1 id="lokalize"><a target="_blank" href="https://apps.kde.org/lokalize/">Lokalize</a></h1>
<p>During Season of KDE 2026, <a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Tanish_Kumar">Tanish Kumar</a> worked on cleaning up the UI in Lokalize, KDE’s translation tool. The main task was fixing an annoying bug where the menu bar kept jumping around whenever you switched tabs, which was solved by giving the menus a stable “skeleton” in the KXMLGUI .rc files. Along the way, a bunch of “ghost actions” were discovered - menu entries that existed only in XML - and actually implemented the missing ones like Cut, Copy, Paste, Alternate Translation, Save All, Revert All, and Close All. He also built a Bookmark Manager dialog so translators can see all their bookmarks in one place.</p>
<p><figure>
<img class="img-fluid" alt="Lokalize menu bar is stable now, no more menus jumping when changing tabs" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/lokalize_menubar.gif"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Navya_Sai_Sadu">Navya Sai Sadu</a> and <a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Kumud">Kumud Sagar</a> fixed navigation inconsistencies in the Editor Tab where shortcuts like “Approve and Go Next” failed to respect active filters and custom ordering in the Translation Units view. They ensured consistent behavior across all related shortcuts, including Next Ready, Next Non-Empty, and Next Bookmark.
They unified the traversal logic so navigation always follows the filtered and ordered entries and users of Lokalize can now navigate through Translation Units using the keyboard shortcuts or the options in Go menu properly..</p>
<p><figure>
<img class="img-fluid" alt="Lokalize translation units view improvements" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/lokalize_fixed_inconsistencies.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<p>Additionally, Kumud identified Lokalize’s on-disk file tracking mechanism and began improving its handling of external file updates.</p>
<p><figure>
<img class="img-fluid" alt="Pop up when opened file in Lokalize is modified by another program" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/on_disk_changes_tracking.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Jaimukund_Bhan">Jaimukund Bhan</a> fixed foundational issues with the Glossary file, ensuring it could be properly loaded, saved, and autosaved, and cleaned up the codebase by removing an obsolete Restore function that no longer made sense once autosaving was in place. Several UI bugs were resolved, including the editor failing to clear when all terms were deleted and incorrect pre-selection behavior when the app started on the Glossary tab. In the second half, Jaimukund improved the manual term addition workflow by replacing silent blank entry creation with a proper dialog prompt, preventing accidental accumulation of empty entries. He also fixed a broken keyboard shortcut for switching to the previously active tab by replacing an index-based tracking variable with a widget pointer, which remains valid even as tab positions change.</p>
<p><figure>
<img class="img-fluid" alt="Window to add a new word in glossary" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/manual_entry_glossary.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Aditya_Sarna">Aditya Sarna</a> made a full Figma redesign for the Glossary tab, which was referenced in several places to implement comprehensive UI and UX improvements. The work involved close collaboration with translators to understand user pain points and iterating on designs based on feedback from the design group. It included replacing button text with icons and adding tooltips to the Add and Delete buttons to clarify their purpose. This was followed by designing a new delete functionality, which introduced a cross button for each entry to make deletion more intuitive. Several additional UI changes were implemented, including shifting elements and improving the overall structure and layout of the Glossary tab. Furthermore, the workflow for adding new terms was refined by moving note text into the dialogue box and enhancing its layout, resulting in a cleaner, more intuitive and user-friendly interface.</p>
<p><figure>
<img class="img-fluid" alt="Figma redesign for Glossary tab" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/lokalize_figma.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Varun_Sajith_Dass">Varun Sajith Dass</a> worked on improving the proofing capabilities of Lokalize and implemented a reactive character consistency check that alerts translators in real-time when special characters are mismatched between the source and target strings. This involved debugging Qt UI signals, resolving macOS build issues with KIO workers, and creating a persistent status bar warning system to enhance the overall translation workflow.</p>
<p><figure>
<img class="img-fluid" alt="Testing the reactive consistency checker in Lokalize. In the highlighted translation unit (Row 11), a special character present in the source string (the colon in 'Origin: %1') is intentionally omitted from the active target translation ('Herkunft %1') to evaluate the mismatch detection logic" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/lokalize_checker.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Vishesh_Srivastava">Vishesh Srivastava</a> worked on adding Appium-based UI testing to KDE’s Lokalize. Vishesh started with a small bug fix and unit test to familiarize with the codebase and then built a complete Appium test from scratch, including basic tests and a full end-to-end workflow. Another thing done was adding accessibility ids in the UI so Appium could interact with the editor. The tests were integrated into the CMake system, ensured they ran independently of the user, and can run with kde-builder tests with a flag. By the end, Vishesh had developed a functional UI testing framework for Lokalize, along with documentation to help future contributors.</p>
<p><figure>
<img class="img-fluid" alt="Workflow test running using appium in Lokalize" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/lokalize_appium.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<h1 id="kde-mentorship-website"><a target="_blank" href="https://invent.kde.org/websites/mentorship-kde-org/">KDE mentorship website</a></h1>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Advaith_Sathish_Kumar">Advaith Sathish Kumar</a> project was transforming <a target="_blank" href="https://mentorship.kde.org">mentorship.kde.org</a> into a proper onboarding system for new KDE contributors. On the homepage, the hero section was redesigned, placeholder routing with experience based navigation was replaced, social media links were added, and the news cards to include author, date, and tags were also redesigned. For the /mentees page, I added past mentee details, implemented pagination, and added client-side filtering by year, program, and technology.</p>
<p><figure>
<img class="img-fluid" alt="Addition of the previous mentees details" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/mentorship_mentees.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Aryan_Rai">Aryan</a>'s project was to make mentorship.kde.org better so that new contributors who want to work with the KDE ecosystem have a better onboarding experience. As part of this effort, a new &quot;/programs&quot; page was added. It gives a structured overview of the main KDE mentorship programs and links to help newcomers find their way around the opportunities more easily.
He also changed the card template to better organize the repository, making it more structured, easier to maintain. Aryan also filled the /resources page with more useful resources for new contributors.</p>
<p><figure>
<img class="img-fluid" alt="Addition of the programs page to mentorship website" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/mentorship_programs.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<h1 id="documentation-website"><a target="_blank" href="https://docs.kde.org/">Documentation website</a></h1>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Mohit_Mishra">Mohit Mishra</a> worked on decoupling the bundled <code>dblatex</code> fork from the <code>docs-kde-org</code> repository and fixing PDF generation for Chinese, Japanese and Korean (CJK) languages for KDE documentation. This involved switching the TeX engine to XeTeX from pdfTeX and then re-integrating the KDE styles. The outputs are now nearly identical, with CJK languages rendering correctly as well. There is still work in process to ensure there are no regressions and we can officially switch to this generation.</p>
<p><figure>
<img class="img-fluid" alt="CJK pdf rendered with XeTex" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/cjk.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<h1 id="scripty"><a target="_blank" href="https://invent.kde.org/sysadmin/l10n-scripty/">Scripty</a></h1>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Aviral_Singh">Aviral Singh</a> and <a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Keshav_Nanda">Keshav Nanda</a> worked on fixing KDE's translation tools so translators can easily locate where text belongs in the code. Keshav corrected the underlying logic to make sure these paths are always accurate, and Aviral built an automated testing system to validate the fix across KDE projects.</p>
<h1 id="marknote"><a target="_blank" href="https://apps.kde.org/marknote/">Marknote</a></h1>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Siddharth_Chopra">Siddharth Chopra</a> worked on Marknote to add source mode for notes. The Source Mode essentially allows users to bypass the rich-text WYSIWYG interface and directly edit the raw markdown. While working on this feature, Siddharth also made a major refactoring of the codebase (on both the QML and C++ sides). Spell checking using Sonnet was also added, among other small fixes and improvements.</p>
<video width="800" controls>
<source src="marknote.webm" type="video/webm">
</video>
<h1 id="kde-eco"><a target="_blank" href="https://eco.kde.org/">KDE Eco</a></h1>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Hrisikesh_Gohain">Hrishikesh Gohain</a> worked on setting up KEcoLab's measurement environment with Wayland on Fedora 43 KDE Plasma Desktop. He ported the Okular measurement scripts from the X11-based xdotool to ydotool and kdotool, which work on both X11 and Wayland. His contributions can be found in this <a target="_blank" href="https://invent.kde.org/sdk/kecolab/-/merge_requests/139">merge request</a>. The original project plan had included measuring the KDE Plasma desktop environment itself. However, porting the Okular scripts to Wayland in the new lab setup turned out to be more complex than expected. Moreover, measuring a desktop environment may need some infrastructure changes to the KEcoLab setup. Hrishikesh is currently working towards it and will continue after SoK26 is over.</p>
<p><figure>
<img class="img-fluid" alt="Measurement script for Okular" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/script_run_lab_pc.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<h1 id="automate-promo-data-collection"><a target="_blank" href="https://community.kde.org/Promo">Automate Promo Data Collection</a></h1>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Chuyen_Nguyen">Chuyen Nguyen</a> wrote automation scripts and created environments for them to perform some of the KDE promotional team's insight data collection tasks. The first script collects KDE's X, Bluesky, Mastodon, and Threads accounts' follower and post counts using a mix of API requests and web scraping methods alongside a local Nitter instance. The second script scrapes the KDE subreddit's Reddit Insights page for weekly metrics on page visits, unique visitors and its total member count and includes a Docker image that allows for headless execution. The final script collects articles related to KDE using Google Alerts emails and performs sentiment analysis on them using a locally run large-language model. The figure below shows output from the follower and post count scraper, Reddit Insights page scraper, and Google Alerts evaluator respectively.</p>
<p><figure>
<img class="img-fluid" alt="Terminal output of the different results of the scripts" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/comp_screenshot.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<h1 id="plasma-setup"><a target="_blank" href="https://kde.org/plasma-desktop/">Plasma Setup</a></h1>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Onat_Ribar">Onat Ribar</a> worked on bringing Plasma Setup, KDE's first-run setup wizard, to Plasma Mobile. Plasma Setup was built with desktop screens in mind, and running it on a phone showed overall accessibility issues including but not limited to overlapping components, content clipping on short window sizes, session buttons that remained tappable beneath wizard pages, and a timezone selector built around an interactive map that was nearly unusable on a small touchscreen. Onat worked through these systematically across the wizard's QML UI, resulting in an adaptive experience across screen sizes and input methods without affecting the desktop UX. Two MRs have been reviewed, merged, and are now part of the upstream codebase in repositories plasma-setup and plasma-workspace.
<figure>
<img class="img-fluid" alt="Setup Wizard for Plasma Setup" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/plasma_setup.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<h1 id="falkon"><a target="_blank" href="https://apps.kde.org/falkon/">Falkon</a></h1>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Sairam_Bisoyi">Sairam</a> developed a XMPP extension that adds a chat client directly into the KDE Falkon browser's sidebar. Written in Python using Slixmpp, the project lets users message each other and run interactive WebXDC apps right inside their chat window. It supports modern XMPP features like Message Carbons (XEP-0280) for device syncing, Message Corrections (XEP-0308) for edits, Emoji Reactions (XEP-0444), and HTTP File Uploads (XEP-0363). This setup turns Falkon into a communication tool without even leaving the browser.
<figure>
<img class="img-fluid" alt="XMPP Support in Falkon through WebXDC" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/falkon-connect.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Shiva_Shankar">J Shiva Shankar</a> added XMPP bookmark syncing to the Falkon browser. The basic setup is working, so whenever you add or update a bookmark, it successfully syncs across your devices. Deleting bookmarks still has a few bugs right now, but they have been documented. He plans to keep contributing after SoK to squash these bugs and get the feature completely polished.
<figure>
<img class="img-fluid" alt="Bookmarks synchronization in Falkon" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/falkon_bookmark_synchro.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<h1 id="mankala-engine"><a target="_blank" href="https://invent.kde.org/games/mankalaengine">Mankala Engine</a></h1>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Sayandeep_Dutta">Sayandeep Dutta</a> helped in redesigning the <a target="_blank" href="https://invent.kde.org/srisharanvs/mankalanextgen">MankalaNextGen</a> GUI with Kirigami and added designs fixing the Main UI and the Game with game boards and shells. He also added music with Qt to Mankala and made translations in Tamil and Hindi. Made assets for the game variants using Krita in their traditional designs and motifs. Started with the review process of MankalaNextGen with the CI build.
<figure>
<img class="img-fluid" alt="Bohnenspiel Board" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/bohnenspiel.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>
<p><a target="_blank" href="https://community.kde.org/SoK/2026/StatusReport/Pavan_Kumar_S_G">Pavan Kumar</a> enhanced MankalaEngine by adding an opening book and investigated performance of multithreaded alpha-beta search using OpenMP, Pthreads and Taskflow. In addition, he enhanced MankalaNextGen by creating visual assets for game boards and seeds and also created logos for MankalaEngine and MankalaNextGen.
<figure>
<img class="img-fluid" alt="New MankalaEngine logo" src="https://mentorship.kde.org/blog/2026-04-10-sok-conclusion/logo.png"
style="max-width: 100%; height: auto"
/>
</figure>
</p>]]></content></entry><entry><title type="html">Testing org.kde.Platform flatpak built in CI</title><link href="https://akselmo.dev/notes/flatpak-kdeplatform-ci/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://akselmo.dev/notes/flatpak-kdeplatform-ci/</id><author><name>Akseli Lahtinen (Aks)</name><uri>https://akselmo.dev/</uri></author><published>2026-04-09T20:53:56+00:00</published><updated>2026-04-09T20:53:56+00:00</updated><content type="html"><![CDATA[<p>Very technical post, feel free to ignore if you're not working on KDE stuff.</p>
<span id="continue-reading"></span>
<p>Since I'm on KDE Linux, I use flatpak apps for pretty much everything, such as Kontact suite.
I wanted to test out how my Breeze changes would look like in KMail and other apps, but I didn't
want to build the whole PIM stack.</p>
<p>Here's how I tested it by building the flatpak-kde-runtime in CI, downloading the built files
and using it as a repository for testing any changes to <code>org.kde.Platform</code> locally.</p>
<ol>
<li>First make changes to the flatpak-kde-runtime, such as this here: <a target="_blank" href="https://invent.kde.org/packaging/flatpak-kde-runtime/-/commits/work%2Fakselmo%2Ftest-breeze">https://invent.kde.org/packaging/flatpak-kde-runtime/-/commits/work%2Fakselmo%2Ftest-breeze</a></li>
<li>Run the CI</li>
<li>Check the pipeline ID for <code>build-runtime-amd64</code>
<ul>
<li>Click the green checkmark, its something like <code>#1210828</code></li>
</ul>
</li>
<li>Download the artifact from here: <a target="_blank" href="https://storage.kde.org/ci-artifacts/packaging/flatpak-kde-runtime/p/PIPELINE_ID_HERE/repository-x86_64.tar.gz">https://storage.kde.org/ci-artifacts/packaging/flatpak-kde-runtime/p/PIPELINE_ID_HERE/repository-x86_64.tar.gz</a></li>
<li>Extract the tar into some folder after downloading</li>
<li>Add it as a repository: <code>flatpak remote-add --no-gpg-verify kde-platform-testing ./repo-x86_64</code></li>
<li>Uninstall the current platform: <code>flatpak uninstall org.kde.Platform --force-remove</code>
<ul>
<li>The force-remove makes sure we do not install any apps, just the platform</li>
</ul>
</li>
<li>Run <code>flatpak install org.kde.Platform</code></li>
<li>Select the <code>kde-platform-testing</code> as the repo to install from</li>
<li>Done!</li>
</ol>
<p>Now any app that uses the version of platform (6.10 in my example) will utilize your
custom built one.</p>
<p><a target="_blank" href="https://brid.gy/publish/mastodon"></a></p>]]></content></entry><entry><title type="html">Akademy 2026: Registration Now Open</title><link href="https://akademy.kde.org/news/2026-04_akademy-2026-registration/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://akademy.kde.org/news/2026-04_akademy-2026-registration/</id><author><name>Akademy</name><uri>https://akademy.kde.org/</uri></author><published>2026-04-09T08:12:13+00:00</published><updated>2026-04-09T08:12:13+00:00</updated><content type="html"><![CDATA[<h2 id="akademy-2026-registration">Akademy 2026: Registration</h2>
<p><strong>Akademy 2026 will be a hybrid event held simultaneously in Graz, Austria,
and Online.</strong></p>
<p>Hundreds of participants from the global KDE community, the wider free and
open source software community, local organisations and software companies
will gather at this year's Akademy 2026 conference. The event will take
place in Graz and Online from Saturday, 19 September to Thursday, 24 September.</p>
<p>KDE developers, artists, designers, translators, users, writers, sponsors and
supporters worldwide will meet face-to-face to discuss key technology issues,
explore new ideas and strengthen KDE's innovative and dynamic culture.</p>
<p><a target="_blank" href="https://conf.kde.org/event/11/">Register</a> now and join us for engaging talks,
workshops, BoFs and coding sessions. Collaborate with your fellow KDE
contributors to fix bugs, pioneer new features and immerse yourself in the
world of open source.</p>
<p>For more information about the conference, visit the
<a target="_blank" href="https://akademy.kde.org/2026/">Akademy 2026</a> website.</p>]]></content></entry><entry><title type="html">Skrooge 26.4.0 released</title><link href="https://skrooge.org/news/2026-04-09-skrooge_26.4.0_released/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://skrooge.org/news/2026-04-09-skrooge_26.4.0_released/</id><author><name>Stéphane MANKOWSKI</name><uri>https://skrooge.org/</uri></author><published>2026-04-09T00:00:00+00:00</published><updated>2026-04-09T00:00:00+00:00</updated><content type="html"><![CDATA[The <a target="_blank" href="https://skrooge.org">Skrooge</a> Team announces the release 26.4.0 version of its popular Personal Finances Manager based on <a target="_blank" href="https://kde.org">KDE Frameworks</a>.
<h3 id="changelog">Changelog</h3>
<ul>
<li>Correction bug 515099: Missing secondary currency value in Accounts totals</li>
<li>Correction bug 514649: Fix initial layout when splash screen is not displayed</li>
<li>Correction bug 514649: Double click issue on table when there is no selection</li>
<li>Correction bug 438967: Labels in Skrooge Report axis and Legend tend to illegible</li>
<li>Correction bug 517475: Alarms triggering even when conditions not met</li>
<li>Correction bug 515186: Import should remember the directory used last when restarted</li>
<li>Correction bug 430245: summaries display truncated after searching in Operations grouped by Category</li>
<li>Correction bug 518461: charts missing in responsive monthly report</li>
<li>Correction: Better filtering in categories page</li>
<li>Correction: Fix various error in flatpak mode (import, download sources, ...)</li>
</ul>]]></content></entry><entry><title type="html">What's New in the Qt GRPC library in 6.11</title><link href="https://www.qt.io/blog/whats-new-in-the-qt-grpc-library-in-6.11?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.qt.io/blog/whats-new-in-the-qt-grpc-library-in-6.11</id><author><name>Qt Dev Loop</name><uri>https://www.qt.io/blog/tag/loop/</uri></author><published>2026-04-08T12:44:08+00:00</published><updated>2026-04-08T12:44:08+00:00</updated><content type="html"><![CDATA[<div class="hs-featured-image-wrapper"> 
 <a target="_blank" href="https://www.qt.io/blog/whats-new-in-the-qt-grpc-library-in-6.11?hsLang=en" title="" class="hs-featured-image-link"> <img src="https://www.qt.io/hubfs/interceptor_logs.webp" alt="What's New in the Qt GRPC library in 6.11" class="hs-featured-image" style="width:auto !important; max-width:50%; float:left; margin:0 15px 15px 0;"> </a> 
</div> 
<p>Qt 6.11 brings a set of meaningful improvements to the <a target="_blank" href="https://doc-snapshots.qt.io/qt6-dev/qtgrpc-index.html">Qt GRPC</a> library, focusing on stability, safety, performance, and new capabilities that make building gRPC™ based applications in Qt more powerful and productive.</p>  
<img src="https://track-eu1.hubspot.com/__ptq.gif?a=149513&amp;k=14&amp;r=https%3A%2F%2Fwww.qt.io%2Fblog%2Fwhats-new-in-the-qt-grpc-library-in-6.11&amp;bu=https%253A%252F%252Fwww.qt.io%252Fblog&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; ">]]></content></entry><entry><title type="html">Krita 5.3.1.1 Released (Android-only)</title><link href="https://krita.org/en/posts/2026/krita-5.3.1.1-released/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://krita.org/en/posts/2026/krita-5.3.1.1-released/</id><author><name>Krita News</name><uri>https://krita.org/en</uri></author><published>2026-04-08T00:00:00+00:00</published><updated>2026-04-08T00:00:00+00:00</updated><content type="html"><![CDATA[<p>Krita 5.3.1.1 is an Android-only fix for 5.3.1. It is exactly the same as Krita 5.3.1, but with two fixes:</p>
<ul>
<li>fixed a crash on Android 12 and older when trying to access any text controls</li>
<li>fix stylus workarounds for Xiaomi and OnePlus to work properly</li>
</ul>
<p>Check out the <a target="_blank" href="https://krita.org/en/release-notes/krita-5-3-release-notes/">release notes</a> for a full overview of all the new features in Krita 5.3 and 6.0.</p>
<p>Note: this release is only relevant for Android, so only Android APK's and source archives are available. You only need the source archive when building for Android yourself.</p>
<blockquote>
<p>[!WARNING]
One again, we consider Krita 5.3.1 suitable for productive work; 6.0.1 is, because of the many changes from Qt5 to Qt6 more experimental.</p></blockquote>
<h2 id="5311-download">5.3.1.1 Download</h2>
<h3 id="android">Android</h3>
<p>Krita on Android is still <strong><em>beta</em></strong>; and is meant to run on chromebooks and tablets only.</p>
<ul>
<li>
<p><a target="_blank" href="https://download.kde.org/stable/krita/5.3.1/krita-x86_64-5.3.1.1-release-signed.apk">64 bits Intel CPU APK</a></p>
</li>
<li>
<p><a target="_blank" href="https://download.kde.org/stable/krita/5.3.1/krita-arm64-v8a-5.3.1.1-release-signed.apk">64 bits Arm CPU APK</a></p>
</li>
<li>
<p><a target="_blank" href="https://download.kde.org/stable/krita/5.3.1/krita-armeabi-v7a-5.3.1.1-release-signed.apk">32 bits Arm CPU APK</a></p>
</li>
</ul>
<h3 id="source-code">Source code</h3>
<blockquote>
<p>[!NOTE]
Note for distributions: if you package both PyQt5 and PyQt6, you will want to patch
our source code with this patch: <a target="_blank" href="https://invent.kde.org/graphics/krita/-/merge_requests/2723">Disallow importing conflicting version of PyQt </a></p></blockquote>
<ul>
<li>
<p><a target="_blank" href="https://download.kde.org/stable/krita/6.0.1/krita-6.0.1.1.tar.gz">krita-6.0.1.1.tar.gz</a></p>
</li>
<li>
<p><a target="_blank" href="https://download.kde.org/stable/krita/6.0.1/krita-6.0.1.1.tar.xz">krita-6.0.1.1.tar.xz</a></p>
</li>
</ul>
<h3 id="md5sum">md5sum</h3>
<p>For all downloads, visit <a target="_blank" href="https://download.kde.org/stable/krita/5.3.1/">https://download.kde.org/stable/krita/5.3.1/</a> and click on &quot;Details&quot; to get the hashes.</p>
<h3 id="key">Key</h3>
<p>The the source tarballs are signed. You can retrieve the public key <a target="_blank" href="https://files.kde.org/krita/dmitry_kazakov.gpg">here</a>. The signatures are <a target="_blank" href="https://download.kde.org/stable/krita/5.3.1/">here</a> (filenames ending in .sig).</p>]]></content></entry><entry><title type="html">Frictionless Implementation of Production-Grade GUI on Torizon Embedded Linux</title><link href="https://www.qt.io/blog/frictionless-implementation-of-production-grade-gui-on-torizon-embedded-linux?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.qt.io/blog/frictionless-implementation-of-production-grade-gui-on-torizon-embedded-linux</id><author><name>Qt Dev Loop</name><uri>https://www.qt.io/blog/tag/loop/</uri></author><published>2026-04-07T10:07:15+00:00</published><updated>2026-04-07T10:07:15+00:00</updated><content type="html"><![CDATA[<p>Evaluating and starting to develop professional, production-grade GUIs on embedded Linux should be frictionless. Based on this statement, we are always working with our partners to improve the Qt developer experience. Together with Toradex we recently made major improvements to the Torizon Qt VS Code template, making it easier for you as a developer to use Qt Device Creation Enterprise workflows inside the same template that you might already have been using with the Device Creation Community Edition. On top of that, there is a brand-new Qt demo in the Torizon Demo Gallery which you can try right away.<br><br>Torizon is a production-ready, container-based embedded Linux platform that simplifies how Qt applications are deployed and maintained. Qt developers may already be familiar with Boot2Qt, which is a useful tool to get a Qt prototype running quickly. However, scaling that prototype into a secure, maintainable, and updatable product usually requires building and managing your own Yocto stack. Torizon removes this burden, providing a pre-integrated OS, hardware-optimized Qt runtime, OTA automated updates, CVE tracking and a consistent containerized workflow, letting you focus entirely on your Qt application instead of maintaining the underlying Linux distribution.Below you’ll find what’s new, why it helps Qt developers, and exactly how to try it.</p>  
<img src="https://track-eu1.hubspot.com/__ptq.gif?a=149513&amp;k=14&amp;r=https%3A%2F%2Fwww.qt.io%2Fblog%2Ffrictionless-implementation-of-production-grade-gui-on-torizon-embedded-linux&amp;bu=https%253A%252F%252Fwww.qt.io%252Fblog&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; ">]]></content></entry><entry><title type="html">SWHID in Practice: SBOM Verification, CRA Compliance, and Traceability Use Cases</title><link href="https://toscalix.com/2026/04/07/swhid-in-practice-sbom-verification-cra-compliance-and-traceability-use-cases/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>http://toscalix.com/?p=3234</id><author><name>Agustín Benito Bethencourt</name><uri>https://toscalix.com</uri></author><published>2026-04-07T06:00:00+00:00</published><updated>2026-04-07T06:00:00+00:00</updated><content type="html">Explore how SWHID is applied in real-world scenarios to improve SBOMs, support Cyber Resilience Act compliance, and enable software traceability. Discover practical use cases across telecom and automotive industries, based on insights from recent industry talks.</content></entry><entry><title type="html">UI walker &amp;#8211; UI Walk through in QML</title><link href="http://renaudguezennec.eu/index.php/2026/04/07/ui-walker-ui-walk-through-in-qml/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>http://renaudguezennec.eu/?p=5115</id><author><name>Renaud Guezennec</name><uri>http://renaudguezennec.eu/</uri></author><published>2026-04-07T00:13:27+00:00</published><updated>2026-04-07T00:13:27+00:00</updated><content type="html"><![CDATA[<h2 class="wp-block-heading" id="the-problem">The problem</h2>



<p>At the first start of an application, user can be a bit confused in front of all of these features, buttons and data.
In response to that, we often have a short presentation of each element on the screen. 
This also presents a typical workflow with the application. </p>



<p>First, You need to create a project or document.
Then, define the name, the type…
Then add content using this or that.</p>



<p>This feature is often called <strong>UI walk through</strong>, or <strong>UI tour</strong>.</p>



<h2 class="wp-block-heading" id="ui-walker">UI Walker</h2>



<p>I made this library to provide an easy way to do a walkthrough in any QML&nbsp;application.</p>



<h3 class="wp-block-heading" id="important-links">Important Links</h3>



<ul class="wp-block-list">
<li>Code source of <a target="_blank" href="https://github.com/obiwankennedy/UiWalker">UiWalker</a>.</li>



<li><a target="_blank" href="https://invent.kde.org/rolisteam/rolisteam/-/blob/master/src/binaries/3DDicer/DiceRollPage.qml?ref_type=heads">QML Item ready for the Walker</a></li>



<li><a target="_blank" href="https://invent.kde.org/rolisteam/rolisteam/-/blob/master/src/binaries/3DDicer/Main.qml?ref_type=heads">QML&nbsp;Window including UiWalker</a></li>
</ul>



<figure class="wp-block-video"><video height="1132" style="aspect-ratio: 535 / 1132;" width="535" controls src="https://renaudguezennec.eu/wp-content/uploads/2026/04/peek_1.webm"></video></figure>



<h2 class="wp-block-heading" id="include-ui-walker-to-your-project">Include Ui Walker to your project</h2>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
target_link_libraries(MyProject
PRIVATE
    Qt6::Core
    Qt6::Quick
    WalkerComponent # add UIWalker
)
</pre></div>


<p>Using <strong>cmake</strong> it is really easy. You can define the library to be a git submodule and then </p>



<h2 class="wp-block-heading" id="prepare-you-qml-code">Prepare you qml code</h2>



<p>The whole concept is based on attached property.
To highlight a item, you must define two properties:</p>



<ul class="wp-block-list">
<li>WalkerItem.description: the text that will be displayed when this element is highlighted</li>



<li>WalkerItem.weight: Numeric value to define the order (ascending order).</li>
</ul>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: css; title: ; notranslate">
ToolButton &#123;
    WalkerItem.description: qsTr(&quot;Description of the element&quot;)
    WalkerItem.weight: 104
}
</pre></div>


<h2 class="wp-block-heading" id="add-the-ui-walker">Add the UI walker</h2>



<p>Currently, you have to add one item. It should have the size of the whole window.
This item provides several properties in order to help you manage the output. </p>



<p>Properties:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>name</th><th>description</th><th>type</th></tr></thead><tbody><tr><td>count</td><td>Total number of highlighted Item</td><td>int</td></tr><tr><td>current</td><td>Index of the current highlighted item</td><td>int</td></tr><tr><td>currentDesc</td><td>Description of the current item</td><td>QString</td></tr><tr><td>dimColor</td><td>Color which hides the rest of the application</td><td>QColor</td></tr><tr><td>dimOpacity</td><td>Opacity of the dim</td><td>qreal</td></tr><tr><td>availableRect</td><td>Biggest Rectangle (where text can be displayed).</td><td>QRectF</td></tr><tr><td>borderRect</td><td>Rect of the current highlighted item</td><td>QRectF</td></tr><tr><td>interval</td><td>Define the time interval on each highlighted item</td><td>int</td></tr><tr><td>active</td><td>True when the Walker is displayed</td><td>bool</td></tr></tbody></table></figure>



<p>Here is an example:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: css; title: ; notranslate">
 WalkerItem &#123;
    id: walker
    anchors.fill: parent
    visible: false
    dimOpacity: 0.8

    onActiveChanged: &#123;
        //walker.active
    }
        
    Label &#123;
        id: label

        
        text: walker.currentDesc // text from walker
        x: walker.availableRect.x // calculated position
        y: walker.availableRect.y // calculated position
        width: walker.availableRect.width // calculated position
        height: walker.availableRect.height // calculated position
    }
    
    Rectangle &#123;
        x: walker.borderRect.x-2
        y: walker.borderRect.y-2
        width: walker.borderRect.width+4
        height: walker.borderRect.height+4
        border.color: &quot;red&quot;
        color: &quot;transparent&quot;
        radius: 10
        border.width: 4
    }

    ToolButton &#123;
        icon.source: walker.current + 1 === walker.count ? &quot;qrc:/finish.svg&quot; : &quot;qrc:/next.svg&quot;
        
        onClicked:&#123;
            if(walker.current +1 === walker.count)
                walker.skip()
            else
                walker.next()
        }   
    }
}

</pre></div>


<h3 class="wp-block-heading" id="react-on-highlight-event">React on Highlight event</h3>



<p>Highlighted items get notified through two signals: <code>enter</code> and <code>exit</code>. 
Defining signal handlers allow you to react. So you can show the full workflow to add new data.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: css; title: ; notranslate">
TextField &#123;
    id: nameField
    // …
    WalkerItem.description: qsTr(&quot;Set macro name.&quot;)
    WalkerItem.weight: 30
    WalkerItem.onEnter: &#123;
        nameField.text = qsTr(&quot;Skill Roll&quot;)
    }
}

</pre></div>


<h3 class="wp-block-heading" id="start-it-">Start it !</h3>



<p>In order, to start the UI&nbsp;tour, you simply have to call the function: <code>start()</code> of the Item.
Of course, it is up to you to trigger it automatically when it&#8217;s the first start of the application or if the user asked for the tour.</p>



<p>Here you have an example:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: css; title: ; notranslate">
Component.onCompleted: &#123;
    if(DiceMainController.uiTour === DiceMainController.UnDone) &#123;
        walker.start()
    }
}

</pre></div>


<p>I have a CPP controller with property <code>UiTour</code> which gives the current status of the tour.
Here, I call directly the walker function. But it may be safer to call a function to reset the state of the window.</p>



<h3 class="wp-block-heading" id="navigation">Navigation</h3>



<p>The walker provides two important function <code>next()</code> and <code>previous()</code> to navigate. 
Basically on the walker, you can add buttons in the <strong>available Rect</strong> to manage the navigation. </p>



<p>Other option, you can define an interval in milliseconds which will call the <code>next()</code> function.</p>



<p>You have to make sure the item is visible while the walker highlight it. It could be tricky to make the path from the end to be beginning. In some case, it is easier to never use the <code>previous</code> function. </p>



<h3 class="wp-block-heading" id="finish-it">Finish it!</h3>



<p>Calling the function <code>skip()</code>, close the walker. Then the application is displayed normally.
It can be called at any time. </p>



<h3 class="wp-block-heading" id="cheat-code">Cheat code</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Function</th><th>description</th></tr></thead><tbody><tr><td>start()</td><td>The walker becomes visible, and the first item is highligthed</td></tr><tr><td>next()</td><td>Highlight the next item, trigger appropriated signals</td></tr><tr><td>previous()</td><td>Highlight the previous item, trigger appropriated signals</td></tr><tr><td>skip()</td><td>Hide the walker</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="how-it-works-">How it works ?</h2>



<h3 class="wp-block-heading" id="the-attached-properties">The attached properties</h3>



<p>In order to harvest all data from the QML, I had to define attached property. </p>



<p>This is the definition of QObject which will be attached, each time a QML&nbsp;item has defined any&nbsp;Walker property.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
class WalkerAttachedType : public QObject
&#123;
    Q_OBJECT
    Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged FINAL)
    Q_PROPERTY(int weight READ weight WRITE setWeight NOTIFY weightChanged FINAL)
    QML_ANONYMOUS
public:
    explicit WalkerAttachedType(QObject* parent= nullptr);
    //…
signals:
    void enter();
    void exit();
    //…
};

</pre></div>


<p>In the WalkerItem.h, I have to create this static function.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
    // …
    Q_OBJECT
    QML_ATTACHED(WalkerAttachedType)
    // …
    static WalkerAttachedType* qmlAttachedProperties(QObject* object)
    &#123;
        QQuickItem* item= qobject_cast&lt;QQuickItem*&gt;(object);
        if(!item)
            qDebug() &lt;&lt; &quot;Walker must be attached to an Item&quot;;
        s_items.append(item);
        return new WalkerAttachedType(object);
    }

</pre></div>


<h3 class="wp-block-heading" id="qscenegraph-and-nodes">QSceneGraph and Nodes</h3>



<p><code>WalkreItem</code> defines a QML&nbsp;item, written in <strong>cpp</strong> to be light-weighted. 
I used <code>QSGNode</code> to draw it on screen. The item code manages the logic of the walkthrough and the update of the geometry.</p>



<p>To make it short, the SceneGraph is the rendering engine of QML. <strong>QSGNode</strong> defines an API to communicate with it directly.</p>



<p>First, I create the QML item in cpp, using QSGNode to be rendered.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
//walkeritem.h
class WalkerItem : public QQuickItem
&#123;
    Q_OBJECT
    QML_ATTACHED(WalkerAttachedType)
    QML_ELEMENT
    Q_PROPERTY(QString currentDesc READ currentDesc NOTIFY currentChanged FINAL)
    Q_PROPERTY(QColor dimColor READ dimColor WRITE setDimColor NOTIFY dimColorChanged FINAL)
    Q_PROPERTY(qreal dimOpacity READ dimOpacity WRITE setDimOpacity NOTIFY dimOpacityChanged FINAL)
    Q_PROPERTY(QRectF availableRect READ availableRect NOTIFY availableRectChanged FINAL)
    Q_PROPERTY(QRectF borderRect READ borderRect NOTIFY borderRectChanged FINAL)
    Q_PROPERTY(int interval READ interval WRITE setInterval NOTIFY intervalChanged FINAL)
    Q_PROPERTY(bool active READ active NOTIFY activeChanged FINAL)
public:
    WalkerItem();
    
    // accessors, signals, slots…

protected:
    QSGNode* updatePaintNode(QSGNode*, UpdatePaintNodeData*) override;// update scenegraph
};



//walkeritem.cpp
WalkerItem::WalkerItem()// in the constructor
&#123;
    setFlag(QQuickItem::ItemHasContents);// must be called
    connect(child, &amp;QQuickItem::widthChanged, this, &amp;WalkerItem::updateComputation);
    connect(child, &amp;QQuickItem::heightChanged, this, &amp;WalkerItem::updateComputation);
}

void WalkerItem::updateComputation()
&#123;
    // compute geometry and list any changes that must be sync with the SceneGraph.
    m_change|= WalkerItem::ChangeType::GeometryChanged;
    update();// call to paint the item
}

QSGNode* WalkerItem::updatePaintNode(QSGNode* node, UpdatePaintNodeData*)
&#123;
    auto wNode= static_cast&lt;WalkerNode*&gt;(node);
    if(!wNode)
    &#123;
        wNode= new WalkerNode();//first time
    }

    if(m_change &amp; WalkerItem::ChangeType::ColorChanged)
        wNode-&gt;updateColor(m_dimColor);
    if(m_change &amp; WalkerItem::ChangeType::GeometryChanged)
        wNode-&gt;update(boundingRect(), m_targetRect);
    if(m_change &amp; WalkerItem::ChangeType::OpacityChanged)
        wNode-&gt;updateOpacity(m_dimOpacity);

    m_change= WalkerItem::ChangeType::NoChanges;
    return wNode;
}

</pre></div>


<p>We have here an item with a geometry like any other item (x,y,width, height), we also have a <em>dimColor</em> and <em>dimOpacity</em>.
Any time one of these properties change. I have to sync with the QSceneGraph to update either the geometry, the <em>dimColor</em> or the <em>dimOpacity</em>.
Each time, one property changes, I stored the type of change in the <code>m_change</code> member and I call <code>update()</code>.</p>



<p>The render engine will call my item with the QSGNode reprenting it on the SceneGraph side. 
Then I can call function on my SGNode. When sync is finished I reset the change to NoChange and return the node.</p>



<p>The <code>updatePaintNode</code> can be called with a null node. In this case, you have to create it. It will be the case, the first time. And it could happen later in some cases for optimalization reason.</p>



<p>Now, let see the code of the QSGNode.&nbsp;You have to see the QSGNode as the root item of a tree. Where each node is in charge of representing one aspect of the item: its geometry, its color and its opacity.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
// header
class WalkerNode : public QSGNode
&#123;
public:
    WalkerNode();
    virtual ~WalkerNode();
    void update(const QRectF&amp; outRect, const QRectF&amp; inRect);
    void updateColor(const QColor&amp; dim);
    void updateOpacity(qreal opacity);

private:
    QSGOpacityNode m_opacity;
    QSGFlatColorMaterial m_dimMat;
    QSGGeometryNode m_dim;
};

</pre></div>


<p>In the constructor, I create each node, and then I define the hierarchy.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
WalkerNode::WalkerNode()
&#123;
    auto dimGeo= new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 0);
    dimGeo-&gt;setDrawingMode(QSGGeometry::DrawTriangles);
    dimGeo-&gt;allocate(triangleCount * 3);

    m_dim.setGeometry(dimGeo);
    m_dim.setMaterial(&amp;m_dimMat);
    m_dimMat.setColor(Qt::black);

    m_opacity.setOpacity(0.6);

    m_opacity.appendChildNode(&amp;m_dim);
    appendChildNode(&amp;m_opacity);

    markDirty(QSGNode::DirtyMaterial | QSGNode::DirtyGeometry | QSGNode::DirtyOpacity);
}

</pre></div>


<p>Here the final tree:</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="821" height="1024" src="https://renaudguezennec.eu/wp-content/uploads/2026/04/graphviz-821x1024.png" alt="" class="wp-image-5117" srcset="http://renaudguezennec.eu/wp-content/uploads/2026/04/graphviz-821x1024.png 821w, http://renaudguezennec.eu/wp-content/uploads/2026/04/graphviz-240x300.png 240w, http://renaudguezennec.eu/wp-content/uploads/2026/04/graphviz-768x958.png 768w, http://renaudguezennec.eu/wp-content/uploads/2026/04/graphviz-1231x1536.png 1231w, http://renaudguezennec.eu/wp-content/uploads/2026/04/graphviz-1642x2048.png 1642w, http://renaudguezennec.eu/wp-content/uploads/2026/04/graphviz-620x773.png 620w" sizes="(max-width: 821px) 100vw, 821px" /></figure>



<h4 class="wp-block-heading" id="define-or-update-the-geometry">Define or Update the geometry</h4>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
void WalkerNode::update(const QRectF&amp; out, const QRectF&amp; in)
&#123;
    // out is the geometry of the window
    // in is the geometry of the highlighted item
    const auto a= out.topLeft();
    const auto b= in.topLeft();
    const auto c= in.topRight();
    const auto d= out.topRight();
    const auto e= in.bottomRight();
    const auto f= out.bottomRight();
    const auto g= in.bottomLeft();
    const auto h= out.bottomLeft();

    &#123;
        auto gem= m_dim.geometry();
        auto vertices= gem-&gt;vertexDataAsPoint2D();
        QList&lt;std::array&lt;QPointF, 3&gt;&gt; triangles&#123;&#123;a, b, d}, &#123;b, d, c}, &#123;d, c, f}, &#123;c, f, e},
                                                &#123;f, e, h}, &#123;e, g, h}, &#123;h, g, a}, &#123;g, a, b}};
        int i= 0;
        for(auto t : triangles)
        &#123;
            vertices&#x5B;i + 0].set(t&#x5B;0].x(), t&#x5B;0].y());
            vertices&#x5B;i + 1].set(t&#x5B;1].x(), t&#x5B;1].y());
            vertices&#x5B;i + 2].set(t&#x5B;2].x(), t&#x5B;2].y());
            i+= 3;
        }

        m_dim.markDirty(QSGNode::DirtyGeometry | QSGNode::DirtyMaterial);
    }

    markDirty(QSGNode::DirtyGeometry | QSGNode::DirtyMaterial);
}

</pre></div>


<p>We split the surface we have to cover in triangles.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://renaudguezennec.eu/wp-content/uploads/2026/04/drawing-1024x576.png" alt="" class="wp-image-5116" srcset="http://renaudguezennec.eu/wp-content/uploads/2026/04/drawing-1024x576.png 1024w, http://renaudguezennec.eu/wp-content/uploads/2026/04/drawing-300x169.png 300w, http://renaudguezennec.eu/wp-content/uploads/2026/04/drawing-768x432.png 768w, http://renaudguezennec.eu/wp-content/uploads/2026/04/drawing-620x349.png 620w, http://renaudguezennec.eu/wp-content/uploads/2026/04/drawing.png 1080w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="todo">Todo</h2>



<ol class="wp-block-list">
<li>Animations: Smooth animation while transiting from one item to another.</li>



<li>Test on bigger apps</li>



<li>Find a logic to allow previous</li>



<li>Use shader effect to make it better.</li>



<li>Other…</li>
</ol>



<h2 class="wp-block-heading" id="conclusion">Conclusion:</h2>



<p>UiWalker is already in production. It works like a charm. I hope to use it elsewhere. Then, I will add some new features. Contributions and comments are welcomed.</p>



<p>Hope you find this article interesting.</p>]]></content></entry><entry><title type="html">KDE Plasma 6.6.4, Bugfix Release for April</title><link href="https://kde.org/announcements/plasma/6/6.6.4/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://kde.org/announcements/plasma/6/6.6.4/</id><author><name>KDE Community</name><uri>https://kde.org/</uri></author><published>2026-04-07T00:00:00+00:00</published><updated>2026-04-07T00:00:00+00:00</updated><content type="html"><![CDATA[<p>Tuesday, 7 April 2026. Today KDE releases a bugfix update to KDE Plasma 6, versioned 6.6.4.</p>
<p><a target="_blank" href="https://kde.org/announcements/plasma/6/6.6.0/">Plasma 6.6</a> was released in February 2026 with many feature refinements and new modules to complete the desktop experience.</p>
<p>This release adds three weeks’ worth of new translations and fixes from KDE’s contributors. The bugfixes are typically small but important and include:</p>
<a target="_blank" href="https://kde.org/announcements/changelogs/plasma/6/6.6.3-6.6.4">View full changelog</a>]]></content></entry><entry><title type="html">Halfway there to 6.7: Updates on Oxygen and Air</title><link href="https://filipfila.wordpress.com/2026/04/05/halfway-there-to-6-7-updates-on-oxygen-and-air/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>http://filipfila.wordpress.com/?p=840</id><author><name>Filip Fila</name><uri>https://filipfila.wordpress.com</uri></author><published>2026-04-05T07:00:20+00:00</published><updated>2026-04-05T07:00:20+00:00</updated><content type="html">The last post regarding work on fixing Oxygen was a month and a half ago. With all that's happened in between, it feels like so much more time has actually passed. With this post, I'd like to do a sort of mid-term update summing up all of the improvements done so far. These improvements are...... &lt;a class="more-link" target="_blank" href="https://filipfila.wordpress.com/2026/04/05/halfway-there-to-6-7-updates-on-oxygen-and-air/#more-840">Continue Reading &amp;#8594;&lt;/a></content></entry><entry><title type="html">Project Wrap-Up: XMPP Bookmark Sync for Falkon</title><link href="https://shibe-bit.github.io/SOK-2026/Finalpost/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://shibe-bit.github.io/SOK-2026/Finalpost/</id><author><name>Shiva Shankar</name><uri>https://shibe-bit.github.io/</uri></author><published>2026-04-05T00:00:00+00:00</published><updated>2026-04-05T00:00:00+00:00</updated><content type="html">1.</content></entry><entry><title type="html">Splashscreen contributions</title><link href="https://www.digikam.org/news/2026-04-05-splashscreen_contributions/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.digikam.org/news/2026-04-05-splashscreen_contributions/</id><author><name>digiKam</name><uri>https://www.digikam.org/</uri></author><published>2026-04-05T00:00:00+00:00</published><updated>2026-04-05T00:00:00+00:00</updated><content type="html"><![CDATA[<p><a target="_blank" href="https://www.digikam.org/img/photos/splash-digikam/9.0.0.webp"><img src="https://www.digikam.org/img/photos/splash-digikam/9.0.0.webp" alt="" title="digiKam 9.0.0 Splash-screen"></a></p>
<p>For the next digiKam releases, the digiKam team needs photographs for digiKam and Showfoto splash-screens.
Proposing photo samples as splash-screens is a simple way for users to contribute to digiKam project. The pictures must be correctly exposed/composed, and the subject must be chosen from a real photographer&rsquo;s inspiration. Note that we will add a horizontal frame to the bottom of the image as in the current splashes.</p>]]></content></entry><entry><title type="html">Kdenlive 26.04 RC ready for testing</title><link href="https://kdenlive.org/news/releases/26.03.90/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://kdenlive.org/news/releases/26.03.90/</id><author><name>Kdenlive</name><uri>https://kdenlive.org/</uri></author><published>2026-04-04T09:00:00+00:00</published><updated>2026-04-04T09:00:00+00:00</updated><content type="html"><![CDATA[<p>The Kdenlive 26.04 Release Candidate is ready for testing. Many bug fixes and workflow adjustments should make your editing sessions nicer. It is also worth noting that we had quite a few new contributors helping our small team on this, so thanks to all those who helped us!</p>
<p>Please remember that this is an RC version, not yet final, to be used only for testing and reporting issues.</p>
<h3 id="features-highlights">Features highlights:</h3>
<figure class="text-center ratio ratio-16x9" style="">
<video muted loop controls><source src="https://kdenlive.org/news/releases/26.03.90/transition-preview.webm" type="video/mp4" /></video></figure>
<ul>
<li>Added animated previews for transitions</li>
<li>Added a feature to mirror the monitor to an external monitor, allowing you to see the image in the usual interface, while duplicating the output to a secondary monitor</li>
<li>Added an entry in the timeline context menu to directly import a clip to the project and add it at click position</li>
<li>Added an option to always zoom on the mouse position instead of the timeline playhead</li>
<li>Generate audio thumbnails for sequences</li>
<li>Dropping a transition to timeline will automatically adjust its duration to the above/below clips</li>
<li>Allow changing speed of multiple clips</li>
</ul>
<h3 id="feedback-needed">Feedback Needed</h3>
<p>Now is your chance to test it and let us know if you encounter any bugs or have suggestions to help us polish the final release. Share your feedback in the comments below</p>
<h3 id="available-binaries">Available Binaries</h3>
<p>The AppImage and Windows versions can be downloaded through the links below. Update: the MacOS binaries are now also available</p>
<p><strong>Download the binaries from below and give it a spin!</strong></p>
<p>Pre-release binaries can be downloaded <a target="_blank" href="https://kdenlive.org/news/releases/26.03.90/#pre-release-binaries">here</a>.</p>]]></content></entry><entry><title type="html">FOSSGIS Conference 2026</title><link href="https://www.volkerkrause.eu/2026/04/04/osm-fossgis-conferenz-2026.html?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.volkerkrause.eu/2026/04/04/osm-fossgis-conferenz-2026</id><author><name>Volker Krause</name><uri>https://www.volkerkrause.eu/</uri></author><published>2026-04-04T05:45:00+00:00</published><updated>2026-04-04T05:45:00+00:00</updated><content type="html"><![CDATA[<p>Last week I attended this year’s <a target="_blank" href="https://fossgis-konferenz.de/2026/">FOSSGIS-Konferenz</a> in Göttingen, Germany,
focusing on public transport and indoor navigation topics.</p>

<figure>
  
  <img src="https://www.volkerkrause.eu/assets/posts/229/fossgis-konferenz-2026-group-photo.jpg" alt="Group photo of about 1000 FOSSGIS 2026 conference attendees." loading="lazy" />
  
  <figcaption>Photo by FOSSGIS e.V.</figcaption>
</figure>

<h3 id="osm-indoor-mapping">OSM indoor mapping</h3>

<p>As it is tradition by now, <a target="_blank" href="https://tobias-knerr.de/">Tobias</a> and I hosted the <a target="_blank" href="https://pretalx.com/fossgis2026/talk/MVPRLD/">Indoor OSM BoF</a>.</p>

<p>The (translated) session notes are <a target="_blank" href="https://wiki.openstreetmap.org/wiki/Indoor_OSM_user_meeting_at_FOSSGIS-Konferenz_2026">in the wiki</a>.
There’s some recurring themes, such as increasing the level of detail in the third dimension,
as well as how to properly map inclined areas and two-dimensional walls. None of that has a good solution yet, so we are trying to get the right
people together for a multi-day in-person workshop to finally progress those topics.</p>

<p>I’m also increasingly wondering whether we need to replace the term “indoor” in this context, as that means
different things to different people:</p>
<ul>
  <li>Mapping physically within a building. That separation is all but clear-cut though, in particular in and around train stations.</li>
  <li>Mapping using areas rather than ways. That’s also not unique for being “indoor”.</li>
  <li>Using the <code class="language-plaintext highlighter-rouge">level</code> tagging from <a target="_blank" href="https://wiki.openstreetmap.org/wiki/Simple_Indoor_Tagging">SIT</a>. While referring to
“floor levels”, this is the best way we have to place features vertically, and that’s also something that isn’t limited
to buildings.</li>
</ul>

<p><a target="_blank" href="https://kate-editor.org">Kate</a> getting <a target="_blank" href="https://invent.kde.org/frameworks/syntax-highlighting/-/merge_requests/786">syntax highlighting for ISO 10303-21 STEP files</a>,
a file format used in <a target="_blank" href="https://en.wikipedia.org/wiki/Building_information_modeling">building information modeling (BIM)</a>
(ie. the best possible data source for importing building geometry into OSM) is of course purely coincidental.</p>

<h3 id="indoor-routing">Indoor routing</h3>

<p>Triggered by talks on indoor navigation in previous years which weren’t as forthcoming
with actually publishing their code or papers as one might expect for a conference with “FOSS” in the name
already, <a target="_blank" href="https://pretalx.com/fossgis2026/talk/CYW3VL/">I presented</a> the work we did in <a target="_blank" href="https://kde.org">KDE</a>
for OSM-based indoor routing for <a target="_blank" href="https://apps.kde.org/itinerary">Itinerary</a> and <a target="_blank" href="https://apps.kde.org/kongress">Kongress</a>.</p>

<p>The implementation is part of the <a target="_blank" href="https://commits.kde.org/kosmindoormap">KOSMIndoorMaps</a> library and
uses <a target="_blank" href="https://recastnav.com/">Recast Navigation</a> under the hood. This works solely on areas, without needing an explicit routing graph.
And it allows for routing to/from any arbitrary point, which is a requirement for localization/navigation use-cases.
There’s drawbacks as well, directional cost on inclined ways are hard to consider with this for example.</p>

<figure>
  
  <img src="https://www.volkerkrause.eu/assets/posts/229/fossgis-2026-osm-indoor-routing-talk.jpg" alt="Myself on stage presenting the OSM Indoor Routing talk." loading="lazy" />
  
  <figcaption>OSM Indoor routing talk.</figcaption>
</figure>

<p>Richard from TU Dresden <a target="_blank" href="https://pretalx.com/fossgis2026/talk/XR3EJ7/">presented an alternative approach</a>
for indoor routing, semi-automatically generating routing graphs inside areas. This provides visually nicer
results in narrow corridors, but becomes more challenging in open areas. By pure chance both our talks
used the same building for demonstration, quite useful for discussing the strength and weaknesses of both ways.</p>

<p>Another topic of discussions was how to scale this up from working on a single building to something a
planet-scale router such as <a target="_blank" href="https://motis-project.org">MOTIS</a> could integrate. Neither approach is well suited
for that out of the box.</p>

<h3 id="transitous">Transitous</h3>

<p><a target="_blank" href="https://transitous.org">Transitous</a> was featured in <a target="_blank" href="https://pretalx.com/fossgis2026/talk/PKLL8T/">Felix’ and Robin’s talk about new developments in MOTIS</a>.
Many of the new features presented there can already be seen in use on Transitous.</p>

<p>The conference provided the opportunity to talk to data providers about what we would need or would like to have
for Transitous, as well as to data consumers, such as <a target="_blank" href="https://www.comaps.app/">CoMaps</a>, who are exploring integrating
public transport routing.</p>

<p>And with several Transitous contributors around we also discussed a bunch of topics being currently looked into:</p>
<ul>
  <li>How to integrate the Danish Siri-over-AMQP feeds.</li>
  <li>Parsing issues with the Swiss aerial lift NeTEx feed.</li>
  <li>Sorting out the API key handling for the Baden-Württemberg Amarillo ride sharing feed.</li>
  <li>Implementing spport for temporary POIs such as events.</li>
  <li>Getting “DIID” elevator identifiers into OSM, for matching SIRI-FM realtime status feeds to OSM data for routing.</li>
  <li>How to integrate empirical delay data into the MOTIS API.</li>
</ul>

<h3 id="kde-itinerary">KDE Itinerary</h3>

<p>I also met a few <a target="_blank" href="https://apps.kde.org/itinerary">Itinerary</a> users and got feedback on current issues.
An area that needs work is the fallback handling in the <a target="_blank" href="https://commits.kde.org/kpublictransport">KPublicTransport</a> library.
We aren’t very good (yet) at switching to different sources when the primary one fails to deliver useful results.
With the DB API becoming increasingly unreliable due to randomly blocking access (not just our apps,
also affects their website), this becomes increasingly visible.</p>

<h3 id="fossgis-ev">FOSSGIS e.V.</h3>

<p><a target="_blank" href="https://fossgis.de">FOSSGIS e.V.</a> is the German local chapter for OSM, and the organizer of the FOSSGIS-Konferenz.
Given the significant overlap in topics (and some overlap in people) FOSSGIS e.V. has been one of the obvious organizational
umbrellas for both the <a target="_blank" href="https://open-transport.org">Open Transport Community Conference</a> and Transitous.</p>

<p>This has been moving forward recently, and will solve a few practical problems:</p>
<ul>
  <li>Allow us to hold assets like domains independent of individual contributors, removing single points of failure.</li>
  <li>Allows us to receive and spend money in a clean way.</li>
</ul>

<p>This is rather important for the long-term sustainability of both initiatives. Being able to handle money is especially pressing for the
Open Transport conference, as given the rather expensive location this year we’d like to offer some form of travel
support for people who aren’t attending this as part of their job.</p>

<h3 id="dynamic-traffic-data">Dynamic traffic data</h3>

<p>Following a <a target="_blank" href="https://pretalx.com/fossgis2026/talk/QKQH9H/">joined HeiGIT/BKG talk on routing quality</a> there were a lot of
hallway discussions on dynamic traffic data, as well as a
<a target="_blank" href="https://wiki.openstreetmap.org/wiki/FOSSGIS_2026/OSM-Samstag/Ergebnisse#Zeitweise_Sperrungen_von_Stra%C3%9Fen_und_Wegen">session</a>
during the unconference part, all focusing on a proper free and open solution for this.</p>

<p>Dynamic traffic data includes:</p>
<ul>
  <li>(Aggregated) realtime traffic flow data (ie. current traffic jams).</li>
  <li>Raw traffic flow sensor data, ie. sensors counting vehicles or floating vehicle position/speed vector data.</li>
  <li>Statistical traffic flow data (ie. high traffic expected during specific times).</li>
  <li>Dynamic traffic sign data, such as adaptive speed limits.</li>
  <li>Temporary closures due to construction work, accidents, etc.</li>
  <li>Realtime availability data for bike or car parking spaces.</li>
</ul>

<p>This is crucial information for road routing, traffic planning and research. However currently this data is collected and owned
by a few proprietary vendors. Google is a particularly big player here, using the position data submitted by Android phones.</p>

<p>In order to build a free and open replacement the only chance we have is to do that jointly, between all parties with any interest
in this, otherwise this wont gather the necessary critical mass. Doing this under the OSM umbrella seems to be the
obvious choice, especially since this needs to be mapped on to the static OSM road network data anyway.</p>

<p>It would certainly be an ambitious project, but there’s a bunch of building blocks to work with already:</p>
<ul>
  <li>Sensor data from some public authorities, with various levels of processing applied.</li>
  <li>A few cases of realtime data for dynamic traffic signs from their operators.</li>
  <li>(Planned) construction site data in <a target="_blank" href="https://en.wikipedia.org/wiki/Datex_II">Datex II format</a> by public authorities,</li>
  <li>Floating vehicle information from <a target="_blank" href="https://gtfs.org">GTFS-RT</a> vehicle position feeds for busses (which we consume for Transitous already).</li>
  <li>A community maintained <a target="_blank" href="https://closures.osm.ch/">road closure/construction database from SOSM</a>.</li>
  <li>Realtime parking data, partially even in standardized <a target="_blank" href="https://github.com/offenesdresden/ParkAPI">ParkAPI</a> or Datex II formats.</li>
  <li>Crowd sourcing in end user apps like <a target="_blank" href="https://comaps.app">CoMaps</a> is likely also a viable option, similar to the work on
<a target="_blank" href="https://fosdem.org/2026/schedule/event/Z9GDAF-crowdsourcing_delay_information/">crowd sourcing delay information for Transitous</a>.</li>
</ul>

<p>While this is mostly affecting roads (and thus cars and busses), construction work can also affect pedestrian and bike routing,
either entirely or by changing e.g. relevant accessibility properties for wheelchair routing. There was agreement that any free and open
effort should equally consider those modes of transportation.</p>

<p>The open source routing engines either already have support for integrating dynamic traffic data, or have adding support
on their roadmap, Transitous would certainly integrate that as well. Public agencies were equally interested
in open traffic data, but not all of them did show quite the same enthusiasm for also contributing to that yet.</p>

<p>All this gave me a slight <a href="//www.volkerkrause.eu/2024/02/10/fosdem-2024-open-public-transport-routing.html">déjà vu to the state of public transport routing prior to FOSSDEM 2024</a>,
there seems to be a critical amount of interest and willingness to join such an effort, somebody™ just needs to kick-start it.</p>]]></content></entry><entry><title type="html">This Week in Plasma: UI and Stability Improvements</title><link href="https://blogs.kde.org/2026/04/04/this-week-in-plasma-ui-and-stability-improvements/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://blogs.kde.org/2026/04/04/this-week-in-plasma-ui-and-stability-improvements/</id><author><name>Nate Graham</name><uri>https://blogs.kde.org/authors/nategraham/</uri></author><published>2026-04-04T00:00:01+00:00</published><updated>2026-04-04T00:00:01+00:00</updated><content type="html"><![CDATA[<!-- Example wording for a change, MR version. (Developer Name, [repo-name MR #xxx](https://invent.kde.org/plasma/repo-name/-/merge_requests/xxx)) -->
<!-- Example wording for a change, Bugzilla version. (Developer Name, [KDE Bugzilla #xxx](https://bugs.kde.org/show_bug.cgi?id=xxx)) -->
<!-- ![](thumbnail.png) -->
<!-- 


<section class="swiper d-flex mb-5" aria-label="Screenshots" role="list">
 <div class="swiper-wrapper d-flex my-3" role="listitem">
 </div>
 <div class="swiper-pagination" style="bottom: 0"></div>
 <div class="swiper-button-prev"></div>
 <div class="swiper-button-next"></div>
</section>

 -->
<!-- 
 


<figure class="text-center ratio ratio-16x9" style="">
 <video controls><source src="%25!s%28%3cnil%3e%29something.mp4" type="video/mp4" /></video></figure>
 -->
<p>Welcome to a new issue of <em>This Week in Plasma!</em></p>
<p>This was a somewhat quiet week mostly full of UI and stability improvements, perhaps because many KDE contributors are gearing up for next week’s <a target="_blank" href="https://community.kde.org/Sprints/MegaSprint/2026">mega-sprint in Graz</a>! For the same reason, expect next week’s post to be short or non-existent.</p>
<h2 id="notable-ui-improvements">Notable UI improvements</h2>
<!-- Can find some with https://invent.kde.org/groups/plasma/-/merge_requests/?sort=merged_at_desc&state=merged&label_name%5B%5D=Enhancement&first_page_size=20 -->
<h3 id="plasma-67">Plasma 6.7</h3>
<p>Breeze-themed menu items throughout KDE’s software ecosystem now visually change when clicked. (Akseli Lahtinen, <a target="_blank" href="https://invent.kde.org/plasma/breeze/-/merge_requests/605">breeze MR #605</a>)</p>

 


<figure class="text-center ratio ratio-16x9" style="">
 <video controls><source src="https://blogs.kde.org/2026/04/04/this-week-in-plasma-ui-and-stability-improvements/menu-click-effect.webm" type="video/mp4" /></video></figure>

<p>A variety of tooltips throughout Plasma now follow the styling of the active Plasma theme as expected. (Nicolas Fella, <a target="_blank" href="https://invent.kde.org/plasma/libplasma/-/merge_requests/1435">libplasma MR #1435</a>)</p>
<p>Improved the Mouse Mark effect’s support for touchscreens: now you can draw multiple lines at a time if you have a multi-touch-capable screen. (Tin Dao, <a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/8951">kwin MR #8951</a>)</p>
<p>Synchronizing settings to the Plasma Login Manager now includes the current set of keyboard layouts. (Oliver Beard, <a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=516778">KDE Bugzilla #516778</a>)</p>
<p>Simplified the UI for the Clipboard widget’s QR code page: now the copy button is in the header, rather than all alone on its own row. (Tobias Fella, <a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6451">plasma-workspace MR #6451</a>)</p>



<section class="swiper d-flex mb-5" aria-label="Screenshots" role="list">
 <div class="swiper-wrapper d-flex my-3" role="listitem">
 <div class="swiper-slide swiper-slide-active">
 <img src="https://blogs.kde.org/2026/04/04/this-week-in-plasma-ui-and-stability-improvements/clipboard-page-after.png" alt="After" lazy class="rounded">
 <a class="d-block text-center mt-2" target="_blank" href="https://kde.org">After</a>
 </div>
 <div class="swiper-slide">
 <img src="https://blogs.kde.org/2026/04/04/this-week-in-plasma-ui-and-stability-improvements/clipboard-page-before.png" alt="Before" lazy class="rounded">
 <a class="d-block text-center mt-2" target="_blank" href="https://kde.org">Before</a>
 </div>
 </div>
 <div class="swiper-pagination" style="bottom: 0"></div>
 <div class="swiper-button-prev"></div>
 <div class="swiper-button-next"></div>
</section>


<p>Removed the feature to force the Task Manager and System Tray widgets to use a large spacing and icon size while in touch/tablet mode; it just didn’t work out, and caused un-resolvable sizing bugs. (Nate Graham, <a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=511439">KDE Bugzilla #511439</a>)</p>
<p>Improved the accuracy of widget positioning on the desktop: dragging a widget somewhere it won’t fit will now show its preview rectangle in the nearest place where it will fit, which is where it will end up. (Tobias Fella, <a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6452">plasma-workspace MR #6452</a>)</p>

 


<figure class="text-center ratio ratio-16x9" style="">
 <video controls><source src="https://blogs.kde.org/2026/04/04/this-week-in-plasma-ui-and-stability-improvements/widget-positioning.webm" type="video/mp4" /></video></figure>

<p>Discover now uses consistent terminology when it asks you to restart. (Nate Graham, <a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=517630">KDE Bugzilla #517630</a>)</p>
<h2 id="frameworks-625">Frameworks 6.25</h2>
<p>Trying to paste when your clipboard is empty now fails silently rather than showing a notification about it. (Tobias Fella, <a target="_blank" href="https://invent.kde.org/frameworks/kio/-/merge_requests/2168">kio MR #2168</a>)</p>
<h2 id="notable-bug-fixes">Notable bug fixes</h2>
<!--Can find some with https://tinyurl.com/bdepnh4v -->
<h3 id="plasma-664">Plasma 6.6.4</h3>
<p>Hardened Plasma against crashing while trying to load a broken widget. (Harald Sitter, <a target="_blank" href="https://invent.kde.org/plasma/libplasma/-/merge_requests/1456">libplasma MR #1456</a>)</p>
<p>Fixed a case where the KDED background daemon could die with a Wayland protocol error when changing the screen resolution. (Xaver Hugl, <a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=516217">KDE Bugzilla #516217</a>)</p>
<p>Fixed a bizarre issue that mangled certain text formatted with Markdown styling while Plasma’s on-screen keyboard was enabled but not visible. (Devin Lin, <a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=516511">KDE Bugzilla #516511</a>)</p>
<p>Fixed a case where System Settings’ Plasma Style page could crash on certain distros shipping Qt 6.11 with asserts turned on. (Ismael Asensio, <a target="_blank" href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/6458">plasma-workspace MR #6458</a>)</p>
<p>Fixed usage graphs for certain NVIDIA GPUs being broken in the System Monitor app and widgets. (Bernhard Friedreich, <a target="_blank" href="https://invent.kde.org/plasma/libksysguard/-/merge_requests/465">libksysguard MR #465</a>)</p>
<p>Popups for editing widgets while in Plasmas’s edit mode now work with a touchscreen. (Marco Martin, <a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=509880">KDE Bugzilla #509880</a>)</p>
<p>Hardened KWin against XWayland apps being sized incorrectly on systems with config files containing inappropriate scale values. (Xaver Hugl, <a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9049">kwin MR #9049</a>)</p>
<p>Rolled out a more complete fix for context menus of System Tray icons sometimes having ugly square black corners. (Nate Graham, <a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=513307">KDE Bugzilla #513307</a>)</p>
<h3 id="plasma-67-1">Plasma 6.7</h3>
<p>Made two technical fixes to the process of configuring OpenConnect VPNs (Aviral Singh and Alexander Becker, <a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=385395">KDE Bugzilla #385395</a> and <a target="_blank" href="https://bugs.kde.org/show_bug.cgi?id=518289">KDE Bugzilla #518289</a>)</p>
<h2 id="notable-in-performance--technical">Notable in performance &amp; technical</h2>
<h3 id="plasma-67-2">Plasma 6.7</h3>
<p>Implemented support for the <code>xx-fractional-scale-v2</code> Wayland protocol, which improves visual fidelity by reducing gaps between adjacent items. (Vlad Zahorodnii, <a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9023">kwin MR #9023</a>)</p>
<p>Continued with the work to add Vulkan support. (Diego Gomez, <a target="_blank" href="https://invent.kde.org/plasma/kwin/-/merge_requests/9027">kwin MR #9027</a>)</p>
<h2 id="how-you-can-help">How you can help</h2>
<p>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.</p>
<p>Would you like to help put together this weekly report? Introduce yourself in <a target="_blank" href="https://matrix.to/#/%23this-week-kde-apps:kde.org">the Matrix room</a> and <a target="_blank" href="https://community.kde.org/Promotion/This_week_in_KDE">join the team</a>!</p>
<p>Beyond that, you can help KDE by directly <a target="_blank" href="https://community.kde.org/Get_Involved">getting involved</a> 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.</p>
<p>You can also help out by <a target="_blank" href="https://kde.org/donate">making a donation</a>! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.</p>
<h2 id="to-get-a-new-plasma-feature-or-a-bug-fix-mentioned-here">To get a new Plasma feature or a bug fix mentioned here</h2>
<p>Push a commit to <a target="_blank" href="https://invent.kde.org/websites/blogs-kde-org/-/merge_requests/?label_name%5B%5D=This%20Week%20in%20Plasma">the relevant merge request on invent.kde.org</a>.</p>]]></content></entry><entry><title type="html">Web Review, Week 2026-14</title><link href="https://ervin.ipsquad.net/blog/2026/04/03/web-review-week-2026-14/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://ervin.ipsquad.net/blog/2026/04/03/web-review-week-2026-14/</id><author><name>Kevin Ottens</name><uri>https://ervin.ipsquad.net/</uri></author><published>2026-04-03T12:33:02+00:00</published><updated>2026-04-03T12:33:02+00:00</updated><content type="html"><![CDATA[<p>Let&rsquo;s go for my web review for the week 2026-14.</p>
<hr>
<h4 id="the-last-quiet-thing">The Last Quiet Thing</h4>
<p><em>Tags: tech, ux, design, business, attention-economy</em></p>
<p>A good piece, well designed too. Shows how demanding our current devices are. So much attention requested and so much complexity the user has to deal with. We clearly lost the plot as an industry.</p>
<p><a target="_blank" href="https://www.terrygodier.com/the-last-quiet-thing">https://www.terrygodier.com/the-last-quiet-thing</a></p>
<br/>
<h4 id="what-we-think-is-a-decline-in-literacy-is-a-design-problem">What we think is a decline in literacy is a design problem</h4>
<p><em>Tags: tech, philosophy, learning, reading, design</em></p>
<p>Indeed it&rsquo;s not simply books vs screens. It&rsquo;s about design and how our attention gets fractured (on purpose). We need to recognise there are many ways to learn and to produce ideas, then design for it. We&rsquo;d be better off as a civilisation rather than staying with the current attention economy.</p>
<p><a target="_blank" href="https://aeon.co/essays/what-we-think-is-a-decline-in-literacy-is-a-design-problem">https://aeon.co/essays/what-we-think-is-a-decline-in-literacy-is-a-design-problem</a></p>
<br/>
<h4 id="heres-why-ive-installed-a-dead-mans-switch-on-my-home-server">Here’s why I’ve installed a Dead Man&rsquo;s Switch on my home server</h4>
<p><em>Tags: tech, self-hosting, life, death</em></p>
<p>You&rsquo;re self-hosting? Better keep in check what happens to the people who depend even indirectly on your services when you&rsquo;re gone.</p>
<p><a target="_blank" href="https://www.androidauthority.com/home-server-dead-man-switch-3648903/">https://www.androidauthority.com/home-server-dead-man-switch-3648903/</a></p>
<br/>
<h4 id="linkedin-is-illegally-searching-your-computer">LinkedIn Is Illegally Searching Your Computer</h4>
<p><em>Tags: tech, linkedin, surveillance</em></p>
<p>Are we surprised? Of course depends on the browser and they&rsquo;re looking mostly for extensions. Clearly they try hard to map what people use, it&rsquo;s corporate espionage.</p>
<p><a target="_blank" href="https://browsergate.eu/">https://browsergate.eu/</a></p>
<br/>
<h4 id="dram-pricing-is-killing-the-hobbyist-sbc-market">DRAM pricing is killing the hobbyist SBC market</h4>
<p><em>Tags: tech, embedded, memory, economics, ai, machine-learning, gpt</em></p>
<p>The price hike on RAM due to the LLM as a service bubble is really killing interesting fields. Can&rsquo;t we have nice things? Will the arm race end soon?</p>
<p><a target="_blank" href="https://www.jeffgeerling.com/blog/2026/dram-pricing-is-killing-the-hobbyist-sbc-market/">https://www.jeffgeerling.com/blog/2026/dram-pricing-is-killing-the-hobbyist-sbc-market/</a></p>
<br/>
<h4 id="nations-priced-out-of-big-ai-are-building-with-frugal-models">Nations priced out of Big AI are building with frugal models</h4>
<p><em>Tags: tech, ai, machine-learning, gpt, research, innovation, economics</em></p>
<p>Real innovations come from constraints. The frugal AI movement is clearly where we will see interesting things emerging. Interestingly, those approaches are closer to what AI is about as a research field than the industrial complex which got unleashed with all its extractive power.</p>
<p><a target="_blank" href="https://restofworld.org/2026/frugal-ai-big-tech/">https://restofworld.org/2026/frugal-ai-big-tech/</a></p>
<br/>
<h4 id="the-comforting-lie-of-sha-pinning">The Comforting Lie Of SHA Pinning</h4>
<p><em>Tags: tech, supply-chain, security, git</em></p>
<p>We&rsquo;re not helped much by our tools here&hellip; Clearly provenance needs to be double checked.</p>
<p><a target="_blank" href="https://www.vaines.org/posts/2026-03-24-the-comforting-lie-of-sha-pinning/">https://www.vaines.org/posts/2026-03-24-the-comforting-lie-of-sha-pinning/</a></p>
<br/>
<h4 id="handymkv-a-tool-to-simplify-use-of-makemkv-and-the-handbrakecli-tool">handymkv: A tool to simplify use of MakeMKV and the HandBrakeCLI tool</h4>
<p><em>Tags: tech, bluray, video, codec, tools</em></p>
<p>You got bluray discs to encode for use on your NAS? This looks like a nice option.</p>
<p><a target="_blank" href="https://github.com/dmars8047/handymkv">https://github.com/dmars8047/handymkv</a></p>
<br/>
<h4 id="running-out-of-disk-space-in-production">Running out of Disk Space in Production</h4>
<p><em>Tags: tech, architecture, storage, failure</em></p>
<p>Are you sure your understand how your reverse proxy works and the impacts it can have in production?</p>
<p><a target="_blank" href="https://alt-romes.github.io/posts/2026-04-01-running-out-of-disk-space-on-launch.html">https://alt-romes.github.io/posts/2026-04-01-running-out-of-disk-space-on-launch.html</a></p>
<br/>
<h4 id="your-hex-editor-should-color-code-bytes">your hex editor should color-code bytes</h4>
<p><em>Tags: tech, hex, data-visualization, debugging</em></p>
<p>Interesting color coding for hex editor. It indeed brings interesting properties.</p>
<p><a target="_blank" href="https://simonomi.dev/blog/color-code-your-bytes/">https://simonomi.dev/blog/color-code-your-bytes/</a></p>
<br/>
<h4 id="git-bayesect">Git Bayesect</h4>
<p><em>Tags: tech, git, tools, tests</em></p>
<p>Git bisect won&rsquo;t help much for flaky tests&hellip; but maybe this bayesian approach can.</p>
<p><a target="_blank" href="https://hauntsaninja.github.io/git_bayesect.html">https://hauntsaninja.github.io/git_bayesect.html</a></p>
<br/>
<h4 id="slowql-sql-static-analyzer-for-performance-security-compliance-and-cost">slowql: SQL static analyzer for performance, security, compliance and cost</h4>
<p><em>Tags: tech, databases, sql, tools, performance, security, ci</em></p>
<p>Looks like an interesting tool to check your SQL queries on the CI.</p>
<p><a target="_blank" href="https://github.com/makroumi/slowql">https://github.com/makroumi/slowql</a></p>
<br/>
<h4 id="joins-are-not-expensive">Joins are NOT Expensive!</h4>
<p><em>Tags: tech, databases, performance</em></p>
<p>Interesting article which goes deep in comparing joins vs denormalised big tables. The conclusion is in the title, bit it&rsquo;s worth a read for the other insights.</p>
<p><a target="_blank" href="https://www.database-doctor.com/posts/joins-are-not-expensive">https://www.database-doctor.com/posts/joins-are-not-expensive</a></p>
<br/>
<h4 id="c26-is-done">C++26 is done!</h4>
<p><em>Tags: tech, c++, standard, reflection</em></p>
<p>The new standard is upon us and it&rsquo;ll be massive. It indeed looks like another C++11. If used it&rsquo;ll feel like a very different language.</p>
<p><a target="_blank" href="https://herbsutter.com/2026/03/29/c26-is-done-trip-report-march-2026-iso-c-standards-meeting-london-croydon-uk/">https://herbsutter.com/2026/03/29/c26-is-done-trip-report-march-2026-iso-c-standards-meeting-london-croydon-uk/</a></p>
<br/>
<h4 id="what-happens-when-a-destructor-throws">What happens when a destructor throws</h4>
<p><em>Tags: tech, c++, exceptions</em></p>
<p>A good reminder of why destructors shouldn&rsquo;t throw. It really has to be a last resort measure and only carefully considered. There&rsquo;s a reason why they are <code>nothrow</code> by default since C++11.</p>
<p><a target="_blank" href="https://www.sandordargo.com/blog/2026/04/01/when-a-destructor-throws">https://www.sandordargo.com/blog/2026/04/01/when-a-destructor-throws</a></p>
<br/>
<h4 id="why-dont-you-use-string-views-as-stdwstring_view-instead-of-passing-stdwstring-by-const">Why Don’t You Use String Views (as std::wstring_view) Instead of Passing std::wstring by const&amp;?</h4>
<p><em>Tags: tech, c++, c, memory</em></p>
<p>Indeed be careful at how you use strings when interacting with C APIs. String views are likely not what you want in that context. There is a reason why they don&rsquo;t have <code>c_str()</code>.</p>
<p><a target="_blank" href="https://giodicanio.com/2024/05/14/why-dont-you-use-string-views-like-std-wstring_view-instead-of-passing-std-wstring-by-const-reference/">https://giodicanio.com/2024/05/14/why-dont-you-use-string-views-like-std-wstring_view-instead-of-passing-std-wstring-by-const-reference/</a></p>
<br/>
<h4 id="watch-out-for-missed-warnings-on-vendor-c-toolchains">Watch out for missed warnings on vendor C++ toolchains</h4>
<p><em>Tags: tech, c, c++, compiler, embedded</em></p>
<p>Vendor toolchains should see only a limited trust. Like in this case they&rsquo;re often partial or old.</p>
<p><a target="_blank" href="https://blog.poly.nomial.co.uk/2026-03-31-watch-out-for-missed-warnings-on-vendor-cpp-toolchains.html">https://blog.poly.nomial.co.uk/2026-03-31-watch-out-for-missed-warnings-on-vendor-cpp-toolchains.html</a></p>
<br/>
<h4 id="why-fakes-beat-mocks-and-testcontainers">Why Fakes Beat Mocks and Testcontainers</h4>
<p><em>Tags: tech, tests, fake, failure</em></p>
<p>I vehemently agree with this piece. Fakes are unfortunately underrated. They&rsquo;re the most powerful test double, I wish more projects would invest in them (can be quite an investment, which the article doesn&rsquo;t quite show unfortunately).</p>
<p><a target="_blank" href="https://pierrezemb.fr/posts/why-fakes-beat-mocks-and-testcontainers/">https://pierrezemb.fr/posts/why-fakes-beat-mocks-and-testcontainers/</a></p>
<br/>
<h4 id="working-software-runs-locally">Working software runs locally</h4>
<p><em>Tags: tech, developer-experience, tests</em></p>
<p>This is indeed very important to ensure the tooling around your project supports running the whole thing locally. Too often projects sacrifice the ability to do this, it&rsquo;s clearly a hindrance to testability and a short feedback loop.</p>
<p><a target="_blank" href="https://nickmonad.blog/2026/working-software-runs-locally/">https://nickmonad.blog/2026/working-software-runs-locally/</a></p>
<br/>
<h4 id="scaling-a-monolith-to-1m-loc-113-pragmatic-lessons-from-tech-lead-to-cto">Scaling a Monolith to 1M LOC: 113 Pragmatic Lessons from Tech Lead to CTO</h4>
<p><em>Tags: tech, architecture, debugging, observability, orm, backend, frontend, organisation, leadership</em></p>
<p>Lots of good insights in here. Of course YMMV and some definitely depends on your context. That&rsquo;s a lot of dimensions to keep in mind though.</p>
<p><a target="_blank" href="https://www.semicolonandsons.com/articles/scaling-a-monolith-to-1m-loc-113-pragmatic-lessons-from-tech-lead-to-cto">https://www.semicolonandsons.com/articles/scaling-a-monolith-to-1m-loc-113-pragmatic-lessons-from-tech-lead-to-cto</a></p>
<br/>
<h4 id="why-the-verb-to-be-is-so-irregular">Why the verb “to be” is so irregular</h4>
<p><em>Tags: linguistics, history, english</em></p>
<p>Fascinating origins of &ldquo;to be&rdquo;. As usual to understand this kind of phenomenon, or at least start to build a theory, you have to go back quite far in history.</p>
<p><a target="_blank" href="https://www.deadlanguagesociety.com/p/why-the-verb-to-be-is-so-irregular">https://www.deadlanguagesociety.com/p/why-the-verb-to-be-is-so-irregular</a></p>
<br/>
<hr>
<p>Bye for now!</p>]]></content></entry></feed>