KDE Planet - Latest News
- This Week in KDE Apps (2025/02/17 12:18)Fahrenheit, new releases and bugfixesWelcome to a new issue of "This Week in KDE Apps"! Every week we cover as much as possible of what's happening in the world of KDE apps. This time again a bit delayed due to some personal travel. Releases Kaidan 0.11.0 is out. This new version of KDE's XMPP client brings Qt6 support as well as a few new features. Tellico 4.1.1 is out with a few minor fixes. Amarok 3.2.2 is out with some minor bugfixes, and improvements for building Amarok on non-UNIX systems and without X11 support. KDE Itinerary Digital travel assistant Temperature displayed in Itinerary will now use Fahrenheit units when you set your home country to the USA. (Joshua Goins, 25.04.0. Link) Kasts Podcast application Improved the volume button to use an adaptive icon depending on the volume level. (Bart De Vries, 25.04.0. Link) Kate Advanced text editor Added a button to clear the debug output in the debug plugin. (Waqar Ahmed, 25.04.0. Link) Added a button to switch between a normal diff (with only a few lines of context) and a full diff with all the context. (Leo Ruggeri, 25.04.0. Link) KOrganizer KOrganizer is a calendar and scheduling application Fixed showing the details of a recurrent event. (Allen Winter, 25.04.0. Link) Konsole Use the command line interface Fixed some freezing issues when starting Konsole and any applications using Konsole KPart like Kate. (Waqar Ahmed, 24.12.3. Link) Merkuro Calendar Manage your tasks and events with speed and ease Added an option to filter the tasks to only displays the ones due today. (Shubham Shinde, 25.04.0. Link) SystemDGenie Ported the editor to KTextEditor. (Thomas Duckworth. Link) …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 monetarnky 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.
- Amarok 3.2.2 released (2025/02/15 11:20)The Amarok Development Squad is happy to announce the immediate availability of Amarok 3.2.2, the second bugfix release for Amarok 3.2 "Punkadiddle"! 3.2.2 features some minor bugfixes, and improvements for building Amarok on non-UNIX systems and without X11 support. Additionally, a 16-year-old feature request has been fulfilled. Concluding years of Qt5 porting and polishing work, Amarok 3.2.2 is likely to be the last version with Qt5/KF5 support, and it should provide a nice and stable music player experience for users on various systems and distributions. The development in git, on the other hand, will soon switch the default configuration to Qt6/KF6, and focus for the next 3.3 series will be to ensure that everything functions nicely with the new Qt version. Changes since 3.2.1 FEATURES: Try to preserve collection browser order when adding tracks to playlist (BR 180404) CHANGES: Allow building without X11 support Various build fixes for non-UNIX systems BUGFIXES: Fix DAAP collection connections, browsing and playing (BR 498654) Fix first line of lyrics.ovh lyrics missing (BR 493882) Getting Amarok In addition to source code, Amarok is available for installation from many distributions' package repositories, which are likely to get updated to 3.2.2 soon, as well as the flatpak available on flathub. Packager section You can find the tarball package on download.kde.org and it has been signed with Tuomas Nurmi's GPG key.
- This Week in Plasma: Post-Release Polishing (2025/02/15 04:00)Welcome to a new issue of "This Week in Plasma"! Every week we cover as much as possible of what's happening in the world of KDE Plasma and its associated apps like Discover, System Monitor, and more. Plasma 6.3 is out! So far the response has been very good, but of course a few issues were found once it was in the wild. Maybe the worst issue is something that KWin devs have actually tracked down to a bug in the GCC compiler, of all things! It only manifests with the kind of release build configurations that many distros use, and also only with GCC 15 and an ICC profile set up. We've informed distros how to work around it until the root cause is understood and GCC gets patched, or KWin devs are able to guard against it internally. Unfortunately this is a sign that we did not in fact get enough beta testers, since the issue should have been obvious to people in affected environments. Another sign is that most of the regressions are hardware-related. We've got them fixed now, but we need people to be testing the betas with their personal hardware setups! There's simply no way for a small pool of KDE developers to test all of these hardware setups themselves. Anyway, with those caveats aside, it looks like it's been a pretty smooth release! Building on it, there have been a number of positive changes to the Media Player widget, Weather Report Widget, Info Center Energy page, and touchscreen support. Notable new Features Plasma 6.4.0 The Media Player widget now features a playback rate selector when the source media makes this feature available using its MPRIS implementation. (Kai Uwe Broulik, link) Notable UI Improvements Plasma 6.3.1 Improved the presentation of search results for the new DWD weather provider in the Weather Report widget. (Ismael Asensio, link 1 and link 2) The BBC Weather provider has recently improved the quality of their forecast data, so we've changed the weather widget to no longer hide search results from it if there are results from other providers as well. (Ismael Asensio, link) The updates list in Discover is now sorted case-insensitively. (Aleix Pol Gonzalez, link) Welcome Center now remembers its window size (and on X11, position) across launches, like most of our other QML app windows these days. (Tracey Clark, link) Plasma 6.4.0 Improved the graph view on Info Center's Energy page: Now it's in a card, like in System Monitor, and has more normal and visually pleasing margins. (Ismael Asensio, link 1 and link 2) Spectacle has gained support for pinch-zooming in its screenshot viewer window, which can be especially useful when annotating using a touchscreen. (Noah Davis, link) You can now actually scroll through the Widget Explorer with a single-finger touchscreen scroll gesture, because dragging widgets using touch now requires a tap-and-hold. (Niccolò Venerandi, link) Notable Bug Fixes Plasma 6.3.1 Fixed a regression that would cause KWin to crash in the X11 session when hotplugging or switching between HDMI screens. (Fushan Wen, link 1 and link 2). Consider it a reminder for everyone still on X11 to try the Wayland session again, because the X11 session receives almost no testing from developers anymore! Fixed a regression that could cause KWin to sometimes crash hours after hotplugging a Thunderbolt dock. (Xaver Hugl, link) Fixed a regression that would cause KWin to crash when you interact with the Alt+Tab task switcher while using software rendering. (Vlad Zahorodnii, link) Fixed a regression that could cause certain Qt-based apps to crash on launch when using the Breeze style. (Antonio Rojas, link) Fixed a case where Plasma might sometimes crash when clicking on the Networks icon in the System Tray, especially when built using GCC 15. (David Edmundson, link) Fixed a regression that caused the new "Prefer efficiency" ICC color mode setting to not actually improve efficiency on certain hardware. (Xaver Hugl, link) Panels in auto-hide mode no longer inappropriately hide again when you start dragging Task Manager tasks to re-order them. (Tino Lorenz, link) The new bar separator between the date and time in the Digital Clock widget no longer appears inappropriately when the date has been intentionally suppressed. (Christoph Wolk, link) Fixed an issue that broke the layout of the device tiles on Info Center's Energy page when using a larger-than-default font size or loads of devices with batteries. (Ismael Asensio, link) Fixed two keyboard navigation issues in the Power and Battery widget. (Ismael Asensio, link 1 and link 2) Fixed an older issue that prevented the keyboard brightness controls on certain laptops from being visible immediately. (Nicolas Fella, link) Fixed an older issue that caused Info Center's Energy page to vibrate disturbingly at certain window sizes. It was, heh heh heh… very high energy! (Ismael Asensio, link) Qt 6.8.3 Committed a better Qt fix for the issue whereby the first click after dragging Task Manager tasks got ignored. (David Redondo, link) Other bug information of note: 1 very high priority Plasma bug (same as last week). Current list of bugs 27 15-minute Plasma bugs (up from 25 last week). Current list of bugs 86 KDE bugs of all kinds fixed over the past week. Full list of bugs 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: Triage and confirm bug reports, maybe even identify their root cause Contribute designs for wallpapers, icons, and app interfaces Design and maintain websites Translate user interface text items into your own language Promote KDE in your local community …And a ton more things! 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.
- Kdenlive 24.12.2 released (2025/02/14 18:27)The second maintenance release of the 24.12 cycle is out with multiple bug fixes. Notable changes include fixes for crashes, UI resizing issues, effect stack behavior, proxy clip handling, and rendering progress display, along with improvements to Speech-to-text in Flatpak and macOS packages. Don’t try to update monitor overlay if effect is disabled. Commit. Fix crash setting empty name for folder. Commit. Fixes bug #499070. Better fix for expand library clips broken with proxies. Commit. Fixes bug #499171. Try to fix Whisper models folder on Flatpak. Commit. See bug #499012. Don’t try to delete ui file elements on subtitlemanager close. Commit. Fix effect stack widget not properly resizing. Commit. Ensure built-in effects reset button is enabled. Commit. Ensure vidstab external files are correctly listed and archived. Commit. Added 2 decimals for the rotation parameter (addresses bug #498586). Commit. Rescale 48-apps-kdenlive.png to 48×48. Commit. Fix effects layout broken on resize. Commit. Fixes bug #498749. Fix possible crash on exit. Commit. Reassemble proxy profile elements in the correct order after validation. Commit. Fixes bug #485356. Fix the spinbox range for title position and size. Commit. Fixes bug #487950. Fix rendering progress not shown when rendering a zone. Commit. Fix FFmpeg for STT not found on Mac. Commit. Fixes bug #498949. Backport fix for invalid file names in custom effects. Commit. Fixes bug #498710. The post Kdenlive 24.12.2 released appeared first on Kdenlive.
- Web Review, Week 2025-07 (2025/02/14 15:48)Let’s go for my web review for the week 2025-07. Wikipedia Prepares for ‘Increase in Threats’ to US Editors From Musk and His Allies Tags: tech, wikipedia, knowledge, politics, privacy Some powerful bullies want to make the life of editors impossible. Looks like the foundation has the right tools in store to protect those contributors. https://www.404media.co/wikipedia-prepares-for-increase-in-threats-to-us-editors-from-musk-and-his-allies/ The Future Is Too Easy Tags: tech, business, marketing, criticism Alright, this piece is full of vitriol… And I like it. The CES has clearly become a mirror of the absurdities our industry is going through. The vision proposed by a good chunk of the companies is not appealing and lazy. https://defector.com/the-future-is-too-easy?ref=DenseDiscovery-325 Microsoft Study Finds AI Makes Human Cognition “Atrophied and Unprepared” Tags: tech, ai, machine-learning, gpt, ux, cognition, research This is clearly pointing in the direction of UX challenges around LLM uses. For some tasks the user’s critical thinking must be fostered otherwise bad decisions will ensue. https://www.404media.co/microsoft-study-finds-ai-makes-human-cognition-atrophied-and-unprepared-3/ Poisoning for propaganda: rising authoritarianism makes LLMs more dangerous Tags: tech, ai, machine-learning, gpt, politics, criticism Of course it would be less of a problem if explainability was better with such models. It’s not the case though, so it means they can spew very subtle propaganda. This is bound to become even more of a political power tool. https://www.baldurbjarnason.com/2025/poisoning-for-propaganda/ The skill of the future is not ‘AI’, but ‘Focus’ Tags: tech, ai, machine-learning, copilot, programming, focus, learning, criticism This is an interesting way to frame the problem. We can’t rely too much on LLMs for computer science problems without loosing important skills and hindering learning. This is to be kept in mind. https://www.carette.xyz/posts/focus_will_be_the_skill_of_the_future/ How does a Linux machine connect to the internet, really? Tags: tech, linux, networking Due to NetworkManager you forgot how to setup an interface and the networking stack manually? Here is a good summary of the important steps. https://pjg1.site/linux-internet-from-scratch You Should Use /tmp/ More Tags: tech, habits Surprising idea… I guess I’ll mull this one over and maybe try. This is not a small change of habit though. https://atthis.link/blog/2025/58671.html Thread-safe memory copy – Daniel Lemire’s blog Tags: tech, memory, multithreading What do you want? Speed or safety? Ultimately you’ll have to choose one. https://lemire.me/blog/2025/02/07/thread-safe-memory-copy/ Refined: simple refinement types for Rust Tags: tech, type-systems, rust A good example of what can be done when you have a rich type system. https://jordankaye.dev/posts/refined/ How Does Ada’s Memory Safety Compare Against Rust? Tags: tech, system, rust, ada, memory Interesting comparison. Ada doesn’t fare as good as I’d have expected as soon as pointers are in the mix… but there is a twist, you can go a very long way without pointers in Ada. https://ajxs.me/blog/How_Does_Adas_Memory_Safety_Compare_Against_Rust.html About GPU Conditionals Tags: tech, gpu, 3d, shader, optimization This is indeed something easy to get wrong. Also this misconception is very widespread, so it’s good to debunk it. https://iquilezles.org/articles/gpuconditionals/ Reassessing Wayland Tags: tech, linux, wayland This is obviously all good news on the Wayland front. Took time to get there, got lots of justified (and even more unjustified) complaints, but now things are looking bright. https://dudemanguy.github.io/blog/posts/2025-02-03-wayland-xorg-2/wayland-xorg-2.html Operational and Denotational Strategies for Understanding Code Tags: tech, programming, teaching A good reminder that you should always bring several perspectives when teaching something. This a a simple framework which can be used widely in our field. https://noelwelsh.com/posts/operational-denotational-understanding/ Less-Than Estimation Tags: tech, estimates Nice and tiny estimation approach. I can see projects where this could work. https://chrisdone.com/posts/less-than-estimation/ Managing Your Time as a Middle Manager Tags: management, time A couple of interesting ideas. This fluid focus concept definitely require communication around it when applied. https://newsletter.canopy.is/p/managing-your-time-as-a-middle-manager Bye for now!
- The secret weapon for processing millions of messages in order with Elixir (2025/02/14 00:46)Modern distributed systems need to process massive amounts of data efficiently while maintaining strict ordering guarantees. This is especially challenging when scaling horizontally across multiple nodes. How do we ensure messages from specific sources are processed in order while still taking advantage of parallelism and fault tolerance?Elixir, with its robust concurrency model and distributed computing capabilities, is well-suited for solving this problem. In this article, we’ll build a scalable, distributed message pipeline that:Bridges RabbitMQ and Google Cloud PubSub, delivering messages from RabbitMQ queues to a PubSub topic.Ensures message ordering for each RabbitMQ queue.Scales horizontally across multiple nodes.Distribute the message pipelines evenly across the Elixir cluster.Gracefully handles failures and network partitions.Many modern applications require processing large volumes of data while preserving message order from individual sources. Consider, for example, IoT systems where sensor readings must be processed in sequence, or multi-tenant applications where each tenant’s data requires sequential processing.The solution we’ll build addresses these requirements by treating each RabbitMQ queue as an ordered data source.Let’s explore how to design this system using Elixir’s distributed computing libraries: Broadway, Horde, and libcluster.Architecture overviewThe system consists of multiple Elixir nodes forming a distributed cluster. Each node runs one or more Broadway pipelines to process messages from RabbitMQ queues and forward them to Google Cloud PubSub. To maintain message ordering, each queue has exactly one pipeline instance running across the cluster at any time. If a node fails the system must redistribute its pipelines to other nodes automatically, and if a new node joins the cluster then the existing pipelines should be redistributed to ensure a balanced load.Elixir natively supports the ability to cluster multiple nodes together so that processes and distributed components within the cluster can communicate seamlessly. We will employ the libcluster library since it provides several strategies to automatize cluster formation and healing.For the data pipelines, the Broadway library provides a great framework to support multi-stage data processing while handling back-pressure, batching, fault tolerance and other good features.To correctly maintain the distribution of data pipelines across the Elixir nodes, the Horde library comes to the rescue by providing the building blocks we need: a distributed supervisor that we can use to distribute and maintain healthy pipelines on the nodes, and a distributed registry that we use directly to track which pipelines exist and on which nodes they are.Finally, a PipelineManager component will take care of monitoring RabbitMQ for new queues and starting/stopping corresponding pipelines dynamically across the cluster.Technical implementationLet’s initiate a new Elixir app with a supervision tree.mix new message_pipeline --supFirst, we’ll need to add our library dependencies in mix.exs and run mix deps.get:defmodule MessagePipeline.MixProject do use Mix.Project def project do [ app: :message_pipeline, version: "0.1.0", elixir: "~> 1.17", start_permanent: Mix.env() == :prod, deps: deps() ] end def application do [ extra_applications: [:logger], mod: {MessagePipeline.Application, []} ] end defp deps do [ {:libcluster, "~> 3.3"}, {:broadway, "~> 1.0"}, {:broadway_rabbitmq, "~> 0.7"}, {:google_api_pub_sub, "~> 0.34"}, {:goth, "~> 1.4"}, {:tesla, "~> 1.12"}, {:jason, "~> 1.4"}, {:amqp, "~> 4.0"} ] endendRolling our own PubSub clientSince we just need to publish messages to Google Cloud PubSub and the API is straightforward, we don’t need fancy libraries here.Let’s start by adding Goth to the supervision tree to manage Google’s service account credentials.defmodule MessagePipeline.Application do use Application def start(_type, _args) do credentials = "GOOGLE_APPLICATION_CREDENTIALS_PATH" |> System.fetch_env!() |> File.read!() |> Jason.decode!() children = [ {Goth, name: MessagePipeline.Goth, source: {:service_account, credentials}}, # Other children... ] Supervisor.start_link(children, strategy: :one_for_one) endendAnd here’s our HTTP client to publish messages to Google Cloud PubSubdefmodule MessagePipeline.GooglePubsub do @google_pubsub_base_url "https://pubsub.googleapis.com" def publish_messages(messages) when is_list(messages) do project_id = System.fetch_env!("GOOGLE_PUBSUB_PROJECT_ID") topic_name = System.fetch_env!("GOOGLE_PUBSUB_TOPIC") topic = "projects/#{project_id}/topics/#{topic_name}" request = %{ messages: Enum.map(messages, &%{data: Base.encode64(&1)}) } with {:ok, auth_token} <- generate_auth_token(), client = client(auth_token), {:ok, response} <- Tesla.post(client, "/v1/#{topic}:publish", request) do %{body: %{"messageIds" => message_ids}} = response {:ok, message_ids} end end defp client(auth_token) do middleware = [ {Tesla.Middleware.BaseUrl, @google_pubsub_base_url}, Tesla.Middleware.JSON, {Tesla.Middleware.Headers, [{"Authorization", "Bearer " <> auth_token}]} ] Tesla.client(middleware) end defp generate_auth_token do with {:ok, %{token: token}} <- Goth.fetch(MessagePipeline.Goth) do {:ok, token} end endendClustering with libclusterWe’ll use libcluster to establish communication between our Elixir nodes. Here’s an example configuration that uses the Gossip strategy to form a cluster between nodes:defmodule MessagePipeline.Application do use Application def start(_type, _args) do topologies = [ gossip_example: [ strategy: Elixir.Cluster.Strategy.Gossip ] ] children = [ {Cluster.Supervisor, [topologies, [name: MessagePipeline.ClusterSupervisor]]}, # Other children... ] Supervisor.start_link(children, strategy: :one_for_one) endendDistributed process management with HordeWe’ll use Horde to manage our Broadway pipelines across the cluster. Horde ensures that each pipeline runs on exactly one node and handles redistribution when nodes fail.Let’s add Horde’s supervisor and registry to the application’s supervision tree.The UniformQuorumDistribution distribution strategy distributes processes using a hash mechanism among all reachable nodes. In the event of a network partition, it enforces a quorum and will shut down all processes on a node if it is split from the rest of the cluster: the unreachable node is drained and the pipelines can be resumed on the other cluster nodes.defmodule MessagePipeline.Application do use Application def start(_type, _args) do children = [ {Horde.Registry, [name: MessagePipeline.PipelineRegistry, keys: :unique]}, {Horde.DynamicSupervisor, [name: MessagePipeline.PipelineSupervisor, strategy: :one_for_one, distribution_strategy: Horde.UniformQuorumDistribution]} # Other children... ] Supervisor.start_link(children, strategy: :one_for_one) endendBroadway pipeline implementationEach pipeline uses Broadway to consume messages from RabbitMQ and publish them to Google PubSub.A strict, per-queue ordering is guaranteed by setting a concurrency of 1.defmodule MessagePipeline.Pipeline do use Broadway alias Broadway.Message def start_link(opts) do queue_name = Keyword.fetch!(opts, :queue_name) pipeline_name = pipeline_name(queue_name) pipeline_opts = [ name: {:via, Horde.Registry, {MessagePipeline.PipelineRegistry, pipeline_name}}, producer: [ module: { BroadwayRabbitMQ.Producer, queue: queue_name, connection: [ host: System.fetch_env!("RABBITMQ_HOST"), port: String.to_integer(System.fetch_env!("RABBITMQ_PORT")), username: System.fetch_env!("RABBITMQ_USER"), password: System.fetch_env!("RABBITMQ_PASSWORD") ] }, concurrency: 1 ], processors: [ default: [ concurrency: 1 ] ], batchers: [ default: [ batch_size: 100, batch_timeout: 200, concurrency: 1 ] ] ] case Broadway.start_link(__MODULE__, pipeline_opts) do {:ok, pid} -> {:ok, pid} {:error, {:already_started, _pid}} -> :ignore end end def pipeline_name(queue_name) do String.to_atom("pipeline_#{queue_name}") end @impl true def handle_message(_, message, _) do message |> Message.update_data(&process_data/1) end @impl true def handle_batch(_, messages, _, _) do case publish_to_pubsub(messages) do {:ok, _message_ids} -> messages {:error, reason} -> # Mark messages as failed Enum.map(messages, &Message.failed(&1, reason)) end end defp process_data(data) do # Transform message data as needed data end defp publish_to_pubsub(messages) do MessagePipeline.GooglePubsub.publish_messages(messages) endendQueue discovery and pipeline managementFinally, we need a process to monitor RabbitMQ queues and ensure pipelines are running for each one.The Pipeline Manager periodically queries RabbitMQ for existing queues. If a new queue appears, it starts a Broadway pipeline only if one does not already exist in the cluster. If a queue is removed, the corresponding pipeline is shut down.defmodule MessagePipeline.PipelineManager do use GenServer @timeout :timer.minutes(1) def start_link(opts) do GenServer.start_link(__MODULE__, opts, name: __MODULE__) end def init(_opts) do state = %{managed_queues: MapSet.new()} {:ok, state, {:continue, :start}} end def handle_continue(:start, state) do state = manage_queues(state) {:noreply, state, @timeout} end def handle_info(:timeout, state) do state = manage_queues(state) {:noreply, state, @timeout} end def manage_queues(state) do {:ok, new_queues} = discover_queues() current_queues = state.managed_queues queues_to_add = MapSet.difference(new_queues, current_queues) queues_to_remove = MapSet.difference(current_queues, new_queues) Enum.each(queues_to_add, &start_pipeline/1) Enum.each(queues_to_remove, &stop_pipeline/1) %{state | managed_queues: new_queues} end defp discover_queues do {:ok, conn} = AMQP.Connection.open( host: System.fetch_env!("RABBITMQ_HOST"), port: String.to_integer(System.fetch_env!("RABBITMQ_PORT")), username: System.fetch_env!("RABBITMQ_USER"), password: System.fetch_env!("RABBITMQ_PASSWORD") ) {:ok, chan} = AMQP.Channel.open(conn) {:ok, queues} = AMQP.Queue.list(chan) # Filter out system queues queues |> Enum.reject(fn %{name: name} -> String.starts_with?(name, "amq.") or String.starts_with?(name, "rabbit") end) |> Enum.map(& &1.name) |> MapSet.new() end defp start_pipeline(queue_name) do pipeline_name = MessagePipeline.Pipeline.pipeline_name(queue_name) case Horde.Registry.lookup(MessagePipeline.PipelineRegistry, pipeline_name) do [{pid, _}] -> {:error, :already_started} [] -> Horde.DynamicSupervisor.start_child( MessagePipeline.PipelineSupervisor, {MessagePipeline.Pipeline, queue_name: queue_name} ) end end defp stop_pipeline(queue_name) do pipeline_name = MessagePipeline.Pipeline.pipeline_name(queue_name) case Horde.Registry.lookup(MessagePipeline.PipelineRegistry, pipeline_name) do [{pid, _}] -> Horde.DynamicSupervisor.terminate_child(MessagePipeline.PipelineSupervisor, pid) [] -> {:error, :not_found} end endendLet’s not forget to also add the pipeline manager to the application’s supervision tree.defmodule MessagePipeline.Application do use Application def start(_type, _args) do children = [ {MessagePipeline.PipelineManager, []} # Other children... ] Supervisor.start_link(children, strategy: :one_for_one) endendTest the systemWe should now have a working and reliable system. To quickly test it out, we can configure a local RabbitMQ broker, a Google Cloud PubSub topic, and finally a couple of Elixir nodes to verify that distributed pipelines are effectively run to forward messages between RabbitMQ queues and PubSub.Let’s start by running RabbitMQ with the management plugin. RabbitMQ will listen for connections on the 5672 port, while also exposing the management interface at http://localhost:15672. The default credentials are guest/guest.docker run -d --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ rabbitmq:3-managementNext, install and use the gcloud CLI to create a Google Cloud project, a PubSub topic, and a a service account to access PubSub programmatically.# Login to Google Cloudgcloud auth login# Create a new project (or use an existing one)gcloud projects create message-pipeline-testgcloud config set project message-pipeline-test# Enable PubSub APIgcloud services enable pubsub.googleapis.com# Create a topicgcloud pubsub topics create test-topic# Create service account for local testinggcloud iam service-accounts create local-test-sa# Generate and download credentialsgcloud iam service-accounts keys create ./google-credentials.json \ --iam-account local-test-sa@message-pipeline-test.iam.gserviceaccount.com# Grant publish permissionsgcloud pubsub topics add-iam-policy-binding test-topic \ --member="serviceAccount:local-test-sa@message-pipeline-test.iam.gserviceaccount.com" \ --role="roles/pubsub.publisher"It’s now time to start two terminal sessions where we can export the needed environment variables before running two Elixir nodes.# In terminal 1export RABBITMQ_HOST=localhostexport RABBITMQ_PORT=5672export RABBITMQ_USER=guestexport RABBITMQ_PASSWORD=guestexport GOOGLE_PUBSUB_PROJECT_ID=message-pipeline-testexport GOOGLE_PUBSUB_TOPIC=test-topicexport GOOGLE_APPLICATION_CREDENTIALS_PATH=$(pwd)/google-credentials.jsonexport RELEASE_COOKIE=my-secret-cookieiex --sname node1 -S mix# In terminal 2 (same variables)export RABBITMQ_HOST=localhostexport RABBITMQ_PORT=5672export RABBITMQ_USER=guestexport RABBITMQ_PASSWORD=guestexport GOOGLE_PUBSUB_PROJECT_ID=message-pipeline-testexport GOOGLE_PUBSUB_TOPIC=test-topicexport GOOGLE_APPLICATION_CREDENTIALS_PATH=$(pwd)/google-credentials.jsonexport RELEASE_COOKIE=my-secret-cookieiex --sname node2 -S mixTo verify cluster formation, from one of the nodes:# List all nodes in the cluster, should show the other nodeNode.list()# Check Horde supervisor distribution:sys.get_state(MessagePipeline.PipelineSupervisor)Now let’s create some test queues on RabbitMQ and start publishing some messages.# Download rabbitmqadmin if not already availablewget http://localhost:15672/cli/rabbitmqadminchmod +x rabbitmqadmin# Create queues./rabbitmqadmin declare queue name=test-queue-1./rabbitmqadmin declare queue name=test-queue-2# Publish test messages./rabbitmqadmin publish routing_key=test-queue-1 payload="Message 1 for queue 1"./rabbitmqadmin publish routing_key=test-queue-1 payload="Message 2 for queue 1"./rabbitmqadmin publish routing_key=test-queue-2 payload="Message 1 for queue 2"# List queues and their message counts./rabbitmqadmin list queues name messages_ready messages_unacknowledged# Get messages (without consuming them)./rabbitmqadmin get queue=test-queue-1 count=5 ackmode=reject_requeue_trueOne can also use the RabbitMQ management interface at http://localhost:15672, authenticate with the guest/guest default credentials, go to the “Queues” tab, click “Add a new queue”, and create “test-queue-1” and “test-queue-2”.After a minute, the Elixir nodes should automatically start some pipelines corresponding to the RabbitMQ queues.# List all registered pipelinesHorde.Registry.select(MessagePipeline.PipelineRegistry, [{{:"$1", :"$2", :"$3"}, [], [:"$2"]}])# Check specific pipelinepipeline_name = :"pipeline_test-queue-1"Horde.Registry.lookup(MessagePipeline.PipelineRegistry, pipeline_name)Now, if we publish messages on the RabbitMQ queues, we should see them appear on the PubSub topic.We can verify it from Google Cloud Console, or by creating a subscription, publishing some messages on RabbitMQ, and then pulling messages from the PubSub subscription.gcloud pubsub subscriptions create test-sub --topic test-topic# ...Publish messages on RabbitMQ queues...gcloud pubsub subscriptions pull test-sub --auto-ackIf we stop one of the Elixir nodes (Ctrl+C twice in its IEx session) to simulate a failure, the pipelines should be redistributed in the remaining node:# Check updated node listNode.list()# Check pipeline distributionHorde.Registry.select(MessagePipeline.PipelineRegistry, [{{:"$1", :"$2", :"$3"}, [], [:"$2"]}])Rebalancing pipelines on new nodesWith our current implementation, pipelines are automatically redistributed when a node fail but they are not redistributed when a new node joins the cluster.Fortunately, Horde supports precisely this functionality from v0.8+, and we don’t have to manually stop and re-start our pipelines to have them landing on other nodes.All we need to do is enable the option process_distribution: :active on Horde’s supervisor to automatically rebalance processes on node joining / leaving. The option runs each child spec through the choose_node/2 function of the preferred distribution strategy, detects which processes should be running on other nodes considering the new cluster configuration, and specifically restarts those particular processes such that they run on the correct node.defmodule MessagePipeline.Application do use Application def start(_type, _args) do children = [ {Horde.Registry, [name: MessagePipeline.PipelineRegistry, keys: :unique]}, {Horde.DynamicSupervisor, [ name: MessagePipeline.PipelineSupervisor, strategy: :one_for_one, distribution_strategy: Horde.UniformQuorumDistribution, process_redistribution: :active ]} # Other children... ] Supervisor.start_link(children, strategy: :one_for_one) endendConclusionThis architecture provides a robust solution for processing ordered message streams at scale. The combination of Elixir’s distributed capabilities, Broadway’s message processing features, and careful coordination across nodes enables us to build a system that can handle high throughput while maintaining message ordering guarantees.To extend this solution for your specific needs, consider these enhancements:Adopt a libcluster strategy suitable for a production environment, such as Kubernetes.Tune queue discovery latency, configuring the polling interval based on how frequently new queues are created. Better yet, instead of polling RabbitMQ, consider setting up RabbitMQ event notifications to detect queue changes in real-time.Add monitoring, instrumenting Broadway and Horde with Telemetry metrics.Enhance error handling and retry mechanisms.Unit & e2e testing. Consider that the gcloud CLI (gcr.io/google.com/cloudsdktool/google-cloud-cli:emulators) contains a PubSub emulator that may come in handy: e.g. gcloud beta emulators pubsub start — project=test-project — host-port=0.0.0.0:8085Leverage an HorizontalPodAutoscaler for automated scaling on Kubernetes environments based on resource demand.Evaluate the use of Workload Identities if possible. For instance, you can provide your workloads with access to Google Cloud resources by using federated identities instead of a service account key. This approach frees you from the security concerns of manually managing service account credentials.
- KDE Ships Frameworks 6.11.0 (2025/02/14 00:00)Friday, 14 February 2025 KDE today announces the release of KDE Frameworks 6.11.0. KDE Frameworks are 72 addon libraries to Qt which provide a wide variety of commonly needed functionality in mature, peer reviewed and well tested libraries with friendly licensing terms. For an introduction see the KDE Frameworks release announcement. This release is part of a series of planned monthly releases making improvements available to developers in a quick and predictable manner. New in this version Attica Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Baloo [Database] Propagate failure reasons for open, remove unused functions. Commit. [Database] Reduce manual management of m_env during open. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. MetadataMover::updateMetadata: tolerate path ending with /. Commit. Bluez Qt Request : Fix error replies based on bluez. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Breeze Icons Add xml/yaml linting. Commit. Symlink preferences-system-windows-effect-screenshot to applets-screenshooter. Commit. Provide 12x12 version of open-link icon. Commit. CI: Add linux-qt6-next build. Commit. Make the close icons be black X symbols. Commit. Fixes bug #453167 Extra CMake Modules Fix FindEGL compile check when using Emscripten. Commit. Add xml/yaml linting. Commit. ECMAddAndroidApk.cmake: use APK_NAME for APK_OUTPUT_DIR. Commit. Add ECMGenerateQDoc. Commit. CI: Add linux-qt6-next build. Commit. ECMQmLoader.cpp.in: Use qAsConst instead of std::as_const in Qt5 codepath. Commit. Lower Python requirement to 3.9. Commit. ECMQmLoader.cpp.in: Add std::as_const for enhanced for loop. Commit. Framework Integration Add xml/yaml linting. Commit. Make compile without deprecated methods (kf6.10). Commit. CI: Add linux-qt6-next build. Commit. KArchive Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KAuth Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KBookmarks Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KCalendarCore Ci: add Alpine/musl job. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KCMUtils Ensure proper utf-8 encoding. Commit. [kcmmetadatagenerator] Use QCoreApplication to process args. Commit. Fixes bug #499337 Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Fix typo in doc. Commit. Fix documentation url for kcms. Commit. Allow loading platform-specific main qml file. Commit. KCodecs Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KColorScheme Fix build with Qt 6.10. Commit. Add xml/yaml linting. Commit. Color-schemes: make Breeze Dark darker. Commit. Fix writing default color scheme value. Commit. CI: Add linux-qt6-next build. Commit. KCompletion Don't use KCOMPLETION_ENABLE_DEPRECATED_SINCE for virtual function. Commit. Add xml/yaml linting. Commit. Deprecate (set)soundsEnabled. Commit. CI: Add linux-qt6-next build. Commit. KConfig Enforce QtNext tests to pass again. Commit. Move global cache out of function again. Commit. Kwriteconfig: Add a flag to notify. Commit. Make global parse cache local to parseGlobalFiles(). Commit. Add xml/yaml linting. Commit. Make kcfg testfiles valid wrt kcfg.xsd. Commit. CI: Specify Linux/Qt6 since Linux/Qt6Next is failing right now. Commit. Use unique pointer for lock file. Commit. Simplify KConfigIniBackend. Commit. Enable QStandardPaths testMode for more tests. Commit. Add a way to register QML types as uncreatable. Commit. Don't ignore the result of QFile::open. Commit. CI: Add linux-qt6-next build. Commit. Enable QStandardPaths test mode for TestStateConfig. Commit. [kconfig_compiler] Fix code generation for state config without name arg. Commit. Fix moving values between nested groups. Commit. Read defaults from Windows registry. Commit. KConfigWidgets KStyleManager: Honor styleoverride. Commit. Fix build with Qt 6.10. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KContacts Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KCoreAddons Add missing since markers. Commit. Kosrelease: expose to qml. Commit. Kosrelease: typo--. Commit. .git-blame-ignore-revs: ignore 230c98aa7. Commit. Add xml/yaml linting. Commit. Add plural annotations for abbreviated duration strings. Commit. Add MPL 2.0 to list of licenses. Commit. Add distance formatting with locale- and value-appropriate units. Commit. Add abbreviated duration formatting. Commit. Don't ignore the result of QFile::open. Commit. Mark KFormat QML methods as translation bindings. Commit. Removed unnecessary vtable in KFormatPrivate. Commit. Fix QML module version. Commit. Use declarative type registration for QML bindings. Commit. Enable Python bindings on FreeBSD. Commit. CI: Add linux-qt6-next build. Commit. Lower Python requirement to 3.9. Commit. KCrash Replace opengl use with explicit app-driven api. Commit. Don't access nullptrs. Commit. Metadata: don't assume asserts are on. Commit. Metadata: make code more readable. Commit. Add support for arbitrary details metadata. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KDav Add debug output for CalDAV and CardDAV multiget requests. Commit. Also use relative hrefs with for carddav-multiget. Commit. See bug #386985. See bug #310210 Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KDBusAddons Fix build with Qt 6.10. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KDeclarative Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KDE Daemon Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KDE SU Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KDNSSD Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KDocTools Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KFileMetaData [autotests] Make usermetadatawritertest idempotent, cleanup test output. Commit. [autotests] Various cleanups for external writer/extractor plugin tests. Commit. Add xml/yaml linting. Commit. Install dump utility as a debugging aid for users. Commit. [autotests] Enforce QT_NO_CAST_FROM_ASCII usage. Commit. [dump] Enforce QT_NO_CAST_FROM_ASCII usage. Commit. CI: Add linux-qt6-next build. Commit. KGlobalAccel Fix build with Qt 6.10. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KGuiAddons KIconUtils: simplify addOverlay implementation. Commit. Fixes bug #499363 Fix build with Qt 6.10. Commit. Add xml/yaml linting. Commit. KIconUtils: correct the rendering of icons. Commit. Enable Python bindings on FreeBSD. Commit. CI: Add linux-qt6-next build. Commit. KIconUtils: take into account dpi for overlays. Commit. See bug #498211 Lower Python requirement to 3.9. Commit. Remove qwant geo URI handler. Commit. [KColorSchemeWatcher] Fix reading XDG preference. Commit. Fixes bug #497790 KHolidays Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Add new one-off public holidays for the state of Berlin. Commit. KI18n Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KIconThemes KIconLoader: ensure thread safety. Commit. Kiconloader/kiconthemes: allow querying all icons easily. Commit. Kiconloader: DRY code by removing duplication. Commit. Fix build with Qt 6.10. Commit. Add xml/yaml linting. Commit. Prefer a std::vector to a new-allocated array. Commit. CI: Add linux-qt6-next build. Commit. Add Alpine CI. Commit. KIdletime Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KImageformats Jxl: refactor image saving, native CMYK support. Commit. Harmonized RAW mime types. Commit. Imageconverter: possibility to set image quality. Commit. Print more details when writetest fails. Commit. Fix RAW mime type. Commit. Jxl: refactor image loading. Commit. Add xml/yaml linting. Commit. Fix jp2 and hdr plugin json definition. Commit. Read test: added perceptive fuzziness. Commit. Modified PCX mime type according to IANA db. Commit. PSD: Alpha detection improvements. Commit. PSD: improved option support. Commit. More metadata read tests. Commit. Fix use of deprecated methods. Commit. Metadata and image resolution write test. Commit. PSD: added support to EXIF metadata. Commit. JXR: set max XMP size to 4MiB. Commit. CI: Add linux-qt6-next build. Commit. DDS: Fix warning in qfloat16 and test failure on PowerPC. Commit. JXL: Resolution and metadata support via EXIF. Commit. Ani: Read chunk elements one at a time instead all at once. Commit. Fixes bug #498368 Xcf: Return early if seek fails. Commit. Fixes bug #498381 Heif: fix -Wstringop-overread warning. Commit. Jxl: refactor metadata boxes reading. Commit. RAW: Allow preview loading. Commit. Add JPEG 2000 support. Commit. JXL: Fix missing checks for BOXES when parsing animation. Commit. See bug #496350 Try writers with different image sizes. Commit. KIO KUrlRequester: Add Workaround for non KDE file dialogs being bad. Commit. KFileItem: correct isMostLocalUrl documentation. Commit. A way to insert KUrlNavigator pieces in a deterministic place in the focus chain. Commit. Fixes bug #409540. Fixes bug #466209 File open dialog: better undo in the file name field. Commit. Fix symlink path resolution in File Properties. Commit. Fixes bug #476808 Trashimpl: reparse trashrc in fileRemoved. Commit. See bug #422006 Add a Move into new folder Drag'nDrop plugin. Commit. See bug #484555 KFileFilterCombo::setFilters: Clear invalid filters from list before using it. Commit. Add null check for m_placesSelector in KUrlNavigator. Commit. Make "Empty trash" icons red. Commit. Fix build with Qt 6.10. Commit. Kmountpoint: Handle device IDs for bind mounts. Commit. Fixes bug #494129 Kpropertiesdialog: Don't show access time in no(dir)atime filesystems. Commit. KFilePlaces: don't check StorageDrive::isHotpluggable. Commit. Add xml/yaml linting. Commit. Remove unused m_hasAllSupportedFiles member. Commit. Ftp/index.docbook remove obsolete URL. Commit. Deprecate API for connection timeouts. Commit. Adjust timeout error message. Commit. Kfileplacesview.cpp delete not used variable s_capacitybarHeight. Commit. Kfileplacesview: when adding new places item, let it figure out the icon. Commit. Fixes bug #498580 Default to creating new places items globally. Commit. Fixes bug #498579 Dropjob: Check if file is already in trash during dropjob. Commit. Fixes bug #497390 CI: Add linux-qt6-next build. Commit. Trash: prevent an assert when trash cache is missing. Commit. Fixes bug #497268 PreviewJob: improve wording. Commit. Searchprovider: add new search providers. Commit. Fix crash in ProtoQueue. Commit. Kurlnavigatortest: ignore trailing slash. Commit. Repair DropJobTest after QMenu::mousePressEvent change. Commit. [kfilefiltercombo] Fix 'All supported files' for more than 3 filters. Commit. Kirigami TabletModeWatcher: Delay the first call to the portal. Commit. Fix deep nesting in ActionsMenu. Commit. Revert "make sure the node is always at an integer position". Commit. Fixes bug #484888 SwipeListItem: handle not being direct delegate. Commit. ActionTextField: handle null parent. Commit. ToolBarPageHeader: pass focus to first button. Commit. LinkButton: give it a pressed effect. Commit. Fix build with Qt 6.10. Commit. UrlButton: fix display with empty URL. Commit. UrlButton: Fix the broken tooltip. Commit. Add xml/yaml linting. Commit. SelectableLabel: disable shortcuts when invisible or no text selected. Commit. Fixes bug #498867 SwipeListItem: improve keyboard navigation. Commit. Fix some potential warnings in initPage(). Commit. ActionsMenu: Show icons for nested actions. Commit. CI: Remove Qt6 qualifier. Commit. CI: Add linux-qt6-next build. Commit. ScrollablePage: add ensureVisibility method. Commit. GlobalDrawer: move delegate into view when focused. Commit. ListItemDragHandle: Use dragged item's vertical center to map hovered item. Commit. ListItemDragHandle: Add "dragActive" property. Commit. ListItemDragHandle: Allow non-incremental move requests. Commit. ListItemDragHandle: Extend dropped() by last drag indexes. Commit. ListItemDragHandle: Do not flood moveRequested(). Commit. Fix Kirigami lookup on cmake in the template. Commit. Update the flatpak manifest in the template to use Qt/KF 6. Commit. Remove fileystem=home from the flatpak manifest in the template. Commit. ActionToolBar: make overflow button ID as ButtonMenu. Commit. Don't set active when mnemonics are disabled. Commit. FormLayout: Also consider enabled from buddy. Commit. Dialog: include leading and trailing components in footer implicitWidth. Commit. Fixes bug #497795 Add an on-by-default "external link" icon for UrlButton. Commit. KItemModels Add xml/yaml linting. Commit. CI: Remove Qt6 qualifier. Commit. CI: Add linux-qt6-next build. Commit. KItemViews Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KJobWidgets Fix build with Qt 6.10. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KNewStuff Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Searchrequest: change default page to 0. Commit. KNotifications Add xml/yaml linting. Commit. Enable Python bindings on FreeBSD. Commit. CI: Add linux-qt6-next build. Commit. Lower Python requirement to 3.9. Commit. Remove unused string from Android manifest. Commit. KNotifyConfig Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KPackage Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KParts Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KPeople Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Vcard: remove plugin id. Commit. KPlotting Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KPTY Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KQuickCharts Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KRunner Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KService Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KStatusNotifieritem Fix build with Qt 6.10. Commit. Add xml/yaml linting. Commit. Add Python bindings. Commit. CI: Add linux-qt6-next build. Commit. Fix svg icons. Commit. KSVG Improve thread safety for render cache. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KTextEditor Try to improve test stability. Commit. Don't sort already sorted newBlock->m_cursors. Commit. Use one newBlock->m_lines.insert instead of many newBlock->m_lines.push_back. Commit. Adjusted theme config page margins. Commit. Allow disabling 'cycle through bookmarks' behaviour. Commit. Fixes bug #499268 Avoid text hint if already triggered when popup menu is requested. Commit. Fixes bug #499092 Fix KateCompletionTree width. Commit. Fixes bug #498244 Add xml/yaml linting. Commit. Autotests/src/swapfiletest.cpp - include . Commit. Ensure we do not kill symlinks. Commit. Fixes bug #498589 Stop hover timer when cursor changes. Commit. CI: Add linux-qt6-next build. Commit. Store Search/Replace history in state config. Commit. KTextTemplate Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KTextWidgets Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. KUnitConversion Add xml/yaml linting. Commit. Enable Python bindings on FreeBSD. Commit. CI: Add linux-qt6-next build. Commit. Lower Python requirement to 3.9. Commit. KUserFeedback Add xml/yaml linting. Commit. Use ecm_set_disabled_deprecation_versions. Next step fixing building without deprecated methods. Commit. CI: Add linux-qt6-next build. Commit. CI: Extend dependency requires to Linux/Qt6Next. Commit. Set desktop file name. Commit. KWallet Add xml/yaml linting. Commit. Don't explicitly delete copy ctor. Commit. Drop unused functions. Commit. CI: Add linux-qt6-next build. Commit. KWidgetsAddons Kpageview: disable invisible search field. Commit. Add xml/yaml linting. Commit. KBusyIndicatorWidget: Add functions setRunning() and isRunning() to control the spinning animation, update API documentation, and test file, and define Q_PROPERTY. Commit. Enable Python bindings on FreeBSD. Commit. CI: Add linux-qt6-next build. Commit. Lower Python requirement to 3.9. Commit. KWindowSystem KXErrorHandler: ensure thread safety. Commit. Fix build with Qt 6.10. Commit. CI: Add linux-qt6-next build. Commit. CI: Extend dependency requires to Linux/Qt6Next. Commit. KXMLGUI Instantiate accelerator checking only on KMainWindow creation. Commit. Fixes bug #499583 Create the conflict detector only if some main window got created. Commit. Fixes bug #467130 Fix comment about dependency. Commit. Don't trigger sync of config always at same time to avoid clashes if x instances are running. Commit. Fixes bug #456208 Add xml/yaml linting. Commit. Fix writing default ToolBarsMovable value. Commit. Enable Python bindings on FreeBSD. Commit. CI: Add linux-qt6-next build. Commit. KAbstractAboutDialog: Do not insert a widget or layout twice. Commit. Lower Python requirement to 3.9. Commit. Modem Manager Qt Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Network Manager Qt Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Prison Don't register internal names to QML. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Purpose Youtube: Use a better fitting icon. Commit. Drop the Twitter plugin. Commit. Change both KDE Connect plugins to use symbolic versions of their icons. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. QQC2 Desktop Style Add xml/yaml linting. Commit. MenuItem: Don't check hovered. Commit. CI: Add linux-qt6-next build. Commit. Solid Add missing since markers. Commit. [udisks2]: Make StorageAccess::check() method asynchronous. Commit. Fix crash when destructing FstabWatcher on Linux. Commit. Add xml/yaml linting. Commit. Git-blame-ignore-revs: ignore a formatting and a refactor commits. Commit. CI: Add linux-qt6-next build. Commit. Sonnet Use QStandardPaths::AppLocalDataLocation in addition to QStandardPaths::GenericDataLocation for search of Hunspell dictionaries. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Remove unused variable. Commit. Remove leftovers of a qmake build system. Commit. Build static plugins in static builds. Commit. Syndication Try to ignore all textual offsets. Commit. Add xml/yaml linting. Commit. CI: Add linux-qt6-next build. Commit. Syntax Highlighting Ignore atm data/generators/cmake.yaml. Commit. Fix yaml files for linter. Commit. Skip test files that are invalid by design. Commit. Add xml/yaml linting. Commit. Cmake: Remove error highlighting. Commit. Add syntax highlighting file for the ARMv7-A assembly language. Commit. CI: Add linux-qt6-next build. Commit. Threadweaver Add xml/yaml linting. Commit. Add missing includes. Commit. CI: Add linux-qt6-next build. Commit.
- Kaidan 0.11.0: Qt 6 (2025/02/13 23:00)Kaidan supports Qt 6 now! In addition, this release improves the user interface and fixes some bugs. Have a look at the changelog for more details. Changelog Features: Highlight public XMPP provider titles while card is expanded (melvo) Round corners of cards and buttons (melvo) Add fading in/out hover effect to map previews (melvo) Collapse contact profiles by default if they have more than 3 entries (melvo) Show colored check mark for delivered messages instead of none to avoid message bubble resizing (melvo) Bugfixes: Fix opening public MUC-based group chats via another XMPP client (melvo) Fix playing voice messages and changing playing position (melvo) Fix updating message reactions that could not be sent instead of adding them a second time (melvo) Fix updating group chat users in user interface (melvo) Fix displaying message reaction details (melvo) Update filtering contacts by labels even if label list is not open anymore (melvo) Fix scrolling media overview (melvo) Fix updating draft messages (melvo) Notes: Kaidan requires Qt 6.6 now (mlaurent, melvo, fazevedo, plata) Download Source code (.tar.xz) (sig signed with 04EFAD0F7A4D9724) Linux (Flatpak on Flathub) Or install Kaidan for your distribution:
- Qt Creator 16 Beta2 released (2025/02/13 11:17)We are happy to announce the release of Qt Creator 16 Beta2.
- The 46th International TeX Users Group Conference, 2025 (2025/02/13 09:12)The 46th annual meeting of the International TeX Users Group (TUG 2025) will take place in Thiruvananthapuram (aka Trivandrum), Kerala, India, on 18–20 July, 2025. The Indian TeX Users Group and TeXFolio (STMDocs) with support from International TeX Users Group and sponsors are organizing the event this time as it comes back to India after a long hiatus of 14 years (the last two instances hosted were in 2011 and 2002). Details about the registration, venue, travel, accommodation, programme, deadlines and important dates etc. are available at the conference page https://tug.org/tug2025/. Call for participation TUG conferences always enjoyed excellent presentations and talks about TeX, Typefaces/Fonts, Typesetting, Typography and anything related. Please submit interesting papers — see call for papers and speaker advice. Note that a visa is required for participants from most countries and it is a non-trivial undertaking. Please register and contact the program committee for a visa invitation letter as soon as possible. The drawings for TUG 2025 are made by notable cartoonist E.P. Unny and the flyer is typeset by CVR.
- PySide6, Qt for Python (2025/02/13 09:00)In this article, we’re going to have a look at Qt for Python, how it integrates with Qt Creator, and why you might want to consider using it, too. Continue reading PySide6, Qt for Python at basysKom GmbH.
- Krita Monthly Update - Edition 23 (2025/02/12 00:00)Welcome to the @Krita-promo team's January 2025 development and community update. Development Report Krita 5.2.9 Released A new bugfix release is out! Check out the Krita 5.2.9 release post and keep up-to-date with the latest version. Qt6 Port Progress Krita can now be compiled (MR!2306) and run (Mastodon post) with Qt6 on Linux, a major milestone on the long road of porting from the outdated Qt5 framework. However, it's still a long way to go to get things working correctly, and it will be some time before any pre-alpha builds are available for the far-off Krita 6.0. Community Report January 2025 Monthly Art Challenge Results For the "Magical Adventure" theme, 14 members submitted 20 original artworks. And the winner is… Magical Adventure by @Mythmaker The February Art Challenge is Open Now For the February Art Challenge, @Mythmaker has chosen "Fabulous Flora" as the theme, with the optional challenge of using natural texture. See the full brief for more details, and bring some color into bloom. Featured Artwork Best of Krita-Artists - December 2024/January 2025 Nine images were submitted to the Best of Krita-Artists Nominations thread, which was open from December 14th to January 11th. When the poll closed on January 14th, these five wonderful works made their way onto the Krita-Artists featured artwork banner: Coven Camille | League Of Legends Fan Art by @Dehaf Still Evening by @MangooSalade Themis by @DavB Flying Pig Squadron by @Yaroslavus_Artem Oniwakamaru and the giant carp by @GioArtworks Best of Krita-Artists - January/February 2025 Voting is open until February 15th! Ways to Help Krita Krita is Free and Open Source Software developed by an international team of sponsored developers and volunteer contributors. Visit Krita's funding page to see how user donations keep development going, and explore a one-time or monthly contribution. Or check out more ways to Get Involved, from testing, coding, translating, and documentation writing, to just sharing your artwork made with Krita. The Krita-promo team has put out a call for volunteers, come join us and help keep these monthly updates going. Notable Changes Notable changes in Krita's development builds from Jan. 16 - Feb. 12, 2025. Unstable branch (5.3.0-prealpha): Bug fixes: Blending Modes: Rewrite blending modes to properly support float and HDR colorspaces. (bug report) (Change, by Dmitry Kazakov) Brush Engines: Fix Filter Brush engine to work with per- and cross-channel filters. (Change, by Dmitry Kazakov) Filters: Screentone: Change default screentone interpolation type to Linear. (Change, by Emmet O'Neill) Scripting: Fix Node.paint script functions to use the given node instead of active node. (Change, by Freya Lupen) Features: Text: Load font families as resources and display a preview in the font chooser. (Change, by Wolthera van Hövell) Filters: Random Noise: Add grayscale noise option and improve performance. (Change, by Maciej Jesionowski) Blending Modes: Add a new HSY blending mode, "Tint", which colorizes and slightly lightens. It's suggested to be used with the Fast Color Overlay filter. (Change 1, Change 2 by Maciej Jesionowski) Nightly Builds Pre-release versions of Krita are built every day for testing new changes. Get the latest bugfixes in Stable "Krita Plus" (5.2.10-prealpha): Linux - Windows - macOS (unsigned) - Android arm64-v8a - Android arm32-v7a - Android x86_64 Or test out the latest Experimental features in "Krita Next" (5.3.0-prealpha). Feedback and bug reports are appreciated!: Linux - Windows - macOS (unsigned) - Android arm64-v8a - Android arm32-v7a - Android x86_64
- About the Plasma release schedule (2025/02/11 04:59)This will be a boring one, sorry. Basically a “JFYI” for people interested in Plasma’s release administration. A while back, there was a discussion about moving Plasma to a twice-yearly release model, to better align with discrete release distros that also have two yearly releases — mostly Fedora KDE and Kubuntu. We discussed this at last year’s Akademy and decided not to do it yet, based on the reason that a faster release schedule would help get important Wayland improvements to users more quickly, given that we’re trying to polish up our Wayland session at high speed. We agreed that once the Wayland Known Significant Issues wiki page is empty, we can re-evaluate. Until that re-evaluation happens, we decided to instead lengthen our beta release periods from four weeks to six weeks, with new beta releases every two. Plasma 6.3 will be released very soon, yay! For this release, we remembered to push out the extra new beta releases, but forgot about adding on an extra two weeks to its duration. Oops. Interestingly, we haven’t gotten many bug reports from users of the Plasma 6.3 beta, which is historically unusual. I’m not totally sure what to make of this. The optimistic assessment is that the release was already great even by the time we shipped the beta! The pessimistic one is that few people showed up to QA it, so lots of bugs got missed (I’m less sure it’s this, but anything’s possible). Either way, it seems like an extra two weeks of beta time wouldn’t have made much difference, so we’re not considering a great loss. As a result, we’ve decided to try this same approach for 6.4: a four-week beta period, with new releases every two weeks. We’ll see how it goes! If it’s fine, we can keep it, and if it’s not, we can return to the original plan of six-week beta periods. Until then, enjoy Plasma 6.3!
- Tellico 4.1.1 Released (2025/02/11 01:24)Tellico 4.1.1 is available, with a few fixes. Improvements Updated Filmaffinity and ComicVine data sources. Added configurable image size to Discogs and Moviemeter data sources. Fixed ISBN searching with Colnect.
- Plasma 6.3 (2025/02/11 00:00)One year on, with the teething problems a major new release inevitably brings firmly behind us, Plasma’s developers have worked on fine-tuning, squashing bugs and adding features to Plasma 6 — turning it into the best desktop environment for everyone! Read on to discover all the exciting new changes landing in this release… A script element has been removed to ensure Planet works properly. Please find it in the original post. A script element has been removed to ensure Planet works properly. Please find it in the original post. Highlights Clone Panels Duplicate your setup with one click KWin Zoom Pinpoint individual pixels Drawing Tablets Fine tune your art hardware Digital Art We want to make Plasma the best platform for creativity, and Plasma 6.3 takes the next step in that direction by providing features that help artists optimize and customize their graphics tablets to their liking. The System Settings’ Drawing Tablet page has been overhauled and split into multiple tabs to improve how things are organized, and new configuration options have been added to each section: You can map an area of a drawing tablet’s surface to the entire screen area We have refined the tablet calibration feature so that it produces more accurate calibrations The stylus testing feature shows information about tilt and pressure You can customize the pressure curve and range of a stylus to chop off the high and/or low parts You can also re-map or swap the functions of the stylus’s buttons After finishing configuring your tablet, you’ll be able to see what changed thanks to System Settings’ “Highlight changed settings” feature, which works for most of the Drawing Tablet page. Graphics The most important news regarding graphics is a huge overhaul of how fractional scaling works. In Plasma 6.3, KWin makes a stronger effort to snap things to the screen’s pixel grid, greatly reducing blurriness and visual gaps everywhere and producing sharper and crisper images. This works at very high zoom levels as well, as KWin’s Zoom effect switches to a sharp pixel-perfect representation and overlays a grid on top of the screen. You can actually see how individual pixels look relative to other ones. Very useful for artists and designers. In the color department, screen colors are more accurate when using the Night Light feature both with and without ICC profiles, and KWin offers the option to choose screen color accuracy — although this can sometimes affect system performance. A smaller but still nice detail is that widgets placed on the desktop are very slightly translucent, just like the popups of widgets placed on the panel: Hardware Monitoring System Monitor monitors CPU usage more accurately, and consumes vastly fewer CPU resources while doing it! If you’re using Plasma 6.3 on FreeBSD, you’re in luck: the System Monitor app and widgets can now collect GPU statistics on your system too. Info Center also provides more information, exposing data about all of your GPUs as well as your batteries’ cycle counts. Monitoring printers is equally easy, as each printer’s print queue is shown directly in the widget. The widget also shows a little spinner on any printers that are currently printing, so you can see at a glance which ones are in use. Plasma already includes a variety of background services that let you know when something has gone wrong and what to do about it. New in Plasma 6.3 is a service that detects when the kernel terminated an app because the system ran out of memory. The service shows a notification explaining what happened, and suggests ways of avoiding this issue in the future. Tools Moving on to specific tools, Plasma 6.3’s KRunner (the built-in search tool that also does conversions, calculations, definitions, graph plotting, and much more), Discover (Plasma’s software management/app store application), and the Weather Report widget all come with new features and improvements: KRunner KRunner and KRunner-powered searches now let you jump between categories using the Page Up/Page Down keys and Ctrl+Up/Ctrl+Down key combinations. Discover A security enhancement landing in Discover highlights sandboxed apps whose permissions will change after being updated. This allows you to check on such changes in case you suspect any shady behavior. In a similar vein, you can now see whether apps are packaged directly by their developer, or verified by a trusted third party. Weather Widget If you’re a fan of the forecasts provided by Deutscher Wetterdienst, you’re in luck: Plasma 6.3’s weather widget allows using this source for weather data. Usability Plasma 6.3 makes things easy without ditching flexibility. If you prefer using a mouse with your laptop, you can now configure its built-in touchpad to switch off automatically, so it doesn’t interfere with your typing. Also, if you set up your machine as a network hotspot, Plasma generates a random password for the network so you don’t have to think one up. Finding help is easier in Plasma 6.3. A “Help” category has been added to the launcher (the menu that tends to live on the left hand side of your panel), and we have removed the Settings category entirely. Its contents have been merged into the System category, reducing the number of categories that don’t offer meaningful grouping. Speaking of menus, the default Kickoff launcher menu now switches categories only when you click on them, matching the behavior of all other sidebar lists. However, if you preferred the old switch-on-hover behavior, it’s still available too. We have made things clearer by adding a Show Target item to the desktop context menu for symbolic links, the digital Clock widget displays all events on days with more than five of them (giving you a complete view of upcoming commitments), and when you want to reboot into the bootloader menu the next time your machine reboots, the logout screen now indicates this. To avoid overwhelming you with too much information, when notifications arrive while Plasma’s “Do Not Disturb” mode is engaged, exiting that mode shows the number of missed notifications, rather than sending them all in one giant torrent. Additionally, a subtle but important change: when you drag a file out of a window that’s partially below other windows, it no longer jumps to the top, potentially obscuring what you wanted to drag it into! Customization Finally, what would Plasma be without customization? To begin with, panels can be cloned! You can also use scripting to change your panels’ opacity levels and what screen they appear on. In Plasma 6.2, we introduced symbolic icons in Kickoff’s category sidebar. Some people didn’t like that, so in 6.3 you can undo the change yourself: we modified the implementation to pull icons from the standard data source, allowing you to set them to whatever you want using the Menu Editor app. Speaking of the Menu Editor app, editing desktop files for apps from the “Edit Application…” menu item in Kickoff (and other launcher menus) opens the app in the editor, rather than showing you file properties. This lets you easily edit the entire applications list! If you have ever lost a widget in the process of customizing your system, you’ll love this new feature: in Plasma 6.3, the Widget Explorer gives you the opportunity to remove every instance of a widget, including those that got lost or are only present on unplugged screens. …and there’s much more. To see the full list of changes, check out the complete changelog for Plasma 6.3.
- KDE Gear 25.04 release schedule (2025/02/10 23:09)This is the release schedule the release team agreed onhttps://community.kde.org/Schedules/KDE_Gear_25.04_ScheduleDependency freeze is in around 3 weeks (March 6) and feature freeze one after that. Get your stuff ready!
- Moving KDE's styling into the future (2025/02/10 11:32)Moving KDE's styling into the future Image Four applications, four different ways of styling. Last year during Akademy I gave a talk called Union: The Future of Styling in KDE?!. In this talk I presented a problem: We currently have four ways of styling our applications. Not only that, but some of these approaches are quite hard to work with, especially for designers who lack programming skills. This all leads to it being incredibly hard to make changes to our application styling currently, which is not only a problem for something like the Plasma Next Initiative, but even smaller changes take a lot of effort. This problem is not new; we already identified it several years ago. Unfortunately, it also is not easy to solve. Some of the reasons it got to this state are simply inertia. Some things like Plasma's SVG styling were developed as a way to improve styling in an era where a lot of the technologies we currently use did not exist yet. The solutions developed in those days have now existed for a pretty long time so we cannot suddenly drop them. Other reasons are more technical in nature, such as completely different rendering stacks. Introducing Union Those different rendering stacks are actually one of the core issues that makes this hard to solve. It means that we cannot simply use the same rendering code for everything, but have to come up with a tricky compatibility layer to make that work. This is what we currently do, and while it works, it means we need to maintain said compatibility layer. It also means we are not utilizing the rendering stack to its full potential. However, there is another option, which is to take a step back and realise that we actually may not even want to share the rendering code, given that they are quite different. Instead, we need a description of what the element should look like, and then we can have specific rendering code that implements how to render that in the best way for a certain technology stack. This idea is at the core of a project I called Union, which is a styling system intended to unify all our separate approaches into a single unified styling engine that can support all the different technologies we use for styling our applications. Image The three separate parts of Union Union consists of three parts: an input layer, an intermediate layer and an output layer. The input layer consists of plugins that can read and interpret some input file format containing a style description and turn it into a more abstract desciption of what to render. How to do that is defined by the middle intermediate layer, which is a library containing the description of the data model and a method of defining which elements to apply things to. Finally, the output layer consists of plugins that use the data from the intermediate layer and turn it into actual rendering commands, as needed for a specific rendering stack. Implementing Things This sounds nice on paper, but implementing it is easier said than done. For starters, everything depends on the intermediate layer being both flexible enough to handle varying use cases but at the same time rigid enough that it becomes hard to - intentionally or unintentionally - create dependencies between the input and output layers. Apart from that, replacing the entire styling stack is simply going to be a lot of work. Image Plasma's SVG styling uses specially-marked SVG items for styling. To allow us to focus more on the core we needed to break things down into more manageable parts. We chose to focus on the intermediate layer first, by using Plasma's SVG themes as an input format and a QtQuick Style as output. This means we are working with an input format that we already know how to deal with. It also means we have a clear picture of what the output should look like, as it should ultimately look just like how Plasma looks. At this point, a lot of this work has now been done. While Union does not yet implement a full QtQuick style, it implements most of the basic controls to allow something such as Discover to run without looking completely alien. Focusing on the intermediate layer proved very useful, we encountered and managed to solve several pretty tricky technical issues that would have been even trickier if we did not know what things should look like. Image Plasma Discover running using Union. Union Needs You! All that said, there is still a lot to be done. For starters, to be an actual unified styling system for KDE we need a QtWidgets implementation. Some work on that has started, but it is going to be a lot harder than the QtQuick implementation. We also need a different input format. While Plasma's SVG styling works, it is not ideal for developing new styles with. I would personally like to investigate using CSS as input format as it has most of what we need while also being familiar to a lot of people. Unfortunately, finding a good CSS parser library turns out to be quite hard. However, at this stage we are at a point where we have multiple tasks that can be done in parallel. This means it is now at a point where it would be great if we had more people developing code, as well as some initial testing and feedback on the systen. If you are interested in helping out, the code can be found at invent.kde.org/plasma/union. There is also a Matrix channel for more realtime disucssions. Discuss this article on KDE Discuss. ahiemstra Mon, 02/10/2025 - 12:32
- This Week in KDE Apps (2025/02/10 11:25)Kasts polishing, progress on Krita Qt6 port and Kdenlive fundraising reportWelcome to a new issue of "This Week in KDE Apps"! Every week we cover as much as possible of what's happening in the world of KDE apps. This issue contains change from the last two weeks. Much happened the past two weeks, we had a successful KDE presence at FOSDEM, we now have a location and date for this year's edition of Linux App Summit (April 25-26, 2025 in Tirana, Albania) and also continued to improve our apps. Let's dive in! Releases KDE Gear 24.12.2 is out with some bugfixes. Glaxnimate 0.6.0 beta is out. Glaxnimate is a 2d animation software and 0.6.0 is the first version of Glaxnimate as part of KDE. Checkout Glaxnimate's website. KStars 3.7.5 is out with mostly bugfixes and performance improvements. GCompris 25.0 is out. This is a big release containing 5 new activities. Krita 5.2.9 is out. This is a bug fix release, containing all bugfixes of our bug hunt efforts back in November. Major bug-fixes include fixes to clone-layers, fixes to opacity handling, in particular for file formats like Exr, a number of crash fixes and much more! Akonadi Background service for KDE PIM apps We fixed an issue where loading tags was broken and would result in a constant 100% CPU usage. (Carl Schwan, 24.12.3. Link) Elisa Play local music and listen to online radio We now correctly re-open Elisa when it was minimized to the system tray. (Pedro Nishiyama, 24.12.2. Link) Dolphin Manage your files We made it possible to rename tabs in Dolphin. This action is available in each tab's context menu. This is useful for very long tab names or when it is difficult to identify a tab by a folder's name alone. (ambar chakravartty, 25.04.0. Link) We also improved the keyboard based selection of items. Typing a letter on the keyboard usually selects the item in the view which starts with that letter. Diacritics are now ignored here, so you will for example be able to press the "U" key to select a file starting with an "Ü". (Thomas Moerschell, 24.12.3. Link) We changed the three view buttons to a single menu button. (Akseli Lahtinen, 25.04.0. Link) We made the "Empty Trash" icon red in conformance to our HIG as it is a destructive operation. (Nate Graham, 25.04.0. Link) We improved getting the information from supported version control systems (e.g. Git). It is now faster and happens earlier. (Méven Car, 25.04.0. Link) Falkon Web Browser We added input methods hints to input fields. This is mostly helpful when using different input methods than a traditional keyboard (e.g. a virtual keyboard). (Juraj Oravec. Link) KDE Itinerary Digital travel assistant We continued to improve the coverage of Itinerary in Poland. This week we added support for the train operator Polregio, fixed and refactored the extractor for Koleo and rewrote the extractor for PKP-app to support the ticket layouts. (Grzegorz Mu, 24.12.3. Link 1, link 2, and link 3) We also added support for CitizenM hotel bookings. (Joshua Goins, 24.12.3. Link) We also started working on an online version of the ticket extractor. A preview is available on Carl's website. Volker also published a recap of the past two months in Itinerary. This contains also some orthogonal topics like the free software routing service Transitous. Kasts Podcast application We fixed the vertical alignment of the queue header. (Joshua Goin, 25.04.0. Link) We are now using Kirigami.UrlButton for links and Kirigami.SelectableLabel for the text description in the podcast details page to improve visual and behavior consistency with other Kirigami applications. (Joshua Goins, 25.04.0. Link) We also improved the look of the search bar in the discovery page. It's now properly separated from the rest of the content. (Joshua Goins, 25.04.0. Link) We added the ability to force the app to mobile/desktop mode. (Bart De Vries, 25.04.0. Link) We fixed the sort order of the podcasts episodes. (Bart De Vries, 24.12.3. Link) Finally we made various improvements to our usage of QML in Kasts to use newer QML constructs. This should improve slighly the performance while reducing the technical debt. (Tobias Fella, 25.04.0. Link 1, link 2, link 3, link 4, link 5, and link 6) Kate Advanced text editor We fixed some issues with the list of commits displayed in Kate. The highlight color is now correct and the margins consistent. (Leo Ruggeri, 25.04.0. Link) We improved the diff widget of Kate. The toolbar icon sizes are now the same as other toolbars in Kate. (Leo Ruggeri, 25.04.0. Link) Kdenlive Video editor The Kdenlive team published a report about the result of their last fundraising. It contains a huge amount of great improvements, so go read it! Added checkerboard option in clip monitor background (Julius Künzel, 25.04.0, Link) Konqueror KDE File Manager & Web Browser We fixed the handling of the cookie policy when no policy has been explicitly set. (Stefano Crocco, 24.12.3. Link) Krita Digital Painting, Creative Freedom The Krita team continued porting Krita to Qt6/KF6. The application now compiles and run with Qt6, but there are still some uni tests not working. Link to Mastodon thread Ramon published a video about "Memileo Brushes" on YouTube. KRDC Connect with RDP or VNC to another computer We implemented the dynamic resolution mode from the remote desktop protocol (RDP). This means we now resize the remote desktop to fit the current KRDC window. This works for Windows >= 8.1. (Fabio Bas, 25.04.0. Link) We added support for the domain field in the authentication process. (Fabio Fas, 25.04.0. Link) We adapted the code to work with FreeRDP 3.11. (Fabio Bas, 25.04.0. Link) Marknote Write down your thoughts We fixed the list of "Sort Notes List" option not being set by default. (Joshua Goins. Link) We now properly capitalize the "undo" and "redo" actions. (Joshua Goins. Link) We removed internal copies of some Kirigami Addons components in Marknote. (Joshua Goins. Link) Okular View and annotate documents We added a way to filter the list of certificate to only show certificates for "Qualified Signatures" in the certificate selection. (Sune Vuorela, 25.04.0. Link) PlasmaTube Watch YouTube videos We improved the placeholder messages for empty views. (Joshua Goins, 25.04.0. Link 1 and link 2) We fixed displaying thumbnails and avatars when using the Peertube backend. (Joshua Goins, 24.12.3. Link, link 2, and link 3) Barcode Scanner Scan and create QR-Codes Qrca can now scan a QR code directly from an image instead of just from the camera. (Onuralp Sezer, 25.04.0. Link) Tokodon Browse the Fediverse We are now using more fitting icons for the "Embed" and "Open in Browser" actions in Tokodon's context menu. We also removed the duplicated "Copy to Clipboard" action from that context menu. (Joshua Goins, 24.12.3. Link and link 2) Following the improvements from two weeks ago, we did even even more accessibility/screen reader improvements to Tokodon. (Joshua Goins, 24.12.3. Link) …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 monetarnky 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.
- New version of the Fast Sketch Cleanup Plugin (2025/02/10 00:00)If you don’t know what Fast Sketch Cleanup plugin is, here’s a blog post describing it in detail: https://krita.org/en/posts/2024/fast_sketch_background/. In short, it’s a neural network-based filter similar to Edge Detection or Engrave that is supposed to clean up a sketch and create lines that can be used as a base for a lineart or help with coloring. Download Windows Plugin: FastSketchPlugin1.1.0.zip Portable zip file: krita-x64-5.3.0-prealpha-68346790.zip Linux 64 bits Linux: krita-5.3.0-prealpha-68346790dc-x86_64.AppImage New GUI The old GUI was relatively difficult to use and quite limited. For example, there was no way to use a custom model outside of the main directory, you’d have to manually put the model files into the main directory of the plugin. There was also no pre- or post-processing, and the resolution of the input image was fixed, which didn’t allow for fine-tuning the result. The new GUI looks like this: Model In this section you can select the model in the File combobox, or you can switch to another folder using either the button with the folder icon (for a custom folder) or the “Reset to default” button (which resets the path to the default path for the plugin). The combobox with models gets updated to show the models from the currently selected folder. “Note about the model” presents some notes or hints about usage that were saved into the model information file. Device to use Here you can choose whether to use CPU, GPU or NPU. NPU is a new type of device that is only available on some computers, on Windows you should have all the drivers already installed, but if you’re on Linux, you would need to install them manually. CPU is typically the slowest, so if any other is available, use the other one. Unavailable devices should be greyed out. Preview images Those are small cutouts of the image on different stages of the processing. First image shows the original sample; the second one shows the result of the pre-processing; third shows the result of the inference (processing through the model) applied to the pre-processed image; and the last one shows the final result. Preview size determines how big the preview is. The sample is cut out of the center of the image, with the width and height being equal to the Preview Size * Model Input Size (usually 256) / Scale. That means that a Preview Size of 8 would update roughly 16x slower than Preview Size of 1, no matter the Scale, and assuming the same model. That might make the dialog less responsive, so be careful with higher values. Sometimes it is useful though to see a bigger preview though. If you click on one of the images, it will bring out a dialog showing the same image in a bigger size, and you can click on the buttons or use arrows to navigate to the other images. You can resize that dialog to see even more detail if needed. Pre-processing Defines the pre-processing. It’s performed in the order of the widgets in the dialog. Levels widget: it’s a quick way to increase contrast in the input image. Scale: every model has a specific size of its context window, which means it’s sensitive to resolution. Using Scale you can quickly decrease or increase the resolution of the input image, changing the result in a very significant way. Be careful, it’s a scale for one dimension, meaning that the processing time will increase or decrease exponentially. Post-processing Scale: it’s just a widget showing the reversal of the scaling in pre-processing. You can’t change it. It ensures that the result has the same size as the input image. Levels widget: it works just like in the pre-processing. Sharpen filter: it sharpens the result, with the strength equal to the number from the slider. Zero means input = output, every higher value sharpens the result. One means the exact result you’d get from Krita’s normal Sharpen filter. Advanced options Invert: usually you don’t need to change this option, because whether it needs to be checked or not is embedded in the model information file (the same one that contains the note). Most models do require this checkbox checked. Run Press the button to start processing. It takes the projection (think: “New Layer From Visible”) of the canvas, puts it through all the processing, and then creates a new layer with the result. The Run button changes into a Progress Bar to show you progress. When the image is processed, the dialog closes automatically. Note that it’s not possible to cancel the processing, unfortunately. Best workflow The ultimate best workflow I found to get the best result is to first use SketchyModel.xml with low scale (either 1.0 or often even below that), then either decrease the opacity of the result or put a white semi-opaque layer on top, and then use InkModel.xml. The first model removes unnecessary lines and smoothes the lines out, and the second model creates nice, crisp lines. The only problem with using them one after another is that SketchyModel produces pretty dark lines, while InkModel is sensitive to values and requires the input to be light grey, otherwise it doesn’t work properly, hence the additional white layer. You can also use InkModel.xml directly, if the sketch is clean enough already. Example 1. The following examples are derivatives of David Revoy’s sketch “Pepper Sketch”, with the only editing being the FSC plugin or Engrave G’MIC filter (used for comparison). Workflow: Use SketchyModel, Levels: (0.3, 1.0) Add a white layer, opacity = 40% Use the mentioned model or G’MIC filter. Results: Original sketch: Result of SketchyModel, with Preprocessing: Levels (0.30, 1.00), and then with a white 40% transparent layer on top: Results of the workflow with, in order of appearance: a) SoftInkModel, scale 4.0, b) InkModel, scale 4.0, c) InkModel, scale 6.0: Result of G’MIC’s filter Engrave, in order of appearance: a) over the original sketch, b) over the version smoothed out by SketchyModel: Example 2. The following example is a derivative of “Pepper and Carrot in traditional clothing” by David Revoy. Workflow: Use SketchyModel, with standard options, Scale = 1.0. Add a white layer with 40% opacity. Use InkModel, Scale = 4.0. Example 3. The following example is a derivative of “Huge machine to maintain” by David Revoy. Workflow: Use SketchyModel, Levels in preprocessing: (0.0., 0.82) (to whiten the background), Scale either 1.0 or 2.0. Add a white layer with 40% opacity. Use InkModel, Scale - 4.0. Original: Using SketchyModel at Scale 1.0 (resulting in less details): Using SketchyModel at Scale 2.0 (more details): Workflow 2. Just using InkModel, with Levels (0.0, 0.9) and Scale = 4.0. Result:
- Local authentication hub (2025/02/09 15:46)by Alexander Bokovoy and Andreas Schneider FOSDEM 2025 is just behind us and it was a great event as always. Alexander and I had a chance to talkabout the local authentication hub project. Our FOSDEM talk was “localkdc – a general local authentication hub”. You can watch it and come back here for more details. But before going into details, let us provide a bit of a background. It is 2025 now and we should go almost three decades back (ugh!). Local authentication localkdc History dive Authentication on Linux systems is interwoven with the identity of the users. Once a user logged in, a process is running under a certain POSIX account identity. Many applications validate the presence of the account prior to the authentication itself. For example, the OpenSSH server does check the POSIX account and its properties and if the user was not found, will intentionally corrupt the password passed to the PAM authentication stack request. An authentication request will fail but the attempt will be recorded in the system journal. This joint operation between authentication and identification sources in Linux makes it important to maintain a coherent information state. No wonder that in corporate environments it is often handled centrally: user and group identities stored at a central server and sourced from that one by a local software, such as SSSD. In order to consume these POSIX users and groups, SSSD needs to be registered with the centralized authority or, in other words, enrolled into the domain. Domain enrollment allows not only identity and authentication of users: both the central server and the enrolled client machine can mutually authenticate each other and be sure they talk to the right authority when authenticating the user. FreeIPA provides a stable mechanism for building a centralized domain management system. Each user account has POSIX attributes associated with it and each user account is represented by the Kerberos principal. Kerberos authentication can be used to transfer the authentication state across multiple services and provides a chance for services to discover user identity information beyond POSIX. It also makes strong linking between the POSIX level identity and authentication structure possible: for example, a Kerberos service may introspect a Kerberos ticket presented by a user’s client application to see how this user was authenticated originally: with a password or some specific passwordless mechanism. Or, perhaps, that a client application performs operations on behalf of the user after claiming it was authenticated using a different (non-Kerberos) authentication. Local user accounts’ use lacks this experience. Each individual service needs to reauthenticate a user again and again. Local system login: authenticate. Elevating privileges through SUDO? Authenticate again, if not explicitly configured otherwise. Details of the user session state, like how long this particular session is active, is not checked by the applications, making it also harder to limit access. There is no information on how this user was authenticated. Finally, overall user experience between local (standalone) authentication and domain-enrolled one differs, making it harder to adjust and educate users. Local authentication is also typically password-based. This is not a bad thing in itself but depending on applications and protocols, worse choices could be made, security-wise. For example, contemporary SMB 3.11 protocol is quite secure if authenticated using Kerberos. For non-Kerberos usage, however, it is left to rely on NTLM authentication protocol which requires use of RC4 stream cipher. There are multiple attacks known to break RC4-based encryption, yet it is still used in majority of non-domain joined communications using SMB protocol simply because there was no (so far) alternative. To be correct, there was always an alternative, use of Kerberos protocol, but setting it up for individual isolated systems wasn’t practical. The Kerberos protocol assumes the use of three different parties: a client, a service, and a key distribution center (KDC). In corporate environments a KDC is part of the domain controller system, a client and a service are both domain members, computers are enrolled in the domain. The client authenticates to KDC and obtains a Kerberos ticket granting ticket (TGT). It then requests a service ticket from the KDC by presenting its TGT and then presents this service ticket to the service. The service application, on its side, is able to decrypt the service ticket presented by the client and authenticate the request. In the late 2000s Apple realised that for individual computers a number of user accounts is typically small and a KDC can be run as a service on the individual computer itself. When both the client and server are on the same computer, this works beautifully. The only problem is that when a user needs to authenticate to a different computer’s service, the client cannot reach the KDC hosted on the other computer because it is not exposed to the network directly. Luckily, MIT Kerberos folks already thought about this problem a decade prior to that: in 1997 a first idea was published for a Kerberos extension that allowed to tunnel Kerberos requests over a different application protocol. This specification became later known as “Initial and Pass Through Authentication Using Kerberos V5 and the GSS-API” (IAKerb). An initial implementation for MIT Kerberos was done in 2009/2010 while Apple introduced it in 2007 to enable remote access to your own Mac across the internet. It came in MacOS X 10.5 as a “Back to My Mac” feature and even got specified in RFC 6281, only to be retired from MacOS in 2019. Modern days In the 2020s Microsoft continued to work on NTLM removal. In 2023 they announced that all Windows systems will have a local KDC as their local authentication source, accessible externally via selected applications through the IAKerb mechanism. By the end of 2024, we have only seen demos published by Microsoft engineers at various events but this is a promising path forward. Presence of the local KDC in Windows raises an interoperability requirement: Linux systems will have to handle access to Windows machines in a standalone environment over SMB protocol. Authentication is currently done with NTLM, it will eventually be removed, thus we need to support the IAKerb protocol extension. The NTLM removal for Linux systems requires several changes. First, the Samba server will need to learn how to accept authentication with the IAKerb protocol extension. Then, Samba client code needs to be able to establish a client connection and advertise IAKerb protocol extension. For kernel level access, the SMB filesystem driver needs to learn how to use IAKerb as well, this will also need to be implemented in the user space cifs-utils package. Finally, to be able to use the same feature in a pure Linux environment, we need to be able to deploy Kerberos KDC locally and do it in an easy manner on each machine. This is where we had an idea. If we are going to have a local KDC running on each system, maybe we should use it to handle all authentication and not just for the NTLM removal? This way we can make both the local and domain-enrolled user experience the same and provide access locally to a whole set of authentication methods we support for FreeIPA: passwords, smartcards, one-time passwords and remote RADIUS server authentication, use of FIDO2 tokens, and authentication against an external OAuth2 Identity Provider using a device authorization grant flow. How “local” a local KDC should be? On standalone systems it is often not desirable to run daemons continuously. Also, it is not desirable to expose these services to the connected network if they really don’t need to be exposed. A common approach to solve this problem is by providing a local inter-process communication (IPC) mechanism to communicate with the server components. We chose to expose a local KDC via UNIX domain sockets. A UNIX domain socket is a well-known mechanism and has known security properties. With the help of a systemd feature called socket activation, we also can start local KDC on demand, when a Kerberos client connects over the UNIX domain socket. Since on local systems actual authentication requests don’t happen often, this helps to reduce memory and CPU usage in the long run. If a local KDC is only accessible over a UNIX domain socket, remote applications could not get access to it directly. This means they would need to have help from a server application that can utilize the IAKerb mechanism to pass-through the communication between a client and the KDC. It would enable us to authenticate as a local user remotely from a different machine. Due to how the IAKerb mechanism is designed and integrated into GSS-API, this only allows password-based authentication. Anything that requires passwordless methods cannot obtain initial Kerberos authentication over IAKerb, at least at this point. Here is a small demo on Fedora, using our localkdc tool to start a local KDC, obtain a Kerberos ticket upon login. The tickets can then be used effortlessly to authenticate to local services such as SUDO or Samba. For remote access we rely on Samba support for IAKerb and authenticate with GSSAPI but local smbclient uses a password first to obtain the initial ticket over IAKerb. This is purely a limitation of the current patches we have to Samba. Watch the localkdc demo Make a pause here and think about the implications. We have an initial Kerberos ticket from the local system. The Kerberos ticket embeds details of how this authentication happened. We might have used a password to authenticate, or a smartcard. Or any other supported pre-authentication methods. We could reuse the same methods FreeIPA already provides in the centralized environment. The Kerberos ticket also can contain details about the user session, including current group membership. It does not current have that in the local KDC case but we aim to fix that. This ticket can be used to authenticate to any GSS-API or Kerberos-aware service on this machine. If a remote machine accepts Kerberos, it theoretically could accept a ticket presented by a client application running on the local machine as well. Only, to do that it needs to be able to communicate with our local KDC and it couldn’t access it. Trust management Luckily, a local KDC deployment is a full-featured Kerberos realm and thus can establish cross-realm agreements with other Kerberos realms. If two “local” KDC realms have trust agreements between each other, they can issue cross-realm Kerberos tickets which applications can present over IAKerb to the remote “local” KDC. Then a Kerberos ticket to a service running on the target system can be requested and issued by the system’s local KDC. Thus, we can achieve passwordless authentication locally on Linux systems and have the ability to establish peer to peer agreements across multiple systems, to allow authentication requests to flow and operate on commonly agreed credentials. A problem now moves to the management area: how to manage these peer to peer agreements and permissions in an easy way? Systemd User/Group API support MIT Kerberos KDC implementation provides a flexible way to handle Kerberos principals’ information. A database backend (KDB) implementation can be dynamically loaded and replaced. This is already used by both FreeIPA and Samba AD to integrate MIT Kerberos KDC with their own database backends based on different LDAP server implementations. For a local KDC use case running a full-featured LDAP server is not required nor intended. However, it would be great if different applications could expose parts of the data needed by the KDB interfaces and cooperate together. Then a single KDB driver implementation could be used to streamline and provide uniform implementation of Kerberos-specific details in a local KDC. One of the promising interfaces to achieve that is the User/Group record lookup API via varlink from systemd. Varlink allows applications to register themselves and listen on UNIX domain sockets for communication similar to D-Bus but with much less implementation overhead. The User/Group API technically also allows to merge data coming from different sources when an application inquires the information. “Technically”, because io.systemd.Multiplexer API endpoint currently does not support merging non-overlapping data representing the same account from multiple sources. Once it would become possible, we could combine the data dynamically and may interact with users on demand when corresponding requsts come in. Or we can implement our own blending service. Blending data requests from multiple sources within MIT KDC needs a specialized KDB driver. We certainly don’t want this driver to duplicate the code from other drivers, so making these drivers stackable would be a good option. Support for one level of stacking has been merged to MIT Kerberos through a quickly processed pull request and will be available in the next MIT Kerberos release. This allows us to have a single KDB driver that loads other drivers specialized in storing Kerberos principals and processing additional information like MS-PAC structure or applying additional authorization details. Establishing trusts If Alice and Bob are in the same network and want to exchange some files, they could do this using SMB and Samba. But that Alice can authenticate on Bob’s machine, they would need to establish a Kerberos cross realm trust. With the current tooling this is a complex task. For users we need to make this more accessible. We want to allow users to request trust on demand and validate these requests interactively. We also want to allow trust to be present for a limited timeframe, automatically expiring or manually removed. If we have a Kerberos principal lookup on demand through a curated varlink API endpoint, we also can have a user-facing service to initiate establishing the trust between two machines on demand. Imagine a user trying to access SMB share on one desktop system that triggers a pop-up to establish trust relationship with a corresponding local KDC on the remote desktop system. Both owners of the systems would be able to communicate out of band that provided information is correct and can be trusted. Once it is done, we can return back the details of the specific Kerberos principal that represents this trust relationship. We can limit lifetime of this agreement so that it would disappear automatically in one hour or a day, or a week. Current state of local authentication hub We started with two individual implementation paths early in 2024: Support IAKerb in MIT Kerberos and Samba Enable MIT Kerberos to be used locally without network exposure MIT Kerberos did have support for IAKerb protocol extension for more than a decade but since Microsoft introduced some changes to the protocol, those changes needed to be integrated as well. This was completed during summer 2024, though no upstream release is available yet. MIT Kerberos typically releases new versions yearly in January so we hope to get some updates early 2025. Samba integration with IAKerb is currently under implementation. Originally, Microsoft was planning to release Windows 11 and Windows Server 2025 with IAKerb support enabled during autumn 2024. However, the Windows engineering team faced some issues and IAKerb is still not enabled in the Windows Server 2025 and Windows 11 releases. We are looking forward to getting access to Windows builds that enable IAKerb support to ensure interoperability before merging Samba changes upstream. We also need to complete the Samba implementation to properly support locally-issued Kerberos tickets and not only do acquisition of the ticket based on the password. Meanwhile, our cooperation with MIT Kerberos development team led to advancements in the local KDC support. The MIT Kerberos KDC can now be run over a UNIX domain socket. Also on systemd-enabled systems we allow socket activation, transforming local KDC into an on-demand service. We will continue our work on a dynamic database for a local KDC, to allow on-demand combination of resources from multiple authoritative local sources (Samba, FreeIPA, SSSD, local KDC, future dynamic trust application). For experiments and ease of deployments, a new configuration tool was developed, localkdc. The tool is available at localkdc and COPR repository can be used to try the whole solution on Fedora. If you want to get that test tried in a simple setup, you might be interested in a tool that we developed initially for FreeIPA: FreeIPA local tests. This tool allows to provision and run a complex test environment in podman containers. The video of the local KDC usage was actually generated automatically by the scripts from here.
- FOSDEM 2025 (2025/02/08 09:30)Last weekend I attended this years edition of FOSDEM in Brussels again. Besides meeting old and new friends I focussed on emergency and weather alerting as well as public transport topics. KDE KDE had a stand again, this time in the minimally less crowded (on the FOSDEM scale of crowdedness at least) AW building, next to our friends from GNOME. KDE stand (photo by Carl Schwan) Besides getting stickers, t-shirts and even the rare handmade amigurumi Konqi mascots you could see KDE software running on a large range of devices, from laptops and phones to embedded boards, drawing tables and handheld gaming consoles. Emergency & Weather Alerts Together with Nucleus I had a talk on Saturday about the public alert server we have been working on. This resulted in numerous interesting conversations: There are people looking into getting access to alerts in other countries. Learned about the CAP over XMPP standard (XEP 0127), which could be a more efficient way to receive CAP messages compared to the current high frequency CAP feed polling. We yet have to find a alerting authority supporting that though. The Netherlands open-sourced their national weather app a few days prior to FOSDEM. Possible approaches for integrating alerts with home automation systems, something particularly interesting in an accessibility context. Adapting to UnifiedPush’s work on aligning with the WebPush standard. There was also an interesting and somewhat related discussion on how to test cell broadcast, emergency calls and emergency location services on free mobile platforms. Especially testing emergency location services is tricky and not even the Google-free Android platforms have that at the moment as it’s part of Google Play Services rather than AOSP (ie. the closed source rather than the open source part of Android). On the way to FOSDEM I managed to port the KDE public alert client to the new server API. It still needs a UI refresh though, as it’s based on a 5 era prototype. KDE emergency and weather alerts client prototype. Transitous On Sunday Felix, Jonah and Marcus presented Transitous in the Railways and Open Transport track. As this was unfortunately the second to last talk of the event there wasn’t much time for discussions afterwards, but at least for several people involved with Transitous FOSDEM has been the first opportunity to meet in person. It’s great to see how this has grown in just one year. For more of that, there was also a discussion about organizing a Transitous sprint/hack weekend. Travel Spending several hours on various trains to get there and back also provides plenty of opportunity for field-testing KDE Itinerary, which allowed the new and much more comprehensive and efficient realtime update approach using trip queries to be tested and integrated for 25.04.
- This Week in Plasma: Final Plasma 6.3 Polishing (2025/02/08 04:00)Welcome to a new issue of "This Week in Plasma"! Every week we cover as much as possible of what's happening in the world of KDE Plasma and its associated apps like Discover, System Monitor, and more. This week Plasma's contributors spent a lot of time putting the finishing touches on Plasma 6.3 before its final release in three days to make sure it's as good as possible! Notable new Features Plasma 6.4.0 There's now an option to make panel pop-ups use the floating style even when the panel itself doesn't use that style. (Niccolò Venerandi, link) Notable UI Improvements Plasma 6.4.0 Improved the appearance of the Welcome Center page that shows up after you've finished upgrading to a new Plasma feature release. (Oliver Beard, link) (Here shown with the appearance it would have had for Plasma 6.2, since 6.4 doesn't exist yet!) Info Center's energy graph now uses the system's accent color, rather than always being red. (Ismael Asensio, link) When using software-based screen brightness, the minimum brightness level is now significantly darker. (Xaver Hugl, link) Improved the Kate Sessions widget's keyboard navigation in multiple ways. (Christoph Wolk, link) Frameworks 6.11 In the open/save dialogs used throughout KDE software, changes to the text in the filename field are now undo-able and the text field itself shows a little undo button. This is especially useful if you mis-click on a file while saving and accidentally overwrite the filename; now you can quickly undo that by clicking the button or pressing Ctrl+Z! (Marco Martin, Link) Notable Bug Fixes Plasma 6.3.0 Fixed a case where KWin could sometimes crash after resuming from sleep on certain hardware. (Xaver Hugl, link) Fixed a case where System Settings' Firewall pager could crash during normal usage, and also fail to save changed settings properly. (David Edmundson, link l and link 2) Fixed a performance issue caused by using the "Sidebar" Alt+Tab task switcher visualization that could eventually cause KWin to bog down or hang. (Marco Martin, link) Fixed two glitches related to scrolling not working properly while System Monitor's "Configure Columns" dialog was open. (David Redondo, link) When using the Kicker Application Menu widget with a right-to-left language like Arabic or Hebrew, its sub-menus now open to the left if there's space. (Christoph Wolk, link) Fixed a subtle issue that could cause automatic screen sleep to stop working after apps block and unblock it multiple times. (David Redondo, link) Uninstalling an app that was made a favorite in the Kickoff Application Launcher now removes it immediately, rather than only after a restart. (Harald Sitter, link) Fixed the Mouse Click KWin effect so it works again in the X11 session. (Vlad Zahorodnii, link) Fixed a case where the keyboard language System Tray icon could be missing on login in the X11 session. (Dark Templar, link) Plasma 6.3.1 Fixed two intermittent crashes in the portal-based screen chooser dialog: one after selecting a virtual output, and another one after an app disconnects from a stream. (David Redondo and Fushan Wen, link 1 and link 2) Fixed a case where opening a .flatpakref file in Discover could sometimes make it crash after launching. (Aleix Pol Gonzalez, link) Fixed a case where Discover could sometimes crash while trying to load app reviews without network connectivity. (Fushan Wen, link) Fixed a weird bug where repeatedly entering text in the Clipboard widget's search field and then deleting it could sometimes cause items in the list view to end up overlapping. (David Edmundson, link) Improved the reliability with which a trashcan icon on the desktop detects when it should change its appearance based on the presence or absence of files in the trash. (Méven Car, link) Non-square images used for the Kickoff Application Launcher's panel button are once again presented as expected. (Niccolò Venerandi, Link) Plasma 6.4.0 Fixed two cases where text wasn't translated in Spectacle's placeholder config UI and Info Center's Energy page graph labels. (Noah Davis and Ismael Asensio, link 1 and link 2) When a screen edge has multiple panels of different thicknesses, panel-pop-ups on the thinner panels now appear in the right place. (Niccolò Venerandi, link) Frameworks 6.11 Fixed a case where Plasma could crash while trying to render SVG images, which it does a lot of. (Fushan Wen, link) Fixed multiple bugs relating to focus and tab-ordering in the open/save dialogs used throughout KDE software. (Marco Martin, Link) Fixed a visual bug most prominently affecting the System Tray, where icons could sometimes look blurry until hovered while using a fractional screen scale factor. (Marco Martin, link) In the Properties dialog for symlinks on the desktop, the button to open Dolphin at the target's location now works. (Kamil Kaznowski, link) Other bug information of note: 1 very high priority Plasma bug (1 last week). Current list of bugs 25 15-minute Plasma bugs (up from 24 last week). Current list of bugs 91 KDE bugs of all kinds fixed over the past week. Full list of bugs 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: Triage and confirm bug reports, maybe even identify their root cause Contribute designs for wallpapers, icons, and app interfaces Design and maintain websites Translate user interface text items into your own language Promote KDE in your local community …And a ton more things! 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.
- Web Review, Week 2025-06 (2025/02/07 11:18)Let’s go for my web review for the week 2025-06. Chatbot Software Begins to Face Fundamental Limitations | Quanta Magazine Tags: tech, ai, machine-learning, gpt, mathematics, logic When you put the marketing claims aside, the limitations of those models become obvious. This is important, only finding the root cause of those limitations can give a chance to find a solution to then. https://www.quantamagazine.org/chatbot-software-begins-to-face-fundamental-limitations-20250131/ LLMs: harmful to technical innovation? Tags: tech, ai, machine-learning, gpt, copilot, innovation, learning, vendor-lockin This will definitely push even more conservatism around the existing platforms. More articles mean more training data… The underdogs will then suffer. https://evanhahn.com/llms-and-technical-innovation/ Bad idea: “Artificial Intelligence” automatically improves productivity Tags: tech, ai, machine-learning, gpt, copilot, programming, productivity Be wary of the unproven claims that using LLMs necessarily leads to productivity gains. The impacts might be negative. https://jchyip.medium.com/bad-idea-artificial-intelligence-automatically-improves-productivity-0829fcf2146c The LLM Curve of Impact on Software Engineers Tags: tech, ai, machine-learning, gpt, copilot, productivity, learning Again it’s definitely not useful for everyone… it might even be dangerous for learning. https://serce.me/posts/2025-02-07-the-llm-curve-of-impact-on-software-engineers SQLite or PostgreSQL? It’s Complicated! Tags: tech, databases, performance, postgresql, sqlite It shows unexpected results in its measurements. It also highlights the importance of proper settings for your database system. https://www.twilio.com/en-us/blog/sqlite-postgresql-complicated Falsehoods programmers believe about null pointers | purplesyringa’s blog Tags: tech, memory If you didn’t realise that null pointers open a maze of different traps, this is a good summary of widespread misconceptions. https://purplesyringa.moe/blog/falsehoods-programmers-believe-about-null-pointers/ String vs &str Tags: tech, rust, memory Another reminder that you don’t want reference to primitive types everywhere in Rust code. There’s actually ways to handle this properly. This post gives a couple of simple guidelines to apply. https://blog.sulami.xyz/posts/string-vs-str/ py-free-threading Tags: tech, python, multithreading Looks like a nice resource to handle the coming move to free threaded Python. https://py-free-threading.github.io/ Decorator JITs - Python as a DSL Tags: tech, python, performance, jit Nice exploration of JIT based techniques in Python. https://eli.thegreenplace.net/2025/decorator-jits-python-as-a-dsl/ Big Packages or Many Dependencies Tags: tech, supply-chain, dependencies, complexity Indeed there is a tension between both approaches in package ecosystems. https://v5.chriskrycho.com/notes/big-packages-or-many-dependencies/ Developer philosophy Tags: tech, programming, learning Definitely a good list of lessons to learn when you’re a junior developer. https://qntm.org/devphilo Bye for now!
- KDE Gear 24.12.2 (2025/02/06 00:00)Over 180 individual programs plus dozens of programmer libraries and feature plugins are released simultaneously as part of KDE Gear. Today they all get new bugfix source releases with updated translations, including: kalk: Fixes for the History view (Commit) dolphin: Fix pixelated preview images (Commit, fixes bug #497576) kdevelop: Fix locations of Uses in macro expansions when using clang 19 or later (Commit, fixes bug #496985) Distro and app store packagers should update their application packages. 24.12 release notes for information on tarballs and known issues. Package download wiki page 24.12.2 source info page 24.12.2 full changelog
- Glaxnimate 0.6.0 Beta (2025/02/06 00:00)Glaxnimate 0.6.0 Beta has finally been released for testing! It has been a while since the last release of Glaxnimate, but in the background we worked hard to make this first release under the KDE umbrella happen! Please help us testing and report any issue you may encounter on https://bugs.kde.org/enter_bug.cgi?product=glaxnimate Glaxnimate joins KDE The Glaxnimate team is proud to announce Glaxnimate is now part of KDE. Glaxnimate benefits from the shared KDE build and distribution infrastructure, the collective knowledge of the community and libraries such as KDE Frameworks. This way the developers can spend more time on the code to fix bugs and develop new features for you! Changes Editing The rotation handle now preserves rotation direction and multiple full rotations Alt + click on keyframes cycles between built-in easing curves Alt + click on bezier points cycles between tangent symmetry modes (Ctrl+click still works) Changing a bezier point from corner to smooth will add tangents if they are missing The import image dialog now allows importing multiple images at once I/O Added support for SVG text-anchor User Interface Middle mouse drag now pans the timeline There is an icon on the timeline to quickly toggle keyframes Buttons to jump to the next/previous keyframe in the timeline Improved LottieFiles import dialog Improved autosave recovery process Script console now supports basic autocompletion Scripting Exposed method to add new compositions Misc Switched to an even/odd version numbering scheme Integration with KDE Frameworks Bug Fixes Fixed keyframe context menu showing the wrong "after" transition When drawing bezier points that don't have tangents are correctly marked as corner The play button now resumes from the current frame rather than resetting to the start Fixed saving custom templates Toggling visibility / lock of a layer by clicking on its icon now adds an undo/redo action Fixed LottieFiles import Fixed dropping file as object Fixed closing compositions from the tab bar Fixed loading colors from older lotties Shape modifiers marked as not visible are now correctly ignored Fixed rendering of round corners modifier Fixed "New Composition" action creating an invisible layer Fixed repeater opacity not being applied correctly Improved handling of repeater with stroke Fixed SVG animation export Fixed animated raster plugin I/O How to get it Note that this is a beta release. Most Linux distributions do not package unstable releases. We recommend to test this release with one of the binaries we provide: Linux AppImage: glaxnimate-0.5.80-x86_64.AppImage Windows Installer: glaxnimate-0.5.80-x86_64.exe macOS DMG ARM: glaxnimate-0.5.80-arm64.dmg Intel: glaxnimate-0.5.80-x86_64.dmg Packager Section The source code tarball are available from the KDE servers: URL: https://download.kde.org/unstable/glaxnimate/0.5.80 Source: glaxnimate-0.5.80.tar.xz Signed by: 97B71AA02D63EA6C5C44C23B962AC48EF0501F0B Julius Künzel julius.kuenzel@kde.org
Discussion