Skip to content

Thursday, 16 October 2025

We are happy to announce the release of Qt Creator 18 RC.

Wednesday, 15 October 2025

Sometimes an application can look kinda wrong due to very small details, few pixels can make or ruin the first impact. And since today a lot of monitors, especially laptop ones have to use fractional scaling, making things look sharp and pixel perfect is even harder.

Here is System Settings, on a screen scaled at 175%:

Here is zoomed, you can see some separators being one pixel, some other being two, usually blurred, making them appear of significantly different colors:

It was something that always annoyed me, so this is how System Settings will look with the next Kirigami that will come with the next Frameworks release in the beginning of November:

Here zoomed:

Separators are now 2 perfectly sharp pixels everywhere on 175%, giving the app a much cleaner look.

This will apply to every application which uses the Separator QML component. There are of course a lot of similar details fixes to do (and yes, I can see several ones still in the above screenshot), but sometimes small polishes can look like a big improvement 🙂

Monday, 13 October 2025

This year, 2025, the KDE Community held its yearly conference in Berlin, Germany. This makes me happy in various ways – I like Berlin, and visit the city more often than, say, Amsterdam, which is a lot closer to my home. Here are some of my notes (wall-of-text) from this year, posted on the day of KDE’s 29th birthday.

Travel and Lodging

As usual, I took a train to Berlin. The Deutsche Bahn (DB) Inter City Express (ICE) is generally pretty fast. Not this time, as the first leg arrived 29 minutes and 30 seconds late, for a change-over of 30 minutes. The announcer in the train already said “your connecting train cannot wait” but that did not stop 20 Dutch people from sprinting from platform 3 to platform 12 and then being annoyed as they watched the taillights of the departing train.

Berlin is, as always, Berlin. Filthy and weird and wonderful. I smacked a man on the U-Bahn with my pink whip, much to the amusement of his partner. Hotel Les Nations is my regular place to stay, and remains a good – not particularly cheap – place to stay.

Things Around Town

There’s a Square Dance club open every evening of the week. I only visited one, the Honey Bears, at the south end of Lichterfelde, and had a warm welcome there. Square is a little like KDE, you can show up somewhere and find people with the same weird little hobby and spend an evening just doing your thing.

Berlin being Berlin, the buses also run until late, which is nice when trying to get back from Lichterfelde to Alt-Moabit.

The beer garden at the Zoo and the beer garden at the locks on the Spree and other beer gardens – see the pattern? It was wonderful weather for hanging around in the evenings with KDE friends. It’s about eight years since my kids figured out that “Akademy” means “Dad goes out drinking with his buddies”, when they saw that in Almeria.

The day trip was one of the most chill I’ve participated in and I congratulate the team on picking something to get a bunch of KDE people out of the building and into the park.

Venue

The TU Berlin is a huge building, built like a maze, with upstairs and downstairs and half stairs and hidden levels and everything. It would make a great Doom level. The lecture halls for the conference part could seat about 180, which is a good size for Akademy. Not over-crowded, not so large that we feel lonely. A/V worked well, and the professional video / streaming folk were exactly that – professional.

Slightly less good were the BoF rooms the rest of the week. I kind of missed the nooks-and-crannies that we had in Würzburg and in Thessaloniki. The acoustics in several of the BoF rooms were terrible. That didn’t stop us from having a full schedule. And one of the attendees – Dominic, you got me coffee, and you fixed up the room audio for my workshop – turned out to have amazing skills at figuring out the multi-channel audio setup.

So there was good bits, and less-good bits. I’d hope for more small rooms in future. Having small rooms means that the acoustics are a bit better, because there’s just less hubbub to begin with. It also means that we could have a room with more quiet no-discussion-just-knitting kinds of activities.

Soylent^W KDE Akademy is People

I had so much fun meeting new people – Aks and Tecsiederp and the audio guy Dominic and and and .. even the security guy on duty on saturday who told me excitedly about how he uses KDE Connect on his Steam Deck. It’s good for Akademy to move around a little and bring in new people each year. People who need to hear the story of the pink whip™ for the first time.

I had so much fun meeting old people. Er .. I’m old enough to be plenty of attendees’ dad, I mean “KDE people I’ve known for years”. People who were there when the pink whip™ was first used. Faces returning to the community, like Sebas, and faces I see every year because they are like a rock, like Cullmann.

KDE Akademy is Talks

For Reasons™ I missed the opening keynote from the state of Schleswig-Holstein. The second day keynote from Paloma Oliveira was really good. It was about politics and power dynamics and welcoming (under-represented) groups into a community. Of course it was politics, because Free Software is politics, because all technology is politics, and choosing who to welcome is a fundamental part of a Free Software project.

At Akademy itself I nodded along in agreement, but I don’t think the message really hit home again until events in early October. Separately, a study by the Dutch national “Social Cultural Planningbureau” this month reports that diversity “leads to friction more than inclusion”, in a buried-the-lede no-shit-Sherlock report that says that you actually have to work actively on inclusion. Which is one of the things Paloma said.

I gave (part of) one talk, but that was the report of the board, which is what the Dutch call “een moetje”. So I didn’t get my hair cut for that one.

Talks I particularly enjoyed on the first day were Harald’s about KDE Linux (I got a banana, and I did install KDE Linux, and did report a bug with the partitioning-thing and UUID that it uses) and Cristián’s about more and better language bindings for Qt. I might be 95% a C++ guy, but I feel having a larger number of languages available for expressing ideas is generally better (and many languages are better than C++ in particular areas).

There’s an interesting piece by Felienne Hermans in the Dutch NRC of october 14th 2025 about how programming is possibly the wrong way to think about improving the world through (digital) technology.

A talk I would very much have liked to see was Alexandra’s talk about running business and Free Software together.

Day two I had signed up as a volunteer to act as session chair in room 2. That reduced the choices I could make, but each track and each talk has something cool to offer. Absolute banger talk by Joshua about getting things right for artists. I’d like to thank Achilleas from Red Hat who also chaired in that room for being a great team.

This year’s speakers were all really good as well at being on time, wrapping up on time, and handling questions well. Audiences, too. I think I only shut down one “more a comment tha..”

KDE Akademy is BoFs

The BoF parts of the past few years have been rather hit-and-miss for me. My regular technical involvement with KDE as a whole was either very focused (on Calamares) or absent (because of work-work eating up all my C++ energy). I had a nice time sitting down just to do some work on Calamares this time, in one of the little-too-noisy BoF rooms, and because of that I listened in on, for instance, the End-of-10 Campaign discussion.

A BoF I actively went to was the KDE Initial System Setup BoF, led by Kristen. “KISS” isn’t necessarily a good acronym, but my suggestion of Linux Initial Configuration of KDE was emphatically rejected.

Initial setup and Calamares are pretty closely related, and something I’d like to do (see above, re: C++ energy) is improve interoperability of the two.

KDE Akademy is Dance

Don’t get me started on American Country Square Dance, because I will Be Tedious At You™ about it. At the welcome event Nicole asked me about it and I went on at length and in the end I put a square dance workshop on the BoF schedule.

Ten people showed up, that’s enough for one square! I can teach a very basic workshop, and the people who showed up were perplexed and amused – and followed instructions really well. That’s programmers for you. We gave a little demo at the end of the BoF wrap-up meeting, although it was a bit chaotic because two of the dancers had already left to catch the train back to Warszawa.

Next year I’ll be back (with more practice on my part on the teach-people-to-dance thing) for another round^Wsquare, and I hope other people will come with crocheting or other arts and crafts. Because in the KDE community you should be able to bring your whole self; programmer, kolourpaint-expert, dancer, and eepy-sleepy person.

Takeaway

Akademy is the event that brings the KDE community together; the whole breadth of people, as far as “in-person, and somewhere in the world” can bring everyone. I know we missed people – who can’t travel, who won’t travel, who can’t afford to be there for health or financial reasons. I had the privilege of being able to attend – time and health – and to be supported by KDE e.V. for that travel. It is worth it, every year, and I hope to see many new (and old) KDE contributors next year, wherever it may be.

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.

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.

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.