Skip to content

Saturday, 21 June 2025

X11 is in the news again, so I thought it would make sense to be clear about the Plasma team’s plans for X11 support going forward.

Current status: Plasma’s X11 session continues to be maintained.

Specifically, that means:

  • We’ll make sure Plasma continues to compile and deploy on X11.
  • Bug reports about the Plasma X11 session being horribly broken (for example, you can’t log in) will be fixed.
  • Very bad X11-specific regressions will probably be fixed eventually.
  • Less-bad X11-specific bugs will probably not be fixed unless someone pays for it.
  • X11-specific features will definitely not be implemented unless someone pays for it.

This is actually not too bad; there are relatively few open and fixable X11-specific bugs (0.76% of all open bug reports as of the time of writing), and when I went looking today, there were only two Bugzilla tickets requesting new X11-specific features that needed closing. Most bugs and features are platform-agnostic, so X11 users will benefit from all of these that get fixed and implemented.

Eventually it’s lights out for X11 though, right? When will that happen?

Yes, the writing is on the wall. X11’s upstream development has dropped off significantly in recent years, and X11 isn’t able to perform up to the standards of what people expect today with respect to HDR, 10 bits-per-color monitors, other fancy monitor features, multi-monitor setups (especially with mixed DPIs or refresh rates), multi-GPU setups, screen tearing, security, crash robustness, input handling, and more.

As for when Plasma will drop support for X11? There’s currently no firm timeline for this, and I certainly don’t expect it to happen in the next year, or even the next two years. But that’s just a guess; it depends on how quickly we implement everything on https://community.kde.org/Plasma/Wayland_Known_Significant_Issues. Our plan is to handle everything on that page such that even the most hardcore X11 user doesn’t notice anything missing when they move to Wayland.

Why are you guys doing this? Why don’t you like X11 anymore?

The Plasma team isn’t emotional about display servers; it’s just obvious that X11 is in the process of outliving its usefulness. Someday Wayland will be in this boat too; such is the eventual fate of all technologies.

In addition to the fact that Wayland is better for modern hardware, maintaining code to interact with two display servers and session types is exactly as unpleasant as it sounds. Our resources are always limited, so we’re looking forward to the day when we can once again focus on programming for a single display server paradigm. It will mean that everything else can improve just a little bit faster.

Regardless of when you pull the trigger, isn’t it premature?

Most major distros have already moved their Plasma sessions to Wayland by default, including Arch, Fedora, KDE neon, Kubuntu, and generally their downstream forks. Several others whose roadmaps I’m familiar with plan to do so in the near future.

At this point in time, our telemetry says that a majority of Plasma users are already using the Wayland session. Currently 73% of Plasma 6 users who have turned on telemetry are using the Wayland session, and a little over 60% of all telemetry-activating users (including Plasma 5 users) are on Wayland.

Interestingly, the percentage of Plasma 6 users on Wayland was 82% a month ago, and now it’s down to 73%. What changed? SteamOS 3.7 was released with Plasma 6 and the X11 session still used by default! Interestingly, since then the Wayland trendline has continued to tick up; a month ago the percentage of Wayland users dropped from 82% to 70%, and now today it’s up to 73%.

So you can see that to a large extent, this is up to distros, not us. It wouldn’t make sense for us to get rid of Plasma’s X11 support while there are still major distros shipping it by default, and likewise, it won’t make sense for us to keep it around long after those distros have moved away from it.

Regardless, Wayland’s numbers are increasing steadily, and I expect upward bumps when the next Debian and Kubuntu LTS releases come out, as both are currently planned to be Wayland by default.

Now, is Plasma’s Wayland session perfect? No. (what is?)

Is it better than the X11 session in literally every way? Also no.

Is it better in most ways that matter to most people? The numbers say yes!

Well I’m not a most people! I’m me, I’m an individual! I’m not a number, I’m a free man!

That’s fine, and you’re the reason why we’re still maintaining the X11 session! We’re going to try very hard not to to get rid of it until you’re happy too.

Ultimately that’s the goal here: make everyone happy! This includes people who have mixed-DPI/refresh rate multi-monitor setups or laptop touchpads, as well as people using AutoKey or graphics tablets with dials on them. Long transitions like this are tough, but ultimately worth it so that we all get something better in the end.

Welcome to a new issue of This Week in Plasma!

Every week we cover the highlights of what’s happening in the world of KDE Plasma and its associated apps like Discover, System Monitor, and more.

This week we released Plasma 6.4! And so far it’s been getting a really positive reception. The bug reports bear this out; most of the real actual bugs reported against 6.4.0 are either pre-existing issues or minor regressions, many of which we’ve already fixed in time for 6.4.1 coming next Tuesday.

Notable UI Improvements

Plasma 6.4.1

Discover’s list views are now properly navigable with the keyboard. (Christoph Wolk, link)

Improved the text readability in some of the list items in KRunner and Discover when the list items are pressed or clicked. (Nate Graham, link 1 and link 2)

KRunner showing list item with proper selected state with inverted text

Hovering over list items on System Settings’ User Feedback page no longer makes inscrutable icons appear. (Nate Graham, link)

Improved the readability of graph axis labels throughout Plasma so they meet the WCAG AA standard. (Nate Graham, link)

CPU bar chart with more readable Y axis labels

Plasma 6.5.0

Plasma’s Activity manager service now only stores the last 4 months’ worth of history by default, rather than storing all history ever and never pruning it. Setting a limit here makes the data more relevant and prevents performance problems caused by endlessly-growing databases. (Nate Graham, link)

Made further UI improvements to the Emoji Selector app: now the window is never so small that the sidebar list becomes scrollable, and the button to expand and collapse the sidebar is located on the header, rather than inline. (Oliver Beard, link)

Nicer, more compact emoji picker window

Removed the vertical line between the date and time on horizontal arrangements of the Digital Clock widget, since it proved unpopular, and people who want it can get it themselves by using a custom date format anyway. (Owen Ross, link)

On System Settings’ Shortcuts page, the “Add New” button is now located on the top toolbar rather than taking up unnecessary space above the list view. (Jakob Petsovits, link)

“Add New” button on toolbar

Reduced the minimum size of Custom Tiling tiles, so that you can have smaller ones on particularly large screens like ultra-wides. (Tyler Slabinski, link)

The Networks widget’s captive portal banner now uses the inline/header styling, reducing the frames-within-frames effect. (Kai Uwe Broulik, link)

Removed the NOAA Weather Picture Of The Day wallpaper plugin, because unfortunately the source data changed in a way that makes it no longer consistently suitable for being displayed on the desktop. (Kat Pavlů, link)

Notable Bug Fixes

Plasma 6.3.6

Fixed a bug that could sometimes cause keyboard shortcuts to get lost on certain distros when performing system upgrades. (Vlad Zahorodnii, link)

Fixed a regression that caused KRunner’s faded completion text to sometimes overflow from the window. (Nate Graham, link)

Fixed a small visual regression in KWin’s “Slide Back” effect. (Blazer Silving, link)

Plasma 6.4.1

Fixed several issues in the Folder View widget that caused selecting or opening items to not work when using certain non-default view settings, or when the view was scrollable, or when using a touchscreen. (Christoph Wolk, link)

Fixed a bug in the Meta+V clipboard popup that made it sometimes fail to pre-select the top-most item. (Akseli Lahtinen, link)

The Clipboard settings window’s shortcuts page no longer shows columns for local shortcuts that you can confusingly set and have them do nothing, because the clipboard is global in scope. (Akseli Lahtinen, link)

Fixed the Earth Science Picture of The Day wallpaper plugin after the source data changed its formatting again. (Kat Pavlů, link)

Made a few fixes to the “Missing Backends” section of Discover’s settings window that prevented it from working quite right. (Carl Schwan, link)

Fixed a bug that prevented direct scan-out (and its attendant performance benefits) from activating on rotated screens. (Vlad Zahorodnii, link)

Fixed a bug that could cause the system to lock or suspend more quickly than intended after an app that was blocking those activities stops doing so. (Akseli Lahtinen. link)

Installing a new wallpaper plugin no longer causes the plugin list combobox to become blank. (Nate Graham, link)

Frameworks 6.16

Fixed a regression that caused System Settings’ sidebar list items to display hover tooltips when they weren’t needed. (Nate Graham, link)

Other bug information of note:

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:

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

It took a year for me to actually make a release, but KTimeTracker 6.0.0 is now out!

Major changes

  • The major thing about it is that KTimeTracker has been ported to Qt6. For end users this means up-to-date Linux distributions that had orphaned KTimeTracker will get the package back once a package maintainer steps up.

  • KTimeTracker has long had a (currently) X11-exclusive feature where it detects the virtual desktop you’re in and uses that to start/stop tracking a task. This does not work on Wayland and Windows, and now it won’t show up on either platform so you don’t attempt to use something that doesn’t work!

Friday, 20 June 2025

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


Is it really foss?

Tags: tech, foss, licensing, community

Nice idea and well executed I’d say. If you got doubts about something being FOSS, stopping there and checking is in order.

https://isitreallyfoss.com/


bento: a computer in a keyboard

Tags: tech, xr, hardware, hacking

Definitely a cool hardware hack. There are really many form factors and hardware options to explore for better XR experience.

https://github.com/lunchbox-computer/bento


We Live In a Golden Age of Interoperability

Tags: tech, interoperability, history

It is indeed much easier nowadays to preserve produced content. We have so many open and simple formats to choose from. It’s not always been like this.

https://borretti.me/article/we-live-in-a-golden-age-of-interoperability


matrix is cooked

Tags: tech, messaging, matrix, business

I felt that a bit the past couple of years when looking how the ecosystem evolved. The situation seems concerning to me.

https://blog.cyrneko.eu/matrix-is-cooked


Start your own Internet Resiliency Club

Tags: tech, networking, internet, lora, meshstatic, messaging

Feels surprisingly accessible. Makes me want to play with meshstatic now.

https://bowshock.nl/irc/


Locally hosting an internet-connected server

Tags: tech, networking, self-hosting

Nice trick to properly route from a public VPS with enough addresses to servers in your basement.

https://mjg59.dreamwidth.org/72095.html


Should we design for iffy internet?

Tags: tech, networking, web, performance

I’d like to see the equivalent for Europe. Clearly in the US things aren’t always great for Internet access. The latency is likely higher than you think, and the bandwidth lower.

https://bytes.zone/posts/should-we-design-for-iffy-internet/


Resurrecting a dead torrent tracker and finding 3 million peers

Tags: tech, p2p, networking

Funny experiment. A bit incredible how many peers you can find this way.

https://kianbradley.com/2025/06/15/resurrecting-a-dead-tracker.html


New Linux Flaws Enable Full Root Access via PAM and Udisks Across Major Distributions

Tags: tech, linux, security

If you’re behind on your updates, it’s time to do it quickly.

https://thehackernews.com/2025/06/new-linux-flaws-enable-full-root-access.html


PoC Attack Targeting Atlassian’s MCP

Tags: tech, ai, machine-learning, gpt, copilot, security, architecture

And one more… it’s clearly driven by an architecture pattern used by all vendors. They need to get their acts together to change this.

https://www.catonetworks.com/blog/cato-ctrl-poc-attack-targeting-atlassians-mcp/


Self-Adapting Language Models

Tags: tech, ai, machine-learning, nlp

Interesting research. Down the line it could help better fine tune models and side step some of the attention system limitations. Of course it comes with its own downsides, more research is necessary.

https://jyopari.github.io/posts/seal


What Google Translate Can Tell Us About Vibecoding

Tags: tech, ai, machine-learning, gpt, translation, culture

Good reminder that professional translators aren’t gone… on the contrary. There’s so many things in languages that you can’t handle with a machine.

https://ingrids.space/posts/what-google-translate-can-tell-us-about-vibecoding/


Why I Won’t Use AI

Tags: tech, ai, machine-learning, gpt, copilot, ethics, economics, ecology

I recognize myself quite a bit in this opinion piece. It does a good job going through most of the ethical and practical reasons why you don’t need LLMs to develop and why you likely don’t want to.

https://agentultra.com/blog/why-i-wont-use-ai/index.html


Your Brain on ChatGPT: Accumulation of Cognitive Debt when Using an AI Assistant for Essay Writing Task

Tags: tech, ai, machine-learning, gpt, learning, cognition, neuroscience

OK, this is a serious and long paper. It shows quite well how over reliance on ChatGPT during the learning phase on some topics impacts people. It’s mesurable both from their behavior and through EEG. Of course, it’d require more such studies with larger groups. Still those early signs are concerning.

https://arxiv.org/abs/2506.08872


The AI Slop Fight Between Iran and Israel

Tags: tech, ai, machine-learning, graphics, fake, fake-news, war

There’s always been disinformation in time of wars. The difference is the scale and speed of producing fake images now.

https://www.404media.co/the-ai-slop-fight-between-iran-and-israel/


It’s True, “We” Don’t Care About Accessibility on Linux

Tags: tech, linux, desktop, accessibility, foss

I’d say this is a sane rant. Indeed, there’s more progress to do, it will probably never stop. What could stop though is throwing crap at the people who quietly put effort into making our desktops more accessible.

https://tesk.page/2025/06/18/its-true-we-dont-care-about-accessibility-on-linux/


Selfish reasons for building accessible UIs

Tags: tech, web, frontend, accessibility

A bit focused on web frontend, but that applies equally to other stacks. There are many reasons to make UIs accessible.

https://nolanlawson.com/2025/06/16/selfish-reasons-for-building-accessible-uis/


strace tips for better debugging

Tags: tech, system, debugging

A very important tool to have around and know how to use. This is a neat introduction.

https://rrampage.github.io/2025/06/13/strace-tips-for-better-debugging/


The plight of the misunderstood memory ordering

Tags: tech, multithreading, atomics

Since atomics are really a hard topic, this article is welcome. It does a good job explaining what memory ordering does. It helps to debunk some common misconceptions.

https://www.grayolson.me/blog/posts/misunderstood-memory-ordering/


Zig And Rust

Tags: tech, rust, zig, programming, ecosystem

They both have their niches and it’s welcome in my opinion. Now there are questions about the long term viability of Zig’s ecosystem… the niche being smaller it’s more at risk.

https://matklad.github.io/2023/03/26/zig-and-rust.html


Making GNOME’s GdkPixbuf Image Loading Safer

Tags: tech, linux, graphics, safety, rust, sandbox, gnome

Nice move. It doesn’t have to be about rewriting everything in Rust. Still there are some areas where we can benefit from the language and sandboxing.

https://blogs.gnome.org/sophieh/2025/06/13/making-gnomes-gdkpixbuf-image-loading-safer/


Rendering Crispy Text On The GPU

Tags: tech, graphics, shader

This is in my opinion one of the most difficult tasks when rendering with the GPU. Texts are really hard to get right.

https://osor.io/text


From SDR to ‘Fake HDR’: Mario Kart World on Switch 2 Undermines Modern Display Potential

Tags: tech, graphics, hardware, colors

The hardware is there, the software not so much. Now I’d argue that the author overestimate the availability of said hardware in households.

https://www.alexandermejia.com/from-sdr-to-fake-hdr-mario-kart-world-on-switch-2-undermines-modern-display-potential/


The Server Doesn’t Render Anything

Tags: tech, web, frontend, backend

Friendly reminder that the term “server-side rendering” doesn’t make sense. Also, you don’t have to use React of the likes on the server side, it should be as simple as making string joins indeed.

https://unplannedobsolescence.com/blog/the-server-doesnt-render/


Revisiting Knuth’s “Premature Optimization” Paper

Tags: tech, performance, optimization

What is premature optimization really? If you look at the full paper it might not be what you think. In any case we get back to: do the math and benchmark.

https://probablydance.com/2025/06/19/revisiting-knuths-premature-optimization-paper/


Implementing Logic Programming

Tags: tech, programming, logic, prolog, datalog

Wondering how to implement your own inference engine? Here is a nice simple blueprint to get started.

https://btmc.substack.com/p/implementing-logic-programming


Refactoring to an Adaptive Model

Tags: tech, design, pattern, refactoring

The Adaptive Model is a lesser known design pattern. Like any other pattern make sure you are in the right context to introduce it. Especially this one as it can get really verbose. This article shows a refactoring path for moving from imperative logic to adaptive model.

https://martinfowler.com/articles/refactoring-adaptive-model.html


#### The Nuanced Reality of Throttling: It's Not Just About Preventing Abuse *Tags: tech, api, services, reliability*

This is a good look at the reasons behind throttling. If you accept a less naive model than “preventing abuse”, you can build a better throttling strategy.

https://blog.joemag.dev/2025/06/the-nuanced-reality-of-throttling-its.html


Double-Entry Ledgers: The Missing Primitive in Modern Software

Tags: tech, design, architecture, data, databases

This is indeed a metaphor which should be more common in enterprise software.

https://www.pgrs.net/2025/06/17/double-entry-ledgers-missing-primitive-in-modern-software/


A meta-analysis of three different notions of software complexity

Tags: tech, complexity, management, team

Interesting comparison of different definitions for software complexity (which is an ambiguous term to say the least). It leads to nice consequences when team dynamics are considered.

https://typesanitizer.com/blog/complexity-definitions.html


Mr. Miyagi Teaches Coding

Tags: tech, craftsmanship, funny

Since the movie became fashionable again, it might be interesting to go through this piece. The movie wasn’t great, the article is a bit of a stretch… but at times it tells something about what’s required to master a craft. It’s a funny and short piece.

https://8thlight.com/insights/mr-miyagi-teaches-coding


On Leading Friends

Tags: management, leadership, hr

Juggling different roles isn’t easy. It’s indeed even harder when friendships are involved. Know which hat you’re wearing at all times.

https://newsletter.canopy.is/p/on-leading-friends


Metcalfe’s Law against Brooks’ Law

Tags: tech, foss, community

This is definitely a paradox in community dynamics.

https://lemire.me/blog/2025/06/15/metcalfes-law-against-brooks-law/


What causes procrastination for software engineers?

Tags: tech, engineering, leadership, project-management, management, procrastination, productivity

Interesting findings about procrastination. Some effects were expected, others less so. The actions to avoid it in teams should be well known now.

https://rdel.substack.com/p/rdel-93-what-causes-procrastination


Better Decisions are as Easy as 1, 2, 3

Tags: team, organization, decision-making

Interesting trick. Good way to frame decision making when needed.

https://www.congruentchange.com/better-decisions-are-as-easy-as-1-2-3/


Did you know that snails and slugs use different gaits to move on different surfaces?

Tags: science, biology

Maybe it’s just me but I find that fascinating.

https://kozielska-reid.eu/2021/05/15/did-you-know-that-snails-and-slugs-use-different-gaits-to-move-on-different-surfaces/



Bye for now!

Wednesday, 18 June 2025

Updates in the project in 2024 and the first half of 2025

The Plasma Mobile team is happy to announce the developments in the project over the past few months!

Housekeeping

This blog post was completed much later than originally planned. In the meantime, several releases have taken place:

This blog post is already quite long, so it will omit changes merged for Plasma 6.5 (releasing in October, to be announced in a future post).

With the Plasma 6.2 release, we moved Plasma Dialer and Spacebar to the Plasma release cycle, allowing us to have consistent releases of the two apps. This completes our year long move to having all Plasma Mobile related projects released as part of wider KDE releases, streamlining the work for distributions and taking a load off us on having to maintain a separate release cycle!

In other news, a Fedora spin for Plasma Mobile was released! It will only be targeting devices that can currently boot Fedora (i.e. not ARM phones), but is very exciting nonetheless! Read more about it here, and get it here.

Plasma Sprint

In May, we attended the Plasma developers' sprint in Graz, Austria! Read more about what we did from the blogs below:

Hacking at TU Graz
Hackerspace

NGI0 Core (NLnet) funding

Bhushan recently received funding through the NGI0 Core Fund to work on the power management stack on Plasma Mobile (and Plasma as a whole)!

You can read more about this on his blog. The project details are described here.

CI

Bart added an Alpine CI to KDE infrastructure, allowing for KDE projects to ensure they build correctly for Alpine before release!

Plasma

Work continues on from the Plasma 6 release! Only major features and improvements are described below, see the Plasma release notes for the full list of changes.

Task Switcher

Luis worked on bringing back gestures to the task switcher! The implementation now uses KWin's gesture API, and has several new features over the Plasma 5 implementation:

  • Swiping up fast from the bottom of the screen minimizes the app and goes to the homescreen.
  • Swiping up and holding from the bottom of the screen keeps the task switcher open.
  • Swiping left and right on on the bottom of the screen allows for scrubbing through the currently opened apps.
  • Haptic feedback occurs during the opening gesture if releasing will open the task switcher.

(Luis Büchi, Plasma 6.2, Link 1, Link 2, Link 3, Link 4, Link 5, Link 6)

Micah further improved and refined the task switcher and gesture tracking, polishing the flow of animations and activation thresholds. (Micah Stanley, Plasma 6.2.1, Link)

Devin added support for the tasks to be sorted by last activation. (Devin Lin, Plasma 6.2, Link)

Luis added support for double tapping on the task switcher button to switch between the two most recently used apps. (Luis Büchi, Plasma 6.3, Link)

Screenshot of <nil>
Screenshot of <nil>

Lockscreen

The lockscreen keypad design was overhauled to use a more traditional PIN layout. It is much simpler to render and is also easier to use with one hand. (Devin Lin, Plasma 6.2, Link)

Various issues with input unresponsiveness were also fixed, as well as support for passwordless login. (Devin Lin, Plasma 6.2, Link 1, Link 2, Link 3)

The clock design was also overhauled to be larger and blend better with the wallpaper. (Micah Stanley, Plasma 6.2, Link)

Quick action buttons were also added, which are configurable to allow actions (ex. flashlight toggle) be easily accessed while the device is locked. (User8395 & Micah Stanley, Plasma 6.4, Link 1, Link 2)

Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>

Notifications

Popup notifications were fully implemented, with a refreshed look and the capability to show multiple notifications in a "stack". (Micah Stanley, Plasma 6.3, Link)

Scrolling through an overflowing notifications list was fixed. (Micah Stanley, Plasma 6.4, Link)

Various issues with the notification widget were also fixed:

  • Job notifications now show up properly and are dismissable.
  • Notification contents are now properly clipped as they are being dismissed.

(Devin Lin, Plasma 6.2, Link)

Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>

Homescreen (Folio)

Work continued on fixing and polishing issues in the default homescreen introduced in Plasma 6, here are some highlights:

  • A search bar was added to the applications list. (Devin Lin, Plasma 6.2, Link)
  • Support for touchpad interaction was added. (Devin Lin, Plasma 6.2, Link)
  • An option was added to be able to lock the homescreen layout from editing. (Micah Stanley, Plasma 6.4, Link)
  • State being shared between multiple displays was fixed. (Devin Lin, Plasma 6.1.3, Link 1, Link 2)
  • The settings view is now closed when the home button is pressed. (Devin Lin, Plasma 6.1.5, Link)
  • A button was added in the wallpaper selector to see the full wallpaper config window. (Devin Lin, Plasma 6.1.2, Link)
  • A dialog was added to ask the user to confirm when deleting a folder. (Devin Lin, Plasma 6.2, Link)
  • Application icons resizing to only predefined sizes was fixed. (Devin Lin, Plasma 6.2, Link)
  • When an application gets deleted, user placed icons of it are also removed. (Devin Lin, Plasma 6.4, Link)
  • Haptics were added to various actions on the homescreen. (Micah Stanley, Plasma 6.4, Link)
  • Widgets no longer activate a popup when being held to be edited. (Florian Richer, Plasma 6.4.1, Link)
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>

Homescreen (Halcyon)

Devin fixed situations where the favourited applications may not activate when tapped. (Devin Lin, Plasma 6.1.4, Link)

Action Drawer

An expanded mode to the music widget when tapped was added, that allows for the song position to be changed. (Florian Richer & Micah Stanley, Plasma 6.2, Link 1, Link 2, Link 3)

The action drawer can now be opened even when an application is fullscreen. (Micah Stanley, Plasma 6.3, Link)

An "overscroll" animation when the panel is fully open and the finger overshoots was added. (Micah Stanley, Plasma 6.2, Link)

A marquee for quick setting titles was added, fixing eliding with certain languages. (Athozus, Plasma 6.2, Link)

Quick settings are now hidden when they are not applicable, such as for mobile data when there is no modem. (User3895, Plasma 6.3, Link)

The order of quick settings after being adjusted from the settings is now fixed. (Florian Richer, Plasma 6.4.1, Link 1, Link 2, Link 3)

The action drawer panel now hides when screen brightness is adjusted, making it easier for the user to gauge the brightness they would like. (Micah Stanley, Plasma 6.3, Link)

A quick setting was added to be toggle whether all applications are shown in fullscreen (panels can be shown when swiping from the top/bottom). (Micah Stanley, Plasma 6.4, Link)

The screen recording quick setting is now properly ported to Plasma 6 and has been brought back. (Florian Richer, Plasma 6.2, Link)

Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>

Status Bar

The status bar height can now be resized in the settings. (Sebastian Kugler, Plasma 6.3, Link)

The status bar can now be swiped down to be shown when in a fullscreen application. (Micah Stanley, Plasma 6.3, Link)

A config option was added to toggle showing the battery percentage label. (Micah Stanley, Plasma 6.4, Link)

An optional setting to also show the date in the status bar along with the time was added. (Athozus, Plasma 6.2, Link)

Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>

Volume Popup

The design of the volume popup was overhauled, and now made to not take away focus from the currently shown application window. (Micah Stanley, Plasma 6.3, Link)

Screenshot of <nil>

Manual Rotation Button

A button was added to the navigation panel to manually rotate the screen to the current orientation when auto-screen rotation is disabled. (Devin Lin, Plasma 6.3, Link)

A floating button with the same functionality was added to gesture mode. (Micah Stanley, Plasma 6.4, Link)

Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>

Startup Feedback

Devin overhauled the startup feedback implementation, which is the animation that shows when an application is opening:

  • Windows states are now being tracked to determine when to close it, fixing issues where it would close prematurely due to losing focus.
  • Startup feedback now shows up in the task switcher as a window.
  • A spinner was added which is shown when applications take longer to load.
  • Multiple displays are now properly supported.
  • The background color algorithm was improved to tint colors darker in dark modes, avoiding a blinding flash when application icons are bright.

(Devin Lin, Plasma 6.2, Link 1, Link 2, Link 3)

Screenshot of <nil>
Screenshot of <nil>

Settings

The settings application is now organized into categories. (Devin Lin, Plasma Settings v25.02, Link)

A toggle was added to force showing all settings modules, even ones that are not for mobile. (Devin Lin, Plasma Settings v25.06, Link)

A traffic monitor was added to the Wi-Fi settings module for the current network connection. (Sebastian Kugler, Plasma 6.3, Link)

A vendor information card was added to the Information settings module. (Sebastian Kugler, Plasma 6.3, Link)

Some issues with setting up mobile data connections with iPv6 were fixed. (Florian Richer, Plasma 6.2, Link)

Other

Windows will not longer be able to be unmaximized outside of docked mode, especially applicable to GTK applications. (Devin Lin, Plasma 6.3, Link)

There is now an option for distributions to manually disable the logout button from the shutdown screen. (Sebastian Kügler, Plasma 6.3, Link)

Applications

Most major announcements for applications are now covered in the This Week in KDE Apps series on the main blog.

However, some mobile specific updates will still be shared here!

Angelfish (Web Browser)

Micah greatly overhauled the tab list and search bar UI/UX on mobile! New features include:

  • Swiping up on the search bar now opens the tab list.
  • Swiping up again closes the tab list.
  • The tab list is now a fullscreen grid, with improved opening and closing animations.
  • The search bar now gives a URL preview when minimized during scrolling, and touching it maximizes it.

(Micah Stanley, KDE Gear 24.08, Link 1, Link 2)

Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>

Dialer

Bhushan investigated and worked with KWin maintainers to fix a major issue where a ghost dialer window would sometimes be on top of the lockscreen. (Vlad Zahorodnii & Bhushan Shah, Plasma 6.3.5, Link)

Bhushan and Luis investigated and fixed an issue where a single incoming call may be treated as multiple calls on dual-SIM devices. (Bhushan Shah, Plasma 6.3.5, Link)

Spacebar (SMS Messenger)

Various lockup and sending/receiving issues were fixed by having the client communicate to the database solely through the server, rather than having the server and client simultaneously access it. (Devin Lin, Plasma 6.2.1, Link)

Outgoing messages sending a notification to the user was fixed. (Devin Lin, Plasma 6.3, Link)

A message in the UI now shows up if the Spacebar daemon is not running. (Devin Lin, Plasma 6.2.1, Link)

A ModemManager mocking program for SMS was created to more easily develop Spacebar without a working modem setup (as Devin encountered). (Devin Lin, Plasma 6.3, Link)

The "new chat" page UX was redesigned to be easier to understand. (Devin Lin, Plasma 6.3, Link)

SMS chat conversations can no longer be started with contacts that have no phone numbers. (Florian Richer, Plasma 6.2, Link)

Discover (Application Store)

The apk backend (for Alpine/postmarketOS) was integrated into the project, which was previously carried as a large patch downstream. This allows it to be more easily iterated on and to be improved in the future. (Devin Lin, Plasma 6.2, Link)

An Alpine CI was added to KDE infrastructure, and hooked up the apk backend to be tested. (Bart Ribbers, Plasma 6.2, Link)

QMLKonsole (Terminal)

The modifier panel can now be manually enabled/disabled by the user, regardless of whether they are on mobile or desktop. (Om Mehta, KDE Gear 25.08, Link)

The warning for closing a tab with a running task was fixed for window closing events. (Mason Jiao, KDE Gear 24.08, Link)

The keyboard not popping up when tapping the terminal area, and the keyboard button were both fixed. (Devin Lin, KDE Gear 24.08, Link)

Clock

Kai took a deep dive into the app, adding new features and polishing the UX! Here are some highlights:

  • Timers now have a persistent notification to indicate status when the app isn't open. (Kai Uwe Broulik, KDE Gear 25.08, Link)
  • Timers can now be edited directly without having to be recreated. (Kai Uwe Broulik, KDE Gear 25.08, Link)
  • Timers can now be started, paused and reset from KRunner. (Kai Uwe Broulik, KDE Gear 25.08, Link)
  • The time page now has an analog clock. (Kai Uwe Broulik, KDE Gear 25.08, Link)
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>
Screenshot of <nil>

Contributing

Do you want to help with the development of Plasma Mobile? We are a group of volunteers doing this in our free time, and are desperately looking for new contributors, beginners are always welcome!

See our community page to get in touch!

We are always happy to get more helping hands, no matter what you want to do, but we especially need support in these areas:

  • Telephony (Calling and SMS)
  • Camera
  • App development (Photo Viewer, Browser, Audio Recorder, Games, etc.)
  • Shell work
  • You can also check out our Plasma Mobile issue tracker for more details.

Even if you do not have a compatible phone or tablet, you can also help us out with application development, as you can easily do that from a desktop!

Take Plasma Mobile for a spin! Check out the device support for each distribution and find the version which will work for your device.

If you have any further questions, view our documentation, and consider joining our Matrix channel. Let us know what you would like to work on or where you need support to get going!

Our issue tracker documentation also gives information on how and where to report issues.

Tuesday, 17 June 2025

Car Game

This project began as a casual college game I developed in my second year, using Pygame. The idea was simple. You’re driving a car, and your job is to survive enemy attacks, collect energy to stay alive, and shoot down as many opponents as you can. The more you destroy, the higher your score.

The core gameplay loop was designed in Pygame and includes:

  • A player car that moves left and right.
  • Opponent cars that spawn and rush toward the player.
  • Energy pickups that keep your car alive.
  • Bullets using which you take down enemy cars.

Each component is managed by its respective class: MyCar, Opponent, Fire, and Explosion.

The original version used keyboard input for movement and shooting. The objective was to survive as long as possible while scoring points by destroying opponents.

While building the game, I found myself knee-deep in things I hadn’t anticipated—like why a car would randomly vanish mid-frame, or why every collision either did nothing or ended in total chaos. I spent hours tweaking bounding rectangles, trying to get explosions to appear in the right place, and making sure enemy cars didn’t spawn on top of each other. Most of my time went into figuring out how to reset things properly after a crash or making sure the game didn’t freeze when too many things happened at once. It was messy, confusing, and at times exhausting, but weirdly satisfying when everything finally came together.

Recently, I revisited this project with the idea of automating it. I wanted to see if the car could make its own decisions—to dodge, shoot, or stay put—all without human input. That’s where Monte Carlo Tree Search (MCTS) came in. Being a decision-making algorithm, it’s particularly useful in many strategic games when the search space is large and rewards are sparse or delayed—perfect for a chaotic survival game like mine.

Implementation Details

The first step was to abstract the game state into a simplified object. I created a GameState class in mcts_car_shooter.py that captures:

  • My car’s x position.
  • Remaining energy and current score.
  • Positions and energy levels of alive opponents.
  • Fire coordinates (optional) and energy pickup position.

This allowed the MCTS algorithm to run without needing to interact with the actual rendering or physics code.

In the main game loop, every 5 frames, I pass the current game state to the MCTS engine:

if frame_counter % 5 == 0:
    state = get_game_state_from_main(mycar, energy, score, list(opponent))
    action = mcts_search(state, computation_time=0.05)

The result is one of four possible actions: "left", "right", "shoot", or "none".

Once the decision is made, the game responds accordingly:

if action == "left":
    mycar.move("left")
elif action == "right":
    mycar.move("right")
elif action == "shoot":
    fire_sound.play()

So here’s what’s actually going on behind the scenes every time the AI makes a move. The MCTS algorithm starts by traversing the existing tree of game states to find the most promising node to explore—this is the selection step. Once it lands on that node, it simulates one new possible action from there, which is the expansion phase. From that new state, it plays out a few random steps of the game using a basic policy (like “shoot if you see enemies” or “don’t move if energy is low”)—this is the simulation part. And then finally, based on how well or badly that rollout went, it backpropagates the reward back up the tree so that decisions that led to good outcomes get reinforced and are more likely to be chosen in the future. Each loop tries to balance exploration (trying out new stuff) and exploitation (doing what’s already known to work), and this constant balance somehow ends up producing surprisingly smart behavior out of nothing but random simulations and reward math.

After integrating MCTS, the game now plays itself. The car intelligently avoids enemy fire, conserves energy, and shoots at the right moments. It’s not perfect—but it’s good enough to survive for a few minutes and rack up a decent score.

However, one limitation of the current setup is that the AI doesn’t retain any memory of past games—it starts from scratch every time the game restarts. The MCTS algorithm only simulates forward from the current state and doesn’t learn or adapt across episodes. So while it can make fairly smart decisions in the moment, it has no long-term strategy or evolving understanding of what works best over time. There’s no persistence of experience, which means it can’t build on previous runs to improve future performance. This makes it efficient for one-off decisions but not ideal for learning patterns or refining behavior over multiple plays.

Next, I’m planning to take things a bit further. I want to train a policy network on the trajectories generated by MCTS so the model can learn from past simulations and make better long-term decisions without needing to simulate every time. I’m also thinking of adding a simple GUI to visualize how the MCTS tree grows and changes in real time—because watching the AI think would honestly be super fun. And eventually, I’d like to give players the option to toggle between AI-controlled and manual play, so they can either sit back and watch the car do its thing or take control themselves. You can find the full implementation on my GitHub. Thanks for reading!

Car Game

Back in my second year of college, I had just started exploring functional programming. I was picking up Haskell out of curiosity - it felt different, abstract, and honestly a bit intimidating at first. Around the same time, I was also diving into topics like context-free grammars, automata theory, parse trees, and the Chomsky hierarchy - all the foundational concepts that explain how programming languages are parsed, interpreted, and understood by machines.

Somewhere along the way, it hit me: what if I could build something with both? What could be more fun than writing an interpreter for an imperative programming language using a functional one? That idea stuck - and over the next few weeks, I set out to build a purely functional monadic interpreter in Haskell.

I designed the grammar for the language myself, mostly inspired by Python. I wanted it to support loops, conditionals, variable assignments, print statements, and basic arithmetic, boolean, and string operations. It even has a “++” operator for string concatenation. Writing the grammar rules involved figuring out how to model nested blocks, expressions with precedence, and side-effect-free evaluation. I built the entire thing using monadic parser combinators—no parser generators or external libraries, just Haskell’s type system and some stubbornness.

Here’s a rough look at the grammar that powers the interpreter:

Block 
    : { Part }

Part 
    : Statement Part
    | IfStatement Part
    | WhileLoop Part
    | Comment String Part
    | epsilon

Statement 
    : var = AllExpr;
    | print( AllExpr );

AllExpr 
    : Sentences ++ AllExpr
    | Sentences

Sentences
    : string
    | LogicExpr

IfStatement
    : if ( LogicExpr ) Block else Block

WhileLoop
    : while ( LogicExpr ) Block 

LogicExpr
    : BoolExpr && LogicExpr
    | BoolExpr || LogicExpr
    | BoolExpr

BoolExpr 
    : True
    | False
    | ArithBoolExpr

ArithBoolExpr
    : Expr > Expr
    | Expr < Expr
    | Expr == Expr
    | Expr != Expr
    | Expr

Expr 
    : HiExpr + Expr
    | HiExpr - Expr
    | HiExpr

HiExpr 
    : SignExpr * HiExpr
    | SignExpr / HiExpr
    | SignExpr % HiExpr
    | SignExpr 

SignExpr
    : int
    | ( AllExpr )
    | var

The interpreter parses the source code using this grammar, builds an abstract syntax tree, and evaluates it by simulating an environment. There’s no mutation—it just returns a new environment every time a variable is assigned or a block is executed.

Running it is simple enough. After compiling with GHC, it reads the program from stdin and prints the resulting variable bindings and any output generated by print() statements.

ghc -o interpreter interpreter.hs
./interpreter

Here’s a sample program to show how it works:

  
    { 
        i = 5;
        a = (4 < 3) || 6 != 7;
        print(a);

        # First While! #
        while(i != 0 && a) 
        { 
            print(i); 
            i = i - 1; 
        }

    }

    Output : a True
             i 0
             print True 5 4 3 2 1 

Once I had the interpreter working, I wanted to make it a bit more fun to interact with. So I built a small GUI in Python using tkinter. It’s nothing fancy—just a textbox to enter code, a button to run it, and an output area to display the result. When you click “Run,” the Python script sends the code to the Haskell interpreter and prints whatever comes back.

The entire thing—from parsing to evaluation—is written in a purely functional style. No mutable state, no IO hacks, no shortcuts. Just expressions flowing through types and functions. It’s probably not the fastest interpreter out there, but writing it did teach me a lot about how languages work under the hood.

Sunday, 15 June 2025

This is the release schedule the release team agreed on

https://community.kde.org/Schedules/KDE_Gear_25.08_Schedule

Dependency freeze is in around 2 weeks (July 3) and feature freeze one
after that. Get your stuff ready! 

🎉 New Clazy Release: Stability Boost & New Checks!

We’re excited to roll out a new Clazy release packed with bug fixes, a new check, and improvements to existing checks. This release included 34 commits from 5 contributors.


🔍 New Features & Improvements

  • New Check: readlock-detaching
    Detects unsafe and likely unwanted detachment of member-containers while holding a read lock. For example, when calling .first() on the mutable member instead of .constFirst()

  • Expanded Support for Detaching Checks
    Additional methods now covered when checking for detaching temporary or member lists/maps. This includes reverse iterators on many Qt containers and keyValueBegin/keyValueEnd on QMap. All those methods have const counterparts that allow you to avoid detaching.

  • Internal Changes With this release, Clang 19 or later is a required dependency. All older versions needed compatibility logic and were not thouroughly tested on CI. In case you are on an older Version of a Debian based distro, consider using https://apt.llvm.org/ and compile Clazy from source ;)


🐞 Bug Fixes

  • install-event-filter: Fixed crash when no child exists at the given depth.
    BUG: 464372

  • fully-qualified-moc-types: Now properly evaluates enum and enum class types.
    BUG: 423780

  • qstring-comparison-to-implicit-char: Fixed and edgecase where assumptions about function definition were fragile.
    BUG: 502458

  • fully-qualified-moc-types: Now evaluates complex signal expressions like std::bitset<int(8)> without crashing. #28

  • qvariant-template-instantiation: Crash fixed for certain template patterns when using pointer types.


Also, thanks to Christoph Grüninger, Johnny Jazeix, Marcel Schneider and Andrey Rodionov for contributing to this release!