Wednesday, 29 January 2025

Today we are releasing GCompris version 25.0.
As you can see, we are now basing the major version number on the release year. This makes sense as we are doing one major version per year. It is also a good occasion to do it now to celebrate the 25 years of GCompris.
This version adds translation for one more language: Sanskrit.
This new version contains 195 activities, including 5 new ones:
- "Sketch" is an activity for drawing freely with multiple tools to let children explore their creativity.
- "Calculate with ten's complement" is the continuation of the existing ten's complement activities. This one helps the children to swap the numbers to easily compute a sum.
- "Vertical addition" is an activity to write an addition and solve it.
- "Vertical subtraction", is similar to the addition activity but for subtraction with the borrowing by regrouping method.
- "Vertical subtraction (compensation)", is similar to the subtraction one with the borrowing by compensation method.
It contains bug fixes and graphics improvements on multiple activities.
With the help of teachers, we rewrote a big part of the activities description to be clearer.
When we switch language in the menu, the new language is now applied directly, without having to restart GCompris.
On the technical side, it is also the first release using Qt6.
We have also set the graphical renderer to direct3d11 by default on Windows.
It is fully translated in the following languages:
- Arabic
- Bulgarian
- Breton
- Catalan
- Catalan (Valencian)
- Greek
- Spanish
- Basque
- French
- Galician
- Croatian
- Hungarian
- Italian
- Latvian
- Malayalam
- Dutch
- Polish
- Brazilian Portuguese
- Romanian
- Sanskrit
- Slovenian
- Swedish
- Turkish
- Ukrainian
It is also partially translated in the following languages:
- Azerbaijani (90%)
- Belarusian (86%)
- Czech (98%)
- German (88%)
- UK English (99%)
- Esperanto (99%)
- Estonian (88%)
- Finnish (91%)
- Hebrew (96%)
- Indonesian (93%)
- Georgian (85%)
- Lithuanian (92%)
- Macedonian (83%)
- Norwegian Nynorsk (94%)
- Portuguese (89%)
- Russian (92%)
- Slovak (82%)
- Albanian (98%)
- Swahili (92%)
- Chinese Traditional (88%)
You can find packages of this new version for GNU/Linux, Windows, Android and Raspberry Pi on the download page. This update will also be available soon in the Android Play store, the F-Droid repository and the Windows store.
Thank you all,
Timothée & Johnny
Today we're releasing Krita 5.2.9! 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!
Special thanks to Doreene Kang, Ralek Kolemios, Pedro Reis, Guillaume Marrec, Aqaao, Grum999, Maciej Jesionowski, Freya Lupen, Dov Grobgeld, Rasyuqa A. H.
- Add shortcuts to bezier curve and freehand path
- Fix original offsets not being accounted for when copying from another document (Bug 490998)
- Fix updates when copy-pasting multiple nodes into a new document
- Fix infinite loop when trying to update pass-through nodes (Bug 493774, Bug 493830, Bug 493837)
- Fix Photobash Crash
- Bug fix: Added A1 and A2 sizes when creating a document
- Fix a crash when trying to merge down a layer created after a reference image addition
- Possibly fix saving EXR files with extremely low alpha values
- Fix infinite loop when a clone layer is connected to a group with clones
- Dynamic brush tool shouldn't load the saved smoothing configuration (Bug 493249)
- Fix bogus offset when saving EXR with moved layers
- Try to keep color space profile when saving EXR of incompatible type
- Fix crash when re-importing the same resource, but changed (Bug 484796)
- Fix range of Saturation and Value brush options (Bug 487469)
- Check pointer before dereferencing. (Bug 479405)
- Fix loading .kpp files with embedded top-level resources (Bug 487866, Bug 456586, Bug 456197)
- Fix a crash when trying to clear scratchpad while it is busy (Bug 488800)
- Fix the current preset thumbnail to be present in the preset save dialog (Bug 488673, Bug 446792)
- JPEG XL: Fix potential lockup when loading multipage images
- Set the correct shortcut for zoom in in the action file (Bug 484365)
- Fixed: some tools is interrupted by recorder. (Bug 488472, Bug 477715, Bug 484783)
- Make sure that the text tool is not interrupted by the recorder (Bug 495768)
- Recover "Clean Up" button in the Krita's Recordings Manager (Bug 455207)
- Fix a possible saving lockout due to incorrect ownership of the saving mutex (Bug 496018)
- Fixes to the unit spinboxes, a new context menu has been added to change the unit.
- Make vector and raster selections to behave in the same way when creating tiny selections (Bug 445935)
- Fix unclosed paths when intersecting two rectangular selections (Bug 408369)
- Fix crash when closing Krita while Calligraphy Tool is active (Bug 496257)
- Fix following existing shape in the Calligraphy Tool (Bug 433288)
- Fix "Copy into new Layer" action when working with vector layers (Bug 418317)
- Make sure that eraser button is properly initialized on Krita start (Bug 408440)
- Fix focus issues in Canvas Size dialog (Bug 474809)
- Disable snapping to image center by default (Bug 466718)
- Change case of AppImage packages: .appimage -> .AppImage (Bug 447445)
- Make sure that point-based snap points have higher priority than line-based ones (Bug 492434)
- Implement canvas decorations for Snap-to-guides feature -Don't allow lowering/raising a mask into a locked layer
- Fix display profile conversion flags to be updated on settigns change (Bug 496388)
- Switch color history in the popup palette to use last-used sorting (Bug 441900)
- Add Unify Layers Color Space action
- Fix incorrect action text for "Paste Shape Style" (Bug 497035)
- Fix backward compatibility of Per-Channel filter (Bug 497336)
- Fix rendering of the warning icon in the composite op selector
- Simplify path point and control point move strategies.
- Fix an assert when modifying Mesh Gradient on a shape (Bug 496519)
- Fix aspect ratio of Resource Manager tooltips
- Improve rendering of pattern thumbnails
- Fix artifacts when painting under a gaussian blus layer in WA-mode (Bug 434938)
- Fix an assert when undoing merging of locked layers (Bug 497389)
- Remove ignoring of the mouse events in KoPathTool (Bug 411855)
- Use traceback instead of cgitb (Bug 497859)
- Fix ambiguous "break path" shortcut in Shape Edit Tool (Bug 429503)
- Add position indepndent property to libraqm
- Fix python Py_SetPath() deprecation by always using qputenv()
- JPEG XL export: Fix unable to set EPF value to -1 (encoder chooses)
- G'Mic has been updated to 3.5.0 stable.
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.
- 64 bits Windows Installer: krita-5.2.9-setup.exe
- Portable 64 bits Windows: krita-5.2.9.zip
- Debug symbols. (Unpack in the Krita installation folder)
Linux
- 64 bits Linux: krita-5.2.9-x86_64.AppImage
The separate gmic-qt AppImage is no longer needed.
(If, for some reason, Firefox thinks it needs to load this as text: right-click on the link to download.)
MacOS
Note: We're not supporting MacOS 10.13 anymore, 10.14 is the minimum supported version.
- MacOS disk image: krita-5.2.9.dmg
Android
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.
Source code
md5sum
For all downloads, visit https://download.kde.org/stable/krita/5.2.9/ and click on "Details" to get the hashes.
Key
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).
Tuesday, 28 January 2025
Monday, 27 January 2025
Qrca WiFi mode, Trust and Safety in Tokodon, and more
Welcome 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.
Due to FOSDEM happening next weekend, there won't be any "This Week in KDE Apps" post next week. If you are in Brussels during the event, the KDE team will be in building AW, next to our friends from GNOME. Come say hi, we will have some stickers and demo devices!
General Changes
The About page used in many Kirigami apps now uses a new FormLinkDelegate
for entries that will open a link. (Carl Schwan, Kirigami Addons 1.8.0. Link)

Amarok Rediscover your music
Support for Digital Audio Access Protocol (DAAP) was fixed. (Tuomas Nurmi, 3.2.2. Link)
Akonadi Background service for KDE PIM apps
Loading IMAP tags was optimized. (Carl Schwan, 24.12.2. Link)
Some SQL queries were fixed so that they don't exceed the limits imposed by the SQL engines (e.g. when reindexing a big email folders). (David Faure, 24.12.2. Link)
Elisa Play local music and listen to online radio
Files will play automatically when opened from a different app (e.g. Dolphin). (Pedro Nishiyama, 25.04.0. Link)
KDE Itinerary Digital travel assistant
We improved the ticket extractor for PKP (Grzegorz Mu, 24.12.2, Link)
We fixed public transport data access from Entur in Norway (24.12.2, also affects KTrip).
Kaidan Modern chat app for every device
The onboarding workflow of Kaidan was completely overhauled. (Melvin Keskin. Link)
The QR-code scanner and generator of Kaidan now uses Prison, KDE's standard QR-Code library (Jonah Brüchert and Melvin Keskin. Link)
Calculator A feature rich calculator
The history feature was fixed. (François Guerraz, 24.12.2. Link)
Okular View and annotate documents
We fixed Okular freezing when opening a PDF file with a lot of entries in a choice field. (Albert Astals Cid, 25.04.0. Link)
Barcode Scanner Scan and create QR-Codes
Qrca gained a mode to only scan for Wifi QR-codes. Currently this can be triggered with the --wifi
flag, but in the future this will be triggered directly from Plasma Network Management to scan for Wifi codes. Additionally when scaning the QR-code for an existing connection, instead of creating a new connection, Qrca will update the credentials of the existing connection. (Kai Uwe Broulik. Link)
We removed the option to share a QR-code and replace it with a button to copy the QR-code. (Jonah Brüchert. Link)
Tokodon Browse the Fediverse
We added a menu item under the "Filters" timeline action to configure filters. (Joshua Goins, 25.04.0. Link)

We improved the look of filtered posts significantly. (Joshua Goins, 25.04.0. Link 1)

Tags and polls are hidden when the post has a content notice. (Joshua Goins, 25.04.0. Link 1 and link 2)
As part of more trust and safety improvements, we added a button to mute a conversation, so that you don't get any notifications for conversations you are not interested too. (Joshua Goins, 25.04.0. Link)
We fixed voting in polls that was not working reliably. (Joshua Goins, 25.04.0. Link) and improved Tokodon when using a screen reader. (Joshua Goins, 25.04.0. Link)
Third Party Apps
BlueJay
Evan Maddock released the 1.0.0 and 1.0.1 of BlueJay. BlueJay is a Bluetooth manager written in Qt with Kirigami.

…And Everything Else
This blog only covers the tip of the iceberg! If you’re hungry for more, check out Nate's blog about Plasma and be sure not to miss his This Week in Plasma series, where every Saturday he covers all the work being put into KDE's Plasma desktop environment.
For a complete overview of what's going on, visit KDE's Planet, where you can find all KDE news unfiltered directly from our contributors.
Get Involved
The KDE organization has become important in the world, and your time and contributions have helped us get there. As we grow, we're going to need your support for KDE to become sustainable.
You can help KDE by becoming an active community member and getting involved. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine! You don’t have to be a programmer either. There are many things you can do: you can help hunt and confirm bugs, even maybe solve them; contribute designs for wallpapers, web pages, icons and app interfaces; translate messages and menu items into your own language; promote KDE in your local community; and a ton more things.
You can also help us by donating. Any monetary contribution, however small, will help us cover operational costs, salaries, travel expenses for contributors and in general just keep KDE bringing Free Software to the world.
To get your application mentioned here, please ping us in invent or in Matrix.
Sunday, 26 January 2025
I have an Android phone. The phone is 5 years old, functions perfectly for me, and is now E-Waste.
I can tell by the pictures on the phone that I bought it just after conf.kde.in in 2020 because it’s full of pictures of my visit to Colombia (where I met Maui Toolkit developer Camilo). It’s a Motorola G7 Power. It came with Android 9. It was updated to Android 10. It’s been a fine phone for 5 years, the battery life is still measured in days, it makes calls and does Matrix and Mastodon and whatnot. I personally have no reason to replace it at all.
I do have a banking app on it, which is now telling me that I need Android 11 to keep using the banking app. I presume the bank has a good reason for requiring the newer version. There’s no question of “just don’t use the app” since, well, Dutch banks are nearly inaccessible except via their phone app.
Motorola has a lousy record of providing Android updates for its phones, if I recall, and so the phone is now E-Waste.
Exactly the same thing happened with my mom’s phone. Slightly newer, no updates, E-Waste. The only upside I can think of here is that postmarketOS has two more devices for testing available (there are instructions for the G7 Power which are just as inscrutible as how-to-configure-XOrg instructions used to be in the ’90s. Assuming non-zero energy and some pent-up annoyance in the future, I can improve on that situation.
Project Description
In SoK 2025, I will be working on adding Pallanguzhi, a traditional Indian Mancala variant, into the Mankala Engine. Collaborating with Srisharan V S, my focus includes two key goals:
- Developing a computerized opponent to enhance player engagement and ensure a seamless gameplay experience.
- Creating a Text-Based User Interface (TUI) for gameplay.
What I Did This Week
The first step in my journey was setting up the Mankala Engine repository. I forked the repository to my local system, successfully built it, and resolved some warnings during the build process. Afterward, I delved into the codebase, analyzing the existing algorithms and understanding how they work for other Mancala variants.
Research on Implementing a Computerized Opponent
To create a robust computerized opponent for Pallanguzhi, I began researching potential algorithms that could best fit the game mechanics. Here are the three techniques I explored.
1. Reinforcement Learning
Reinforcement Learning (RL) is an exciting approach where an agent learns optimal strategies by interacting with the environment and improving over time. For Pallanguzhi, RL could enable the computerized opponent to adapt and improve its gameplay dynamically. However, as I am new to RL, implementing and training models for this variant will take some time and effort. Despite its challenges, RL remains a promising option for advanced gameplay enhancement.
2. Monte Carlo Tree Search (MCTS)
MCTS is a powerful algorithm widely used for decision-making in games. It works by simulating potential moves to build a decision tree and then selecting the best move based on statistical evaluation. For Pallanguzhi, MCTS could efficiently explore the vast game state space and make informed decisions. By carefully tuning the number of simulations and exploration parameters, this algorithm can provide a balanced and competitive computerized opponent.
3. Alpha-Beta Pruning with Iterative Deepening
Alpha-Beta Pruning with Iterative Deepening is a highly effective technique for optimizing decision trees by eliminating unnecessary branches. This method is already implemented in the Mancala Engine for other variants and has proven its efficiency. Leveraging this existing implementation for Pallanguzhi will allow us to quickly develop a working version of the game with a competent computerized opponent.
Conclusion for Now
The immediate plan is to integrate the Pallanguzhi variant into the existing Alpha-Beta Pruning implementation. This ensures we have a functional version of the game ready for any further work. Once the TUI implementation is complete, I plan to revisit Reinforcement Learning for Pallanguzhi. Working with RL models and training them is a learning-intensive process, and I am excited to gain experience in this area. Even if RL proves too challenging, we will still have a polished Pallanguzhi variant running on the existing algorithm.
What’s Next
Next week, I will work on adding the longer version of Pallanguzhi, which consists of multiple rounds, while Srisharan V S focuses on completing the shorter version. Together, we aim to make significant progress toward integrating and refining this traditional game within the Mankala Engine.
Stay tuned for updates!
Saturday, 25 January 2025
The M is silent. In computing this stands for the underlined letters in menus that can be triggered using an Alt+Letter key combination, one that you can remember and apply later to navigate around more quickly.

Qt and other toolkits typically use an ampersand to denote a mnemonic when assigning a menu entry. For instance, “&Shutdown” will be displayed as “Shutdown” and trigger on Alt+S whereas “Slee&p” will be “Sleep” and trigger on Alt+P. Of course this isn’t limited to menus, pretty much any control, buttons and what not, can have mnemonics. Since they are part of the label, a translated string can and likely will have a different one.
KDE applications, both written in Qt Widgets and Qt Quick, automatically assign mnemonics for most controls that don’t have one explicitly set. This is done through KAcceleratorManager and Kirigami’s MnemonicData, respectively, using a set of rules based on the control’s type. For example, a toolbar button is less important than a regular button or check box but both are more important than a section label. It also tries to use the first letter of a word, if that letter is not already taken. If a control is hidden the shortcut is removed again. The end result in a German dialog is “&Abbrechen” (Cancel), “&OK”, and “A&nwenden“ (Apply, since the A was already taken) for its footer.
While our Qt Quick Controls 2 Desktop Style automatically assigned mnemonics for all of its controls, Plasma Components did not for CheckBoxes, Switches, and some others. That is now fixed and it’s now possible to use e.g. Alt+R to Raise maximum volume in the Volume applet or switch to the Applications tab using Alt+A. Likewise for the circular action button used on the lock and logout screens, you can now Alt+P to Sleep from the logout and lock screens! The “S” is taken for shutdown for consistency and unused on the lock screen.

I noticed that I couldn’t trigger the toolbar buttons in System Settings even though they clearly showed an underlined letter. Turns out the shortcut was registered twice for some reason! If this happens, neither action is executed and instead the “activated ambiguously” signal is emitted. Kirigami’s ActionToolBar is effectively two views: the regular strip of buttons and an overflow menu. The buttons are shown dynamically based on how much room there is available and the action’s priority. There was a bug in Kirigami’s mnemonic handler where hiding a control wouldn’t release its shortcut, effectively registering every toolbar shortcut twice.
Speaking of Kirigami, there’s a FormLayout similar to QFormLayout that we use for most of our settings pages. It has a label on the left, and control on the right. By default, the label generates a mnemonic to focus its buddy. However, we don’t just want to focus the control, we want to trigger it as if we had clicked it. Qt 6.8 introduced an animateClick method on buttons that briefly flashes the button as a reminder of what’s about to happen and then triggers it. For controls without this features, focus is set as before, albeit with ShortcutFocusReason to tell the control that it was focused as a result of a shortcut press. A ComboBox for instance reacts differently depending on how it got activated. I then also made sure no mnemonic is assigned to the label next to a control when the control itself already had one.

With those improvements done, I tested various Qt Quick applications and settings modules for their mnemonics. The “Display & Monitor” settings barely had any working ones. The thing is: FormLayout’s labels by default are attached to the Item to which the label was added. In case of KScreen, we often used a RowLayout to place a control an a “contextual help button” (the little (i) button with more information) next to it. Since RowLayout isn’t an interactive item, no mnemonic was assigned for the given row. Luckily, you can explicitly set buddyFor and tell it what the relevant control is. Doing that I made most of KScreen’s settings reachable by Alt key combinations. While at it, I explicitly set the letter H for the HDR check box.
Now that you’ve seen me improve our mnemonic machinery, what can you do to make an application more accessible this way? Press and hold Alt, see what shortcuts get assigned, try triggering the underlined letter using Alt+letter:
- If there’s a FormLayout and the control isn’t reachable, check that there’s a proper buddyFor set.
- For obvious abbreviation and words, consider to set a mnemonic explicitly so the letter used is consistent and predictable, like the “Enable &HDR” in Display settings
- For custom controls not based on Qt Quick Controls, you can use Kirigami.MnemonicData to register your control with our Mnemonic infrastructure and assign the shortcut it generated to a Shortcut item.
- Consider disabling mnemonics using Kirigami.MnemonicData.enabled where it doesn’t make much sense to have them. e.g. controls in lists. Each one would just get a subsequent letter in its word assigned, reducing the pool of available letters for the important ones
- If a control doesn’t show an underlined letter, try Alt+first letter in the label. Maybe it has one that doesn’t show up for a reason?
- Finally: Report or fix bugs you find!
Grab your favorite drink and join us for the first Kdenlive Café of the year! Come hangout with the developer team, share your ideas and feedback, get some scoops on what’s brewing for future releases and connect with fellow editors. Join the community!
📅 Tuesday, January 28th, at 8 PM (UTC)
What I am working on?
My project focuses on enhancing the GUI and adding Player vs. Player (PvP) multiplayer functionality to a Mancala game.
Mancala is a popular board game played worldwide. The proposed plan is to use Kirigami for improving the GUI and making the application cross-platform. Multiplayer functionality will be integrated using XMPP. The game will operate over a communication channel established by XMPP over UDP. The updated game board will be reflected graphically using data binding. The XMPP server being used is Prosody.
Work done so far
Setting up the prosody locally
Setting up Prosody is fairly straightforward. I installed it from Fedora’s official repository using the command:
sudo dnf install prosody
Alternatively, Prosody can be built and installed from its source code available on GitHub.
Configuring prosody
Prosody’s configuration is contained in a single file: prosody.cfg.lua
. On Linux distributions, this file is typically located at /etc/prosody/prosody.cfg.lua.
.
For now the clients are connected over same LAN using the virtual host @mancala.local
as the domain id.
The image above illustrates how to edit your virtual host configuration.
The next step is to configure a chat room, which is done similarly to the virtual host configuration.
Both configurations require an SSL certificate to secure the communication channel.
After completing these steps, we restart and check the status of Prosody using the following commands:
sudo systemctl restart prosody
sudo systemctl status prosody
If everything is configured correctly, the state will be “active.” You can verify this by checking the log file using: sudo tail -f /var/log/prosody/prosody.log
we can check the log file. If configured successfully, the output will resemble this:
Adding users and communicating via a XMPP client
The plan is to allow users to either use their existing Jabber ID or create a new one through our server. For testing purposes, I manually added users to the server using the following command:
sudo prosodyctl adduser <username@domain_name>
After executing the command, you will be prompted to set a password for the user.
For communication, I used the Pidgin client.
As shown in the image above, I have added two users, user11
and user12
.
To test communication, I sent a message from user11
to user12
by addressing it to user12@mancala.local
. Below are the results:
Since I used the Pidgin client on the same device, both user tabs appear in the interface. The screenshots confirm that I successfully established a user-to-user communication channel over LAN.
What’s next
For the next week, I plan to:
- Implement in-band registration.
- Enable communication over the internet.
- Develop the logic for the game invitation system.