Today we're releasing Krita 5.2.10! This is a bug fix release. After this release we will focus on releasing Krita 5.3.0, the next feature release, and Krita 6.0.0, the first release based on Qt6.
[!NOTE]
Note for users of keyboards with more than 12 function keys.
Programs like WeChat regularly inject a spurious F22 keypress to get focus. From 5.2.10, Krita will by default ignore any function key higher than F12. If you have a keyboard or other device sending such keypresses, you can enable them by adding the following line to your kritarc file:
...
ignoreHighFunctionKeys=false
...
Bug Fixes
Raster layer opacity changes now properly clear the animation cache. Bug 499389
Fix incorrect scaling of animated transform mask values. Bug 469881
Allow resetting onion skins to default values. Bug 466977
Resize canvas: reset the canvas size when toggling the "preserve aspect ratio" button. Bug 452605
TIFF: Tiff files would append the entire image again on saving again because we didn't truncate the file on saving. Bug 500870
Fix a crash when autosaving extremely big files.
Make updating the rulers more responsive during canvas transformations
Make panning more responsive
Improve performance of the statusbar
Fix the transform tool to show reordered layers preview Bug 503201
OpenRaster: default group layers to non-passthrough mode, following the specitication. Thanks Wareya Na!
Palettes: use the title field for the palette name for Adobe Color Book palettes
Fix the brush preview when creating a new preset with canvas mirroring enabled. Bug 501153
Fix handling of groups in palette files
Download
Windows
If you're using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the Krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.
[!NOTE]
We are no longer making 32-bit Windows builds.
Note: from 5.2.10, the minimum supported version of Ubuntu is 22.04.
[!WARNING]
5.2.10 has updated the AppImage runtime, which is known to be incompatible with the old versions of AppImageLauncher. Developers of the AppImage runtime suggest to remove or update AppImageLauncher. See this report: Issue 121
More AppImage troubleshooting info is available here: FUSE
We consider Krita on ChromeOS as ready for production. Krita on Android is still beta. Krita is not available for Android phones, only for tablets, because the user interface requires a large screen.
The Linux AppImage and the source .tar.gz and .tar.xz tarballs are signed. You can retrieve the public key here. The signatures are here (filenames ending in .sig).
Hi, I'm thrilled to be part of Google Summer of Code 2025 with KDE Community, working under the mentorship of Carl Schwan, Claudio Cambra, and Aakarsh MJ. My project, "Modernize Account Management with QML," aims to enhance the account management system in Merkuro, by transitioning its resource configuration dialogs to QML. This blog post introduces my project and shares the progress I've made in the recent weeks.
About the Project -
Merkuro currently relies on QWidget-based dialogs for managing account resources, which, while functional, are not optimized for modern platform usability, especially on touch devices or diverse platforms. My project addresses this by porting resource configuration dialogs to QML, a modern, flexible, and responsive UI framework, while maintaining compatibility with existing QWidget-based systems. The goal is to create a shared infrastructure that supports both QWidget and QML-based configurations, enabling a seamless transition to modern UI development without disrupting existing functionality.
The project has two main components:
Building a Shared Infrastructure: Creating a foundation that supports both QWidget and QML-based configuration dialogs for Akonadi agents, ensuring backward compatibility and scalability.
Porting SingleFileResource-Based Configurations: Migrating singlefileresource based configurations, such as the ical, vcard, etc to QML to provide a modern, responsive user experience.
Benefits to KDE Community -
Porting Merkuro's account management to QML offers significant benefits:
For Users: QML-based dialogs provide a smoother, more intuitive, and visually engaging experience. QML's flexibility supports dynamic and touch-friendly interfaces, making account management more accessible on various devices, from desktops to mobile platforms.
For Developers: The shared infrastructure improves modularity and maintainability, allowing developers to adopt QML at their own pace without breaking legacy systems. This sets the stage for future QML-based UI development in Akonadi and beyond.
Progress So Far -
1. Implemented Shared Infrastructure for Akonadi
To support both QWidget and QML-based configurations in Akonadi, I developed a new infrastructure in following way:
AbstractAgentConfiguration: A new base class defining standard methods (load(), save(), etc.) for consistent configuration handling.
AgentConfigurationBase: Updated to inherit from AbstractAgentConfiguration, ensuring compatibility with existing QWidget-based dialogs.
QuickAgentConfigurationBase: A new class inherited from AbstractAgentConfiguration, enabling QML-based configurations via shared QML engine for dynamic UIs.
QuickAgentConfigurationFactoryBase: A factory for QML-based configuration instances, complementing the QWidget factory.
This infrastructure, inspired by KCMUtils, enables Akonadi to handle both legacy and modern UI paradigms seamlessly.
2. Ported Knut Configuration Dialog to QML
I removed QWidget based code and then implemented Knut configuration dialog in QML.
And currently working on porting singlefileresource based dialogs....
Challenges Faced -
The progress came with several challenges that shaped my learning:
Testing the QML Infrastructure: Validating the new QML infrastructure during development was difficult, as it required a functional QML-based dialog to test fully. I could only verify the infrastructure’s correctness after porting the Knut configuration to QML, which delayed feedback and required iterative adjustments.
Navigating KDE’s Modular Ecosystem: KDE's ecosystem is vast and modular so understanding each of them is very important. Recently, I spent around hour looking for the Knut configuration dialog in Merkuro only to find out (thanks to Carl) that it actually lives in KOrganizer’s test suite! I was actually unaware of this.
And of course, compiling errors and warnings were always there to keep me company :)
Thank you and stay tuned for the next part, where I’ll share more updates and learnings from my GSoC journey!
This week I learned how to tweak the UI using Qt modules, specifically Qt GUI classes. As someone new to C++ and Qt, I’ve found that official documentation for any new technology is always helpful in understanding the basic concepts and framework. Reading official documentation is like using an encyclopedia—you may not read it cover to cover, but you can search for key concepts to help navigate what you’re trying to do.
Before and After
QPainter
After researching how the Assistant Tool is drawn on the canvas, I thought I could use that same logic to draw on the floating bar. In the process, I found that the Assistant Tool has a lot of nested logic, inheriting different widget classes, and referencing various Kis objects that need to be built. After debugging countless times to find where this tool is drawn, I found the QPainter class. To keep it simple, this class draws lines and shapes in different colors. For now my goal is to display a floating bar.
Files and Implementation
/krita/libs/ui/ kis_painting_assistants_decoration.h kis_painting_assistants_decoration.cpp _ new kis_selection_assistants_decoration.h kis_selection_assistants_decoration.cpp
The files I focused on are in the path above. For organization, I made new files in the same directory. In kis_selection_assistants_decoration, the QPainterPath class is used to build the floating bar. This is slightly different from QPainter, as a QPainterPath object only needs to be created once for complex shapes.
To display and test the floating bar I used kis_painting_assistants_decoration::drawDecoration() method call to call kis_selection_assistants_decoration::drawDecoration().
Conclusion
This week I took a deeper dive into how Krita's UI is structured in Qt. By exploring how the Assistant Tool is created, I learned, I learned how core classes like QPainterPath interact with the canvas. Through this experience, I gained a solid starting point for UI-related work in Krita. There’s still much more to learn and improve on, but seeing a visual element I wrote appear on the canvas was a big milestone!
Contact
To anyone reading this, please feel free to reach out to me. I’m always open to suggestions and thoughts on how to improve as a developer and as a person. Email: ross.erosales@gmail.com Matrix: @rossr:matrix.org
I switched to static website generation with Jekyll in 2019 (probably because of Carl Schwan, who is somehow my
guiding-spirit in webulous things even if he does Hugo things nowadays). That means Ruby,
and I’ve got various bits-and-notes documents saying things like “When Ruby breaks again, …”
This blog post is my attempt to document for myself, once-and-for-all, my setup.
Basically, this comes down to (gently) fighting the FreeBSD packaging system.
Ruby 3.3 Incompatible
With Jekyll 4.3.1, trying to run it with Ruby 3.3 leads to the following error message:
jekyll 4.3.1 | Error: undefined method `[]' for nil
/usr/local/lib/ruby/3.3/logger.rb:384:in `level': undefined method `[]' for nil (NoMethodError)
@level_override[Fiber.current] || @level
^^^^^^^^^^^^^^^
from ~/.gem/ruby/3.3/gems/jekyll-4.3.1/lib/jekyll/log_adapter.rb:45:in `adjust_verbosity'
This is documented in the release notes for Jekyll 4.3.3.
Upgrade Blockers
So let’s stick with Ruby 3.2 for a bit. On FreeBSD, that means setting a default version for Ruby in /etc/make.conf, like so:
DEFAULT_VERSIONS+=ruby=3.2
Then installing Ruby 3.2, e.g. with pkg install ruby32. Even though the language is still there, other tools like bundler are not, so I had to build sysutils/rubygem-bundler from ports. Once that’s done, managing my Ruby 3.2 environment is workable again.
This is part of the “gently fighting”: getting the versions of the tools to match the version of the language I want. I can’t really blame the central package-repository for not supporting every use-case.
Upgrading Jekyll seems like the right thing to do, and bundle update is the tool to use.
It fails with a peculiar message that suggests that some non-FreeBSD executable is being used:
Installing sass-embedded 1.89.2 with native extensions
ELF binary type "0" not known.
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
Looking into ~/.gem/ruby/3.2/gems/sass-embedded-1.89.2/ there is an ext/sass directory, which contains an ELF executable called true and a file with ^A in its name (control-A, ASCII 0x01). I have no idea what is going on, but it feels like malware delivery while it is probably some developer delivering Linux tools – the readme mentions a Dart-language tool. I don’t feel like installing the Linuxolator to build this one gem today.
Careful With That Axe
This works remarkably well, once Ruby 3.2 and corresponding bundler are installed:
rm -rf ~/.gem
# Edit gemfile to make BUNDLED WITH match current bundler version
bundle install
I have no use for, or patience with, Ruby other than generate-my-damn-website.
This will tide me though until such a time as I update to a slightly-more-modern
static site generator, or freeze the whole thing into a virtual-machine image
that will never change again because .. it’s a static site generator.
I could replace it with vi and some patience.
You may have read about my new-found fondness for Plasma’s Clock app. Following the development of a “Picture in Picture” protocol for Wayland, I remembered how I once saw someone put up a little timer window during a lunch break while screen-sharing a presentation. I figured, I wanted that, too!
KClock showing a timer popped out in a PIP window
A key difference between X11 and Wayland is that Wayland is descriptive, not prescriptive. For example, a drop down menu under X11 is a window with no border that is placed in a very specific location determined by the application. It then grabs all the input so that up and down arrows work and clicking outside will dismiss it. That also means that global shortcuts won’t work while the menu is open. You can’t take a screenshot of it, you can’t even lock your screen. In 2025, this is embarrassing.
Under Wayland on the other hand, such a menu is an XDG Popup. The application tells the compositor what button it came from and what to do when it can’t fit (flip to the other side, scroll, etc). The compositor then gets to decide where to put the menu (not crossing display boundaries, for example) and to make sure it goes away when you click elsewhere or switch to a different application.
This also means that an application is a lot more restricted when it comes to – let’s say – creative window behavior. Take the picture-in-picture feature for example: an application can’t just decide to keep its window on top of everyone else. Normally, that’s a good thing! But it likewise prevents implementing a little overlay video player in your Web browser under Wayland. Enter xx-pip-v1.
Measure lap time while watching a fantastic talk
It’s a protocol very similar to XDG Shell but instead of managing desktop-y windows and popups, it creates floating picture-in-picture windows. KWin recently gained support for it. As indicated by the “xx” prefix it’s an experimental protocol and therefore guarded by a KWIN_WAYLAND_SUPPORT_XX_PIP_V1 environment variable. As with most protocols, having a test case is nice but a proper application making use of it will uncover gaps and oversights in the protocol much better. Therefore, I took the opportunity to allow KClock to pop out timers and the stopwatch into a little PIP window.
While it can and does take time to sketch a Wayland protocol to realze a new use case, the end result will be generally better than anything we had before. Rather than an application deciding how PIP should behave, the compositor is in full control and subsequently you, the user. We could offer an option for which corner the window should be placed by default, or to not show it at all, and do it consistently for all applications.
Many thanks to Vlad Zahorodnii for his work on the xx-pip-v1 protocol and whose demo application the KClock implementation is based on and to David Edmundson for implementing window move/resize in the PIP window.
After four months of active maintenance and many weeks triaging bugs, the digiKam team is proud to present version 8.7.0 of its open source digital photo manager.
Improvements in Photos, KRetro and better keyboard navigation
Welcome to a new issue of "This Week in KDE Apps"! Every week (or so) we cover as much as possible of what's happening in the world of KDE apps.
As you might have noticed, the frequency of "This Week in KDE Apps" has not been very consistent lately. Particularly during the summer season, I (Carl) have a lot of social obligations and can't ensure regular updates with the small amount of time I have available. If you are a KDE developer, you can help by contributing your updates to the GitLab merge request on invent. In that respect, a huge thanks to Felix Ernst for doing that already for Dolphin.
Getting back to all that's new in the KDE App scene, let's dig in!
Akseli Lahtinen increased the click area of files and folders in the main view and overhauled their styling. It's (subjectively speaking) a lot prettier now! We are trying to make Dolphin more consistent with other list styles in KDE long-term (25.08.0 - link).
Méven Car added a colorful folder icon chooser to the context menu of folders (25.08.0 - link). The Dolphin context menu can be edited in Dolphin's settings window.
Aleksandr Borodetckii lowered the default scroll speed to follow the globally-configured scroll distance more closely. Scrolling one "tick" with the mouse wheel should now move the view by a similar distance in Dolphin as it does in KWrite. In details view mode we made sure that scrolling moves by full item height (25.08.0 - link).
Gleb Kasachou added a setting to optionally elide long file names at the end instead of in the middle, so when the Dolphin window is too narrow to display “a very long file name.txt”, you can now switch between showing “a very…file name.txt” or “a very long file….txt”. Both of these behaviors have been respectfully criticized in the past, so now everyone can set it to their liking (25.08.0 - link).
Bojidar Marinov fixed a visual bug in the default icons view mode in a livestream, as sometimes the file name would have one row of text outside and below the actual file geometry (25.08.0 - link).
Akseli Lahtinen fixed a long-standing issue that could cause Dolphin to crash while interacting with Samba shares (Frameworks 6.16 - link).
Kai Uwe Broulik fixed another long-standing issue where a random "Examining" popup would appear when connecting to a busy Samba share (25.04.3 - link).
Sune Vuorela made the list of certificates used to sign a PDF update when switching the active backend (GnuPG or NSS) (25.08.0 - link). If Kleopatra is installed and the GPG backend is selected, Okular will now propose to view the certificate details in Kleopatra (25.08.0 - link).
Abdus Sami made the number of items in the recent history configurable (25.08.0 - link).
Pablo Ariño ported the Etesync resource away from directly depending on QtWidgets. This decreases the RAM consumption by around 10MiB for each running Etesync instance (25.08.0 - link). Carl then ported the resource away from KWallet to the more multiplatform alternative QtKeychain (25.08.0 - link).
Merkuro Manage your tasks, events and contacts with speed and ease
Oliver Beard fixed various bugs in Photos. Sharing now works again (25.08.0 - link) and the bookmark functionality is now consistently called "bookmark" in the UI (25.08.0 - link). He also ported the thumbnailbar to a standard toolbar (link).
Carl Schwan made it possible to configure some shortcuts in Photos and added a command bar (25.08.0 - link). Additionally, he made it possible to configure which metadata details are available in the sidebar (25.08.0 - link).
Carl also optimized the main view a bit (25.08.0 - link 1, link 2 and link 3), unified the breakpoint at which desktop and mobile mode are switched (25.08.0 - link), fixed the video player which was not completely ported away from Qt5 (25.08.0 - link), and made a large number of small cleanups and code modernizations (link).
Jean-Baptiste Mardelle added an action to extend and collapse items in the effects and folders view. This allows navigating these views with the keyboard (25.08.0 - link).
Carl Schwan added support for Deutsches Jugendherbergswerk (DJH) email confirmations (25.04.03 - link).
Stephan Olbrich added support for Deutscher Alpenverein (DAV) membership cards (25.04.03 - link).
David Pilarčík added support for extracting multiple tickets from one PDF for Leo Express (25.04.03 - link) and improved the extraction of the luma extractor (25.04.03 - link).
Joshua Goins overhauled the server information page (25.08.0 - link). You can now view your server's extended description, terms of service and privacy policy (when applicable).
Efe Çiftci added a "Show Folders" action to Filelight that allows toggling the visibility of the folder list on the left-hand side of the window (25.08.0 - link).
For a complete overview of what's going on, visit KDE's Planet, where you can find all KDE news unfiltered directly from our contributors.
Get Involved
The KDE organization has become important in the world, and your time and
contributions have helped us get there. As we grow, we're going to need
your support for KDE to become sustainable.
You can help KDE by becoming an active community member and getting involved.
Each contributor makes a huge difference in KDE — you are not a number or a cog
in a machine! You don’t have to be a programmer either. There are many things
you can do: you can help hunt and confirm bugs, even maybe solve them;
contribute designs for wallpapers, web pages, icons and app interfaces;
translate messages and menu items into your own language; promote KDE in your
local community; and a ton more things.
You can also help us by donating. Any monetary
contribution, however small, will help us cover operational costs, salaries,
travel expenses for contributors and in general just keep KDE bringing Free
Software to the world.
To get your application mentioned here, please ping us in invent or in Matrix.
This week, the merge request for the EteSync resource has been reviewed and successfully merged! This marks a key milestone in the project: EteSync is the first resource to be fully refactored, with its UI logic cleanly separated into a standalone configuration plugin.
Based on feedback from my mentors, I made a few final revisions before the merge. One important addition was a .notifyrc file for the EteSync resource. This allows the headless EteSync resource to make use of KNotification for reporting errors or status updates, integrating with the user notification system in a way that doesn’t depend on a UI.
With the resource no longer depending on QtWidgets, and its configuration interface now dynamically loaded, this change contributes to our broader goal of making the Merkuro suite lighter and more adaptable for mobile environments.
After the merge, my mentor Carl checked the memory usage using System Monitor. The improvements were measurable: the EteSync resource now uses approximately 9.5 MiB of RAM, compared to the 22 MiB used prior to the refactor.
The Job Tracker and a D-Bus Debugging
With Etesync out of the way, I turned my full attention back to the PIM Migration Agent. The next logical step was to resolve the KUiServerJobTracker problem I identified last week. My initial plan was to replace it entirely with the progress-reporting tools built directly into Akonadi’s AgentBase. But, while inspecting the Akonadi code, I realized this approach wouldn’t be viable for my use case.
Although AgentBase does provide D-Bus signals for job progress and status updates, these are low-level and do not integrate directly with the system tray or display persistent visual feedback to the user. In contrast, KUiServerV2JobTracker automatically presents progress as desktop notifications or tray-based UI elements.
Still, I implemented the changes, compiled the code, and launched akonadiconsole to test. The good news: the refactored agent started and the configuration plugin loaded. The bad news: they weren’t talking to each other. The D-Bus communication I had set up last week was failing.
This sent me down a debugging rabbit hole. My first hypothesis was that the agent needed its own .service file to properly register on the D-Bus session bus. I spent a good chunk of time creating and tweaking one, but the D-Bus connection simply refused to work as intended. The plugin and the agent remained strangers.
After much investigation I discovered the root cause, and it was a typical environment problem.
akonadiconsole was using the system D-Bus, while my development build of the agent was trying to register on the user session D-Bus managed by my Plasma desktop.
They were on two completely different communication networks! This immediately explained why my custom dbus interface had no effect—akonadiconsole was never even looking for it in the user session. To solve this I ran:
kde-builder - -run akonadictl restart
After this I ran the akonadiconsole once again and this time the D-Bus connection worked as intended.
What’s Next?
For next week, the priorities are:
Re-evaluate the job tracking solution for the Migration Agent, now with a proper understanding of the D-Bus context.
Push forward with removing the final QtWidgets dependencies.
Finalize the plugin-agent communication pathway with reliable, real-time interaction.
The refactor of EteSync and the progress made with D-Bus integration in the Migration Agent continue to move the project toward a more modular and future-proof codebase.
Dear fans of music & open source music players, in preparation of the upcoming Amarok 3.3 release, a second beta release (3.2.82) has been prepared.
This time, the most important change is the new GStreamer-based audio backend. This enables a number of features that weren't available on Qt6 Phonon
backends, and likely also provides a more reliable audio experience in general.
In addition to audio system work, e.g. more safeguards have been set up around collection scanning code to prevent some potential database issues.
More details on changes are listed in the ChangeLog.
These come in addition to the previous beta 1 changes (Qt6 only, database update).
Please note that due to the database update in beta 1, downgrading from 3.3 betas is not directly possible, and returning to pre-3.3 versions
requires the database (at ~/.local/share/amarok/mysqle/) to be manually backed up beforehand.
The Amarok 3.3 beta 2 source tarball is available on
download.kde.org
and it has been signed with Tuomas Nurmi's GPG key.
In addition to the source code, it is likely that some distributions will provide beta packages.
The various nightly git builds provided by various splendid packagers should also provide a way of using the beta changes
and participating in the testing.