Skip to content

Sunday, 12 October 2025

Matrix Widgets in NeoChat, systemd user units in KJournald and a lot of fixes all other the place

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

Getting back to all that's new in the KDE App scene, let's dig in!

KDE PIM

Merkuro Calendar Manage your tasks and events with speed and ease

Yuki Joou continued improving Merkuro Calendar, fixing the "Today" button, which wasn’t working as expected (25.08.3 - link).

System Applications

Dolphin Manage your files

Akseli Lahtinen fixed an issue where the icon sizes of list items were incorrect when zooming in and out rapidly. (25.12.0 - link).

Journald Browser Browser for journald databases

Andreas Cord-Landwehr added support for loading user units in KJournald Browser (25.12.0 - link).

Utilities

Kate Advanced text editor

Jack Hill added configuration for rust_hdl, a language server for the VHSIC Hardware Description Language (VHDL) (25.12.0 - link).

Kåre Särs fixed Git blame parsing for commits containing tabs in their summary. (25.12.0 - link)

Clock Keep time and set alarms

Kai Uwe Broulik reworked how the list of alarms and timers is loaded. This process is now asynchronous. (25.12.0 - link)

Konsole Use the command line interface

Wendi Gan fixed some styling issues that occurred when saving Konsole output as HTML. (25.12.0 - link)

Calculator A feature rich calculator

Alberto Jiménez Ruiz fixed decimal number parsing for locales that don’t use a dot as the decimal separator, such as Spanish. (25.12.0 - link)

Qrca Scan and create QR-Codes

Volker Krause added some missing icons on Android (25.12.0 - link).

KDE Connect Seamless connection of your devices

Forest Crossman fixed a crash in the virtual monitor plugin when used with misbehaving virtual monitor devices (link).

Games Applications

KRetro Libretro emulation frontend for Plasma

Laurent Montel updated KRetro to follow KDE best practices (link 1, link 2, link 3 , link 4, link 5, and more).

Chat Applications

NeoChat Chat on Matrix

Arno Rehn added basic support for Matrix Widgets and Jitsi (25.12.0 - link).

James Graham and Tobias Fella fixed various crashes in NeoChat detected by Sentry (link 1, link 2, and link 3).

Social Networks

Tokodon Browse the Fediverse

Joshua Goins moved the "Post" toolbar action to be a floating button on mobile devices (25.12.0 - link).

Browsers

Falkon Web Browser

Juraj Oravec added a context menu to the bookmark menu (25.12.0 - link) and fixed custom protocol handler registration (25.12.0 - link).

Konqueror KDE File Manager & Web Browser

Stefano Crocco increased the quality of the exported PDFs (25.12.0 - link) and added support for the standard JS window.print() call to open a print dialog (25.12.0 - link).

Third Party Applications

Dr. Tej A. Shah started porting Clear.Dental to Kirigami!

…And Everything Else

This blog only covers the tip of the iceberg! If you’re hungry for more, check out Nate's blog about Plasma and be sure not to miss his This Week in Plasma series, where every Saturday he covers all the work being put into KDE's Plasma desktop environment.

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

Get Involved

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

You can help KDE by becoming an active community member and getting involved. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine! You don’t have to be a programmer either. There are many things you can do: you can help hunt and confirm bugs, even maybe solve them; contribute designs for wallpapers, web pages, icons and app interfaces; translate messages and menu items into your own language; promote KDE in your local community; and a ton more things.

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

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

I'm writing this blog in the very very early stages of development because I'm 50% sure someone will link me to some existing library that Google failed to find.

Varlink

Varlink is an IPC mechanism that is gaining popularity in a few places across Linux. It's very simple, JSON blobs over a socket terminated with a null byte. It doesn't have anywhere near the features of DBus, but the simplicity is the main selling point.

Ultimately when it comes to choosing IPC what matters is what the servers you want to talk to are already using and then things become forced.

QtVarlink

Interacting with C APIs is a horrible experience for all involved. We want something that looks and behaves likes a Qt developer would expect and used the inbuilt QtJson classes.

My new library provides API as follows.

    VarlinkClient client("unix:/tmp/foo");
    QFuture<VarlinkResponse> pendingResponse = client.call("org.example.Ping", QJsonObject({{"ping", "1"}}));
    pendingResponse.then(this, [](VarlinkResponse response) {
        qDebug() << response.parameters()["pong"].toString();
    });

Or any variation of QFutureWatcher or just blocking.

State

Code is available at: https://invent.kde.org/davidedmundson/qtvarlink

As mentioned in the intro, it's pre pre alpha. It's the minimum viable product for a task I had, but I intend to make it a standalone project.

Please let me know if this would be useful to you. There's a roadmap in the Readme and pull requests are more than welcome!

Saturday, 11 October 2025

Linux Magazine included a nice article about Tellico in its June 2025 edition on Cool Linux Hacks. It has a nice description of adding items to one’s collection and how to search various sources online. A couple of screenshots are included that do a good job of showcasing the interface.

It even connects to the subsequent review of a barcode scanner to talk about using it together with Tellico. The distinction between using a webcam for scanning, where Tellico has to convert the image to a barcode, and a specific barcode scanner isn’t always clear to users. A scanner can essentially act as a keyboard, where the barcode comes across just as if someone were typing it in. For Tellico’s use, the webcam functionality isn’t well-tested since scanners are much more prevalent.

Friday, 10 October 2025

Buttons in the Plasma Design System

Buttons play a pivotal role in user interaction within the Plasma Design System. It provides a set of states and roles for clear actions and navigation. In this design system, buttons are categorized into various types, each with distinct styles and purposes, contributing to an intuitive user experience.

Buttons are probably the most used component in a UI and it needs to clearly convey its meaning and purpose.

Button Types

  1. Primary Buttons: These buttons are the primary interactive elements, designed to stand out on the interface with a shadow effect that creates a sense of depth. They are used for essential actions like “Create,” “Confirm,” or “Proceed,” encouraging user engagement. The elevation can adapt to the background color, ensuring good visibility across different surfaces. Default buttons are identified by their distinct brand color and are used sparsely in the UI.
  2. Secondary Color: Provide an alternative action option. They often complement the primary buttons, allowing users to execute actions that may not be the main focus but are still significant. These buttons usually have a less prominent visual hierarchy, helping to guide user interactions without overshadowing primary actions. They can also serve for less urgent or secondary tasks, improving the overall user experience in UI design. They also come in Secondary Color, which is likely the most used version of the button in a UI.
  3. Outlined Buttons: Outlined buttons are a secondary option, featuring a transparent background and a defined border. They serve as supplementary actions that are less critical than default buttons, maintaining clarity without overshadowing primary actions. They come in color and gray versions depending on their usage.
  4. Text Buttons: Also known as flat buttons, these are used for less prominent actions or in placements where space is limited. Text buttons have no elevation or border, displaying a subtle underline on hover to indicate interactivity. They are effective for actions like “Learn more” or “Cancel,” blending harmoniously with text-based interactions.

States and Feedback

In Plasma Design, buttons incorporate multiple interaction states to provide immediate feedback to users:

  • Default: Displaying the button’s primary style with appropriate color contrast.
  • Hover: Changing background color slightly or applying a ripple effect, signaling potential interaction.
  • Selected: Is a button that indicates it is currently active or chosen among a group of options. Its visual state (such as color, elevation, or outline) changes to show that it’s the selected or focused choice. Selected state is permanent and does not need the user to keep the mouse over it. The selection is removed when another UI element is selected.
  • Pressed: A visual response when the button is actively being clicked, often shown by a darker shade or scale effect, reinforcing the tactile feel of the interface. It is a temporary state shown when the user clicks a button, for example.
  • Disabled: Buttons in this state are visually muted and unresponsive, maintaining clarity that the action cannot be taken. There are disabled button versions for color and gray colorings.
  • Round Buttons: Are used for additional visual interest and to draw differences between buttons and actions that are part of the general UI or external to it. They only come in icon-only varieties.

Accessibility and Responsiveness

Buttons should convey their functions through clear labeling and icons where applicable. Together they should have sufficient contrast between button colors and the background is essential for readability.

Implementation Guidelines

From a development standpoint, buttons in Plasma Design system should be structured as modular components. They need to utilize a consistent naming convention aligned with the design tokens defined in the system, such as button.primary or button.outlined. This approach promotes reusability and maintainability across the codebase. Incorporating customization options, such as size variations and whether to include icons, allows developers to create a diverse set of buttons while ensuring adherence to the material aesthetic.

The design system contains primary-derivative buttons and danger-related versions as well. Danger or destructive button states mirror the ones from the primary color but are dedicated for potentially damaging consequences in a system.

Internally, buttons contain color variables, shadow variables, text variables and spacing variables thus:

/* cyrillic-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZJhiI2B.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZthiI2B.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZNhiI2B.woff2) format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZxhiI2B.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZBhiI2B.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZFhiI2B.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: block;
  src: url(https://design.penpot.app/internal/gfonts/font/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZ9hiA.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


html, body {
  margin: 0;
  min-height: 100%;
  min-width: 100%;
  padding: 0;
}

body {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 100vw;
  min-height: 100vh;
}

* {
  box-sizing: border-box;
}

.text-node { background-clip: text !important; -webkit-background-clip: text !important; }

/* Button */
.button-ef52f83471d2 {
  position: relative;
  width: 105px;
  height: 34px;
  border-radius: 0px 0px 0px 0px;
  z-index: 0;
}

/* _ButtonBase */
.button-bas-ef52f83471d3 {
  position: absolute;
  left: 0px;
  top: 0px;
  width: auto;
  height: auto;
  background: #4172deFF;
  border: 1px solid #4172deFF;
  border-radius: 6px 6px 6px 6px;
  box-shadow: 0px 2px 4px -2px #dedede54, 0px 12px 12px -8px #dededeFF, inset 0px -4px 12px -8px #0020461F;
  display: flex;
  align-items: center;
  align-content: stretch;
  justify-content: center;
  gap: 8px;
  padding: 8px 14px 8px 14px;
  flex-direction: row;
  flex-wrap: nowrap;
}

/* Button CTA */
.button-c-t-a-ef52f83471d4 {
  height: 18px;
  flex-shrink: 0;
}
.button-c-t-a-ef52f83471d4 .root-0 {
  
  
  display: flex;
  white-space: break-spaces;
  align-items: flex-start;
}
.button-c-t-a-ef52f83471d4 .root-0-paragraph-set-0 {
  display: inline-flex;
  flex-direction: column;
  justify-content: inherit;
  
  margin-right: 1px;
  vertical-align: top;
}
.button-c-t-a-ef52f83471d4 .root-0-paragraph-set-0-paragraph-0 {
  font-size: 0;
  line-height: 1.25;
  margin: 0;
  text-align: left;
}
.button-c-t-a-ef52f83471d4 .root-0-paragraph-set-0-paragraph-0-text-0 {
  color: rgba(250, 248, 255, 1);
  text-transform: none;
  
  line-break: auto;
  overflow-wrap: initial;
  white-space: pre;
  font-size: 14px;
  text-rendering: geometricPrecision;
  caret-color: rgba(250, 248, 255, 1);
  text-decoration: none;
  letter-spacing: 0px;
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
}
<!-- frame: Button -->
<div class="frame button-ef52f83471d2">
  <!-- frame: _ButtonBase -->
  <div class="frame button-bas-ef52f83471d3">
    <!-- text: Button CTA -->
    <div class="shape text button-c-t-a-ef52f83471d4">
      <div class="text-node-html" id="html-text-node-26931f38-d193-8030-8006-ef52f83471d4" data-x="821" data-y="637">
        <div class="root rich-text root-0" xmlns="http://www.w3.org/1999/xhtml">
          <div class="paragraph-set root-0-paragraph-set-0">
            <p class="paragraph root-0-paragraph-set-0-paragraph-0" dir="ltr"><span class="text-node root-0-paragraph-set-0-paragraph-0-text-0">Button CTA</span></p>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

As the design process progresses, these internal variables will make more sense. While today, Plasma Design is manually implemented, in the future, we see that developers would not need to interact with the button design directly and just implement the desired action.

The second maintenance release of the 25.08 series is out continuing the focus on stability and polish. It fixes issues with effects and transitions, improves clip selection, and resolves crashes related to filter jobs and effects on sequences. This version also comes with updated parameters for frei0r effects and GIF rendering preset.

The Windows package also fixes an annoying short freeze issue affecting the 25.08.1 version.

For the full changelog continue reading on kdenlive.org.

I’m very glad to participate in the 2025 edition of the International Calligraphy Festival of Kerala, and present a talk to a great audience.

ICFK is organized by KaChaTaThaPa foundation headed by master calligrapher Narayana Bhattathiri. The event usually takes place on 2–5 October in Kochi. Varying talks, workshops, demonstration sessions, exhibitions, and above all meeting and learning from exemplary calligraphers is the best part of the event. The venue always bursts with beauty, energy, and fun; where everyone is approachable.

Reconnected with old friends and made new friends. Ashok Parab was traveling pan-India and documenting scripts, that lead to teaching scripts — including Malayalam — as well. Abhishek Vardhan is doing research on Nāgarī script. Syam is doing research on Malayalam calligraphy. They promised to share their findings and public/open resources, which would be very interesting to look at. Vinoth Kumar, Michel D’Anastasio, Nikheel Aphale, Muqtar Ahammed, and Shipra Rohtagi gave me souvenirs — thank you! I had chances for interesting long chats with Uday Kumar (who asked me about Sayahna Foundation after the t-shirt I wore), Achyut Palav, Sarang Kulkarni, Brody Neuenschwander, and also Shyam Patel of Kochi Biennale Foundation.

On many occasions delegates approached and asked me about font development process, complex text shaping and related topics. It was also too tempting to not buy fountain pens and Bhattathiri’s merchandise on sale, as gift to friends. The dinner with the ICFK team at Boulangerie Art Cafe was delicious. TM Krishna’s carnatic music concert on Saturday evening was a heavenly experience — Krishna Seth sitting next to me was spontaneously drawing on the notebook for the entire duration of the concert.

For the last edition, I presented a talk about font development, font engineering, complex text shaping, and such back-end tasks that designers generally find difficult. This year, I talked about the ‘Fundamentals of Typography’. I hope the talk succeeded to some extent in making everyone unhappy when they look at a badly typeset page 🙂.

The slides for the presentation are available here.

Thursday, 9 October 2025

It has been a little quiet around my pet project Plasma Browser Integration. On one hand because I’ve been busy with life but also because browser extension APIs haven’t really gained much new functionality. Nevertheless, for Plasma’s October release I finally found the time to take care of some long-standing feature requests and/or bug reports.

Dark blue space background with stars, a cute dragon wearing a red bandana with a "K" on it, sitting ontop of the Earth which has a blue network cable plugged in whose lose end is squiggling around the KDE Plasma logo
Konqi surfing the world wide web

Plasma Browser Integration consists of two pieces: the “native” host and the browser extension. The extension is a regular JavaScript browser extension for Chromium-based browsers and Firefox and is distributed on the corresponding browser extension stores. The plasma-browser-integration-host on the other hand is a binary which talks to the system services (KRunner, KDE Connect, MPRIS, job tracker, etc) and is shipped as part of regular Plasma releases. Often a new feature requires changes to both parts which is why it’s hard to predict when a certain feature will actually be fully released. We also have to ensure that the extension remains compatible with potentially super old host binaries. Even the latest browser extension should work just fine with the host that came with a Plasma 5.27 LTS.

With Chrome sabotaging ad-blockers through Manifest Version 3 I am spending more time in Firefox again. The most notable new feature in Plasma 6.5 with the soon-to-be-released browser extension version 2.1 is that Plasma Browser Integration will prevent the system from going to sleep while downloading a file. Chrome does that on its own but the relevant Firefox bug report reached Ontario legal drinking age (reported against Windows XP), so I guess it was time to just do it ourselves. I recently added this functionality to KIO while copying files but there’s many more jobs that might want to do that. Therefore, I moved the logic into a dedicated KInhibitionJobTracker in KJobWidgets. You just register your job with this job tracker and the system will remain on for the entire duration of the task (on Windows, too!). When using KIO’s “dynamic job tracker” like most file-related operations, you get this automatically now.

Plasma volume popup, showing two playback streams:
Firefox – Plasma 6.4: IMHO, the best Linux desktop environment (paused)
Firefox – Big Buck Bunny 60fps 4K
Firefox tab title displayed in the volume applet

Speaking of Firefox, Plasma’s volume applet now shows the name of the tab that is playing audio. This information is actually provided by Firefox itself (and I wish Chrome did the same) and not Plasma Browser Integration but we didn’t show that property until Plasma 6.4. Pretty neat to have it now. For accessibility purposes, Plasma 6.4 also added a playback speed selector to the Media Controller in your System Tray which works with most websites.

The KRunner plug-ins (tabs and history) now limit the favicon size they send. Some websites have 512px favicons which, while visually pleasing, is a little excessive for the places we show them in (KRunner or Kickoff). It further requests the list of open browser tabs from the extension only once at the beginning of a new “match session”. They’re unlikely to change in between because, well, you’re interacting with KRunner right now. While KRunner waited for the request to complete before sending another one, it might have still requested your tabs several times depending on how fast you typed.

Finally, something I had wanted for a long time is to download the album cover on the browser extension side. Previously, the extension collected the artwork URL from a website and announced it via MPRIS. The plasmashell would then load that image and display it. You can probably imagine why it’s not a good idea to have the shell load random files off the internet. It’s also why album art from the browser didn’t work on the lock screen because it rightfully has no network access. From Plasma 6.5, the browser will actually download the album cover. This way it’s done in the browser’s protected environment and can also refer to your session cookies. Further, it leaks less information about you if only your browser is accessing the server. While the resulting image file can still be potentially malicious, it’s one less attack vector. I tried to draw the artwork into an off-screen canvas to sanitize it to a PNG on the browser side but I wasn’t able to do that from the extension’s background script. If you have any more ideas how to make this feature more resilient, please let me know!

Today I have finally been able to upload the first set of Ocean assets into Invent. For now, these elements will live in my personal git repository. These elements are not yet integrated into the Plasma ecosystem.

The page contains a few elements, a wiki page (under development and updates), color scheme (Light and dark), icon pack, and a Plasma style.

LINK: https://invent.kde.org/abetts/ocean-design

The workflow will be like this, for now:

  • Users can submit bug or issue tickets into the issue tracker on Invent
  • Users can clone the repository and use the assets. Note that assets are set up as folders. To install on your system, you will either need to move them into the right directory or compress the folders and then install using System Settings
  • After applying fixes or suggestions into the application housing the assets, Figma or PenPot, we will create an export.
    • Exports are “not” workable copies of the assets. They are rendered graphics.
  • Exported assets will make it into the github repository replacing the copy put online with its respective commit message.

Note that these assets are under heavy development and are changing constantly. They are not 100% finished and bugs are present.

Known Bugs

  • Icons containing un-flattened and non-unionized paths will not render properly. This is most notable in emblem icons. We are working currently on fixing these icons. Another evidence of this issue is in icons that don’t change to the proper opposite color when switching to a dark color scheme. If you notice any of those, please report them.
  • Missing dark versions of Plasma style. We have not completed the work on the light theme so it’s hard to make color variations for a dark theme. Work is ongoing.
  • Missing app icons. Not all app icons have been redesigned. These icons take much longer to be done given they are colorful icons and require more attention. Redesigned app icons you see today, are also not fine tuned. They are the start of the redesign.

I wanted to thank all those contributors who have helped throughout this process. Your helpful recommendations, discussion, clarifications have aided to get to this point. More work is ongoing and I will report on that soon.

Tuesday, 7 October 2025

In September, I spent over 12 hours in airplanes and trains getting to Berlin to attend my second Akademy conference. The experience once again made the long trip worthwhile. It was lovely to see some familiar faces, and to meet other folks for the first time. This was my second trip to Berlin, and it was nice to see different areas of the city than last year. Like last year, people were so approachable, friendly and easy to talk to. The welcome event was at the lovely Schleusenkrug Beer Garden, just a short walk from the venue, nestled in one of the many areas of greenery.

There were more talks and BoFs I attended than I'll mention, these are things that stood out to me. There were so many good talks and workshops, I recommend checking out the recordings.

A small tangent about travel comfort

Or - How to spend a week in a different timezone without feeling like a zombie.

The jet lag was a lot easier this year because I learned the wisdom of hydration and getting decent rest on long haul flights. I took some electrolyte drink powder with me, which I mixed into the little bottles of water on my long flights. This made a huge difference in my energy levels and how much I enjoyed my time in Berlin.

Saturday

Opening things up, the keynote "Open by Design: How Governments Can Lead the Shift to Digital Sovereignty" made excellent points about the importance for countries to enable independence, autonomy and security in the digital world.

My colleague David Edmundson gave an informative talk on "Plasma: Lessons Learned and Our Path Forward in 2026 and Beyond". He recounted, with honesty and humor, things Plasma has done well and not so well over the years. There were good points to keep in mind, as someone focused on testing and quality, while reviewing bug reports and merge requests.

There were a handful of talks and BoFs about KDE Linux and the growth of the obtsalat. This is an important project for KDE in terms of dogfooding and testing, so I like keeping up to date on things here.

The talk "From Misunderstood to CEO – Breaking Bias and Building Inclusion" was particularly interesting, as a woman in a male dominated industry. I heard echos of some of my experiences, as well as useful advice on dealing with bias.

Sunday

The keynote "The Politics of the Pull Request: How Open Standards Can Shift Power" was educational. It made me aware of the ways in which technology does more than enable us to get work done. It shapes the conversations we have and the world we live in, in a tangible way. It determines who can access things that are fundamental to living in society and who can't. Open source can be more than a way of collaborating, it can also help make things more equitable for more groups of people. I especially liked that the "myth of meritocracy" was highlighted and challenged. It's a topic I've seen debated online quite a bit over the years. Recently, especially, I've seen various claims that "technology shouldn't be political", and this described the many ways technology can't help but be political. This is one talk I'd really recommend watching because it exposes things people might not think about or realize - such as how current systems enable rich and powerful families to stay that way and exclude others - as well as highlight ways open source projects can change things for the better.

"Handling Negative Feedback" by my colleague Akseli Lahtinen was informative about types of negative responses we might get in our open source work, and practical ways of handling it. He had useful advice not just about responding in productive ways, but also about taking care of ourselves to avoid burnout. There was also useful information about mentoring people, as well as encouraging community and maintainers. Related, David Edmunson had a talk specifically about "Maintainers Don't Grow on Trees".

"Getting Hired to Work on FOSS" had useful advice on working on FOSS for a paycheck and how it's different than when it's your hobby. It's useful for anyone thinking about making their FOSS work their living. There's information especially good for people who don't have experience working for a more traditional company.

In "Mass Migration from Windows", I could very much relate to the challenges of getting open source accepted in a business. Reluctant IT departments, nervous managers asking about who will support things; I'm sure I'm not alone in having met those points of friction when trying to use an open source operating system at the office. There was practical information of addressing those points and ways the sitation is improving.

Nate Graham, another colleague, spoke about "Minding the Big Picture: Opportunity from Chaos". This spoke to some of the surprising advantages of these "abnormal times" that KDE can take advantage of. There are some areas where KDE can do practical work to be a real leader in bringing the Linux desktop experience to more end users and enterprises.

The Social Event

After all those talks, it was nice to just hang out. We were at a bar and hacker space Sunday evening called c-base, which reconstructs a fictional, crashed space station. Neat! The company and the beer were nicely refreshing and it was a pretty chill place.

The Wednesday Day Trip

The day trip on Wednesday had two parts. The first was a scavenger hunt, which I skipped out on. Akseli, his wife and I went to Alexanderplatz and had bubble tea near the TV Tower before joining the others. The group then went to the Computerspielemuseum (Computer History Museum), which was a treat. In addition to information about historical computer advancements, and interactive exhibits, there is a small arcade, and some mini-room setups. There was a student desk that reminded me of one I had (mine had the Commodore 128 my brother and I shared). There were also models of historical computers on display. One of these was a TRS-80, the first model I had at home and where I learned word processing.

BoFs

End of 10 Campaign - discussion of the next steps and how folks can help out.

Automatic QA / Recoverability - in which I refreshed my familiarity with the tools currently being used.

KWallet Secret Service: problems and roadmap - this is something I keep up to date on in relation to development and QA.

KDE Out of Box Experience - you might be familiar with this as KISS. It's a setup UX for the first boot of a newly purchased / installed system. This is going to make life easier for people getting a pre-built system as well as for enterprise installation fleets.

That's a Wrap

After a week in Berlin, I was sad to leave but was at the same time looking forward to getting back home. As announced on 27-Sept - Rewatch the Highlights - Akademy 2025 Talks & Sessions Now Available Online. Time to check out recordings of things I wasn't able to attend. K'm looking forward to next year. The Call for Hosts is live, and it will be Akademy's 30th birthday!