Skip to content

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.

Welcome to a new issue of This Week in Plasma!

This week more work was poured into making Plasma 6.5 the best and most stable release ever. I know I write that a lot, but I feel like we get better at it every time, and this time it feels like that’s the case here too as well.

Our bug triaging team has basically finished getting through Plasma’s bug report backlog, allowing them and developers to focus on the known and fixable issues. And fix they did! This week there were just tons and tons of bug fixes. Among them were the #2 and #3 most common Plasma crashes, and we also identified the #1 most common crash as being caused by 3rd-party code.

This kind of concerted bug-fixing may not be the most glamorous work, but it makes a big difference to the overall quality of the product!

Notable UI Improvements

Plasma 6.5.0

You can now activate the Sleep, Shut Down, and Restart (etc.) buttons in Kickoff using the Enter key in addition to the spacebar. (Julius Zint, link)

Plasma 6.6.0

The Breeze icon theme now has reversed versions of the “Send” icon (which normally looks like a little paper plane flying to the right), and uses them in notifications when using a right-to-left language, like Arabic or Hebrew. (Farid Abdelnour and Nate Graham, link)

Improved the randomness of randomly-ordered wallpaper slideshows. (Sebastian Meyer, link)

Notable Bug Fixes

Plasma 6.4.6

Fixed an issue that could make KWin crash when trying to look at a device’s orientation sensor. (Xaver Hugl, link)

Fixed the current second most common Plasma crash, which could happen when using a Weather Report widget displaying information from the Environment Canada source. (Ismael Asensio, link)

Fixed a very annoying issue that made graphical vector content copied in apps like Inkscape and LibreOffice Draw get unnecessarily and destructively rasterized when pasting them. (Fushan Wen, link)

Fixed an issue that made screen colors not look quite right (or at least not as intended) when playing HDR videos. (Xaver Hugl, link)

Plasma 6.5.0

Fixed a case where KWin could crash when dragging files or folders from Dolphin. (Vlad Zahorodnii, link)

Fixed another case where KWin could crash. (Vlad Zahorodnii, link)

Fixed a case where Plasma could crash when you tried to create a new folder inside a sub-folder popup from a Folder View widget or a folder on the desktop. (Akseli Lahtinen, link)

Fixed a case where KDE’s XDG portal implementation could crash. (David Redondo, link)

Fixed an issue that made text copied to the clipboard in an XWayland-using app get lost when the window focus changed immediately afterwards. (Vlad Zahorodnii, link)

Fixed an issue that could make automatic screen rotation not work properly. (David Edmundson, link)

Fixed an issue that could make XWayland-using apps flicker a bit on some screens with some GPUs. (Xaver Hugl, link)

Fixed a weird issue in that could make the CPU and memory usage skyrocket after you used KRunner to search for certain specific things and then pressed the Page Up key. (Harald Sitter, link)

When you turn on automatic login and a message appears telling you to change your wallet to have en empty password so that it will automatically unlock, the button you can click to do so once again works. (David Edmundson, link)

Fixed a couple of labels that didn’t display localized text properly. (Nicolas Fella and Nate Graham, link 1 and link 2)

Fixed an issue that made desktop icons jump around when you moved a panel to an adjacent screen edge. (Akseli Lahtinen, link)

Fixed a funny issue that made newly-created panels inherit some of their initial sizing settings from the most-recently-created panel, rather than using the default settings. (Fabian Vogt, link)

Fixed an issue in System Monitor that made it impossible to re-select table columns after clearing the selection by clicking in the empty area below the table. (Arjen Hiemstra, link)

Frameworks 6.20

Fixed the current third most common Plasma crash, which could happen when changing themes. (Arjen Hiemstra, link)

Fixed an issue that made the external link icon look weird in GTK apps when using the Breeze icon theme (David Redondo, link)

Other bug information of note:

Notable in Performance & Technical

Plasma 6.4.5

Substantially reduced KWin’s CPU usage while playing full-screen video. (Someone amazing in KWin, link)

Plasma 6.5.0

Improved the speed with which Discover fetches Flatpak information while starting up, improving launch speed and responsiveness in many cases. (Aleix Pol Gonzalez, link)

Information about the size of the folder selection dialog is now stored in the state config file, not the settings config file. This helps keep the settings file from changing when transient states change, making it easier to version-control your config files. (Nicolas Fella, link)

How You Can Help

KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.

You can help KDE by becoming an active community member and getting involved somehow. 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, too.

You can also help us by making a donation! A monetary contribution of any size 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 a new Plasma feature or a bugfix mentioned here, feel free to push a commit to the relevant merge request on invent.kde.org.

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.

Let’s go for my web review for the week 2025-41.


Citizen Protest Halts Chat Control

Tags: tech, law, surveillance

Well done everyone. This bullet was dodged… for now! This kind of fever comes back regularly unfortunately.

https://www.patrick-breyer.de/en/citizen-protest-halts-chat-control-breyer-celebrates-major-victory-for-digital-privacy/


In Praise of RSS and Controlled Feeds of Information

Tags: tech, social-media, rss

Another nice one about the power of RSS and why it’s an important technology.

https://blog.burkert.me/posts/in_praise_of_syndication/


Windows 11 removes all bypass methods for Microsoft account setup, removing local accounts

Tags: tech, windows, surveillance, foss

Probably preaching to the choir here… but if you still got Windows in your life between the end of 10 and what they’re doing to 11, it’s really high time you ditch it. Come over to the Free Software operating systems side. It might require an initial effort but it won’t stab you in the back like this.

https://alternativeto.net/news/2025/10/windows-11-now-blocks-all-microsoft-account-bypasses-during-setup/


Who Owns Express VPN, Nord, Surfshark? VPN Relationships Explained

Tags: tech, vpn, business, privacy

Some relationships here are definitely shady. Be careful who you trust with your traffic.

https://windscribe.com/blog/the-vpn-relationship-map/


Apertus: a fully open, transparent, multilingual language model

Tags: tech, ai, machine-learning, gpt, foss

ETH Zurich keeps making progress on its model. It’s exciting and nice to see an ethical offering develop in that space. It shows that when there is political will it can be treated as proper infrastructure.

https://ethz.ch/en/news-and-events/eth-news/news/2025/09/press-release-apertus-a-fully-open-transparent-multilingual-language-model.html


WireGuard topologies for self-hosting at home

Tags: tech, networking, vpn, wireguard, self-hosting

Interesting breakdown of a possible organisation for accessing self-hosted hardware at home through wireguard.

https://garrido.io/notes/wireguard-topologies-for-self-hosting-at-home/


UUIDv47 — UUIDv7-in / UUIDv4-out

Tags: tech, uuid, privacy, performance

Interesting idea, trying to bridge the best of both UUID options.

https://uuidv47.stateless.me/


Python 3.14.0

Tags: tech, python, foss

It’s out now, this is a big one with quite a few interesting features. Let’s see how it’s used in practice.

https://www.python.org/downloads/release/python-3140/


Python 3.14 Is Here. How Fast Is It?

Tags: tech, python, benchmarking, performance

First rough benchmarks for CPython 3.14. It looks like the JIT isn’t giving much improvement on the cases explored, the free threading on the other hand is a clear advantage for multithreaded cases. Of course as usual Pypy is still way faster. That said, like anything else: first measure in your own context before taking any decision.

https://blog.miguelgrinberg.com/post/python-3-14-is-here-how-fast-is-it


C++26: range support for std::optional

Tags: tech, c++, design, api

It’s kind of an unusual design choice… This is subtle, I think I’m still a bit on the fence regarding this one.

https://www.sandordargo.com/blog/2025/10/08/cpp26-range-support-for-std-optional


std::ranges may not deliver the performance that you expect

Tags: tech, c++, benchmarking, performance

As usual, you need to measure before you jump to conclusion…

https://lemire.me/blog/2025/10/05/stdranges-may-not-deliver-the-performance-that-you-expect/


Const, Move and RVO

Tags: tech, c++

Reminder that there are a few cases where you might not want your variables declared as const.

https://www.cppstories.com/2017/01/const-move-and-rvo/?m=1


Why we didn’t rewrite our feed handler in Rust

Tags: tech, c++, rust, type-systems

An illustration of why C++ can still be a relevant choice in new code. It all depends on the contraints you have for a given problem.

https://databento.com/blog/why-we-didnt-rewrite-our-feed-handler-in-rust


Cancelling async Rust

Tags: tech, rust, asynchronous

Interesting post which gives plenty of insights on how async Rust is designed and behaves.

https://sunshowers.io/posts/cancelling-async-rust/


A case for learning GPU programming with a compute-first mindset

Tags: tech, gpu, shader, teaching, learning, debugging

An interesting way to approach the topic of GPU programming nowadays. It might indeed make more sense nowadays than reaching for putting pixels on screen as a first objective.

https://themaister.net/blog/2025/10/05/a-case-for-learning-gpu-programming-with-a-compute-first-mindset/


The Single Responsibility Principle

Tags: tech, design, craftsmanship, quality

An explanation about where the SRP comes from and what it really means. It’s very often misunderstood or overlooked.

https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html


ATDD From the Trenches

Tags: tech, tests, tdd, atdd

A little introductory article about putting an ATDD cycle in place for your development.

https://www.infoq.com/articles/atdd-from-the-trenches/


Programmer Test Principles

Tags: tech, tests, tdd

A bit old but still relevant. Don’t focus on tools or the fashion “du jour”, instead have a set of timeless principles and evaluate your work against them.

https://medium.com/@kentbeck_7670/programmer-test-principles-d01c064d7934


Concerns about TDD

Tags: tech, tests, tdd, learning, teaching

This is definitely a skill which is hard to teach an learn. When it sticks it brings really nice results though…

https://ronjeffries.com/articles/020-01ff/tdd-issues/


The static risk fallacy

Tags: tech, security, risk

Interesting take. Indeed risks shouldn’t be considered in isolation. They actually compound and that can add up fairly quickly.

https://chrisbeckman.dev/posts/static-risk-fallacy


Products Over Projects

Tags: tech, project-management, product-management, organization

I wouldn’t frame it as always superior (I’d argue the article falls a bit in this trap). Still this can sometimes be an alternative to driving everything purely on project mode. Some organizations would benefit from such a change of perspective other less so.

https://martinfowler.com/articles/products-over-projects.html


Better Agile Adoptions

Tags: tech, agile, team, change, organization, management

I think the Open Agile Adoption ideas have been unfortunately unnoticed. It’s thus hard to tell if it would have been fairly efficient. What’s sure though is that the widespread mandate approach used during the past decade does a disservice to teams.

https://www.infoq.com/articles/open-agile-adoption-1/


How to Reward Agile Teams

Tags: tech, team, hr, economics, project-management

I’m a bit on the fence regarding this article. That being said there’s something I like about it: it’s not always purely about money. It’s also a good reminder that if the reward is in monetary form it’s almost impossible to not somehow alter team dynamics with it.

https://www.mountaingoatsoftware.com/blog/how-to-reward-agile-teams


Seeing like a software company

Tags: tech, organization, management

Interesting view… This explains quite well why most organizations have both formal and informal processes. I’m not sure I agree that the informal will always be fought against by management though. I’ve seen clever management which accepts the informal processes as long as it doesn’t harm the organization.

https://www.seangoedecke.com/seeing-like-a-software-company/



Bye for now!

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!

This release primarily focuses on integrating the extensive new features introduced in Qt 6.10, while simultaneously addressing several refinements across both PySide6 and Shiboken6. Key improvements include enhanced support for @QEnum and @QFlag decorated enumerations, which can now be utilized as properties for custom widgets within Qt Designer. Additionally, significant performance optimizations have been implemented for the invocation of overridden Python functions, and various type hinting issues have been resolved. These enhancements, among other updates, contribute to a more robust and efficient development experience.

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.