• Pl chevron_right

      Philipp Sauberzweig: Fellowship Update, 2026-11-06

      news.movim.eu / PlanetGnome • 16:22 • 1 minute

    It’s been a few weeks since my last blog post about my work on GNOME Design and Community Management as part of my Sovereign Tech Fellowship. As usual, I want to share some of the most interesting developments.

    Passkey Portal

    Passkeys are an easy and safe way to sign in, and can replace passwords. They’re tied to the website that issued them, so they can’t be phished. Hackers can’t steal them from a website because its servers don’t store your private key. You can learn more about passkeys and how they work at whatarepasskeys.info.

    People have been working to bring passkey support to Linux for several years, and we’re getting closer to making it available to users. Just today, the experimental credentials portal was merged into xdg-desktop-portal. To support its implementation in GNOME, I’ve spent a lot of time researching and refining the design of the credentials portal. Below is an excerpt from the credentials portal mockup. Take a look at the full mockup in the OS mockups repository for all the user interaction flows.

    Detail of the credentials portal mockup showing the passkey creationSome details of the credentials portal mockup showing the passkey creation

    Libadwaita

    In my last blog post, I wrote about standardizing scale rows in libadwaita and mentioned that ActionRow would likely get a generic bottom child widget to support the change. This has now landed as the ActionRow:body property, and the calendar app Era already uses it to implement its participants row.

    Screenshot of Era with a participants row based using the new ActionRow:body propertyScreenshot of the calendar app Era with a participants row based using the new ActionRow:body property

    The new scale style has also already landed in the upcoming libadwaita version.

    Screenshot of the new scale style with pill shaped knobScreenshot of the new scale style with pill shaped knob

    Other

    If you’ve read this blog before, you may have noticed that the font has changed. Inter has been installed on GNOME’s WordPress instance, so community members can now use it on their personal GNOME blogs to keep their typography consistent with GNOME’s web standards.

    As usual, I’ve reviewed design changes across various projects and answered questions on Matrix and in issue threads. GNOME Circle reviews are also progressing well, and I’ll write more about them as the changes land.

    Thanks for reading! Feel free to leave a comment on this blog or reach out to me on Mastodon or Matrix.

    • Pl chevron_right

      Daniel García Moreno: I Know Kung Fu

      news.movim.eu / PlanetGnome • 2 days ago • 5 minutes

    i-know-kungfu.jpg

    In the first "The Matrix" movie we have the famous scene of Neo just connected to the computer and opening his eyes and saying "I know kung fu". Something that was really cool in early 2000 sounds like a dystopia to me nowadays.

    I don't want to "know kung fu", I want to practice Kung Fu! So I prefer "The Karate Kid" way:

    First learn stand, then learn fly. Nature rule, Daniel-san, not mine.

    And talking about movies, there are a lot of movies that shows the Hero's journey structure. And it's not relevant if Daniel-san win the last fight or if Rocky defeats Apollo, because the important part of the story is the journey, is the hero starting the adventure and how the path changes him.

    And this exact principle applies to everything in live, everyone knows that shortcuts doesn't have value. You can win, you can be faster, stronger, bigger, but you are missing the point, you are missing that "journey before destination" is always true for any Radiant Knight.

    In The Matrix the hero's journey is not related to the Kung Fu, and that was just some cool way of introducing the action, the learning is in a different path because in other case we won't have any movie.

    Neo doesn't care about Kung Fu, it's just something nice to fight the Agent Smith (What an irony). Daniel-san want's to learn to fight to defend himself, but at the end, fighting is not important, at the end he actually learns karate, and that changes him, and Miyagi and Daniel care about karate.

    Gen AI "externalizes" the journey, and it's very tempting to take the shortcut and go directly to get the trophy. But doing that we are removing all the value from the output, we are not learning, we are not doing the journey and we don't change at the end, so actually, using Gen AI is like a waste of time.

    No one cares... About something

    I've been thinking lately about why people uses AI, because even with all the advertisement and pressure I sincerely do not see any value in using gen AI, I don't need this technology and the only outcome that I'm seeing today is that's destroying everything that I loved or cared about.

    But going to the point, if there are so many people using and promoting this, maybe they see some value and thinking about it and just talking with different kind of people I'm starting to see a trend. Most of the people are okay with the usage of AI for anything that they don't care, and of course, they are against the usage in anything that they consider important, everything where they see value.

    Designers will say that the AI is generating aberrant images, and stealing the work of others, ignoring copyright and attribution and depreciating the quality, but they will be okay to use it to generate text, translate, write code, etc.

    Writers will say that any text generated with AI is poorly written, but they won't see any problem in using a gen AI image for their blog post.

    Musicians will be disgusted by the AI generated music, but maybe they don't see any problem playing a vibe-coded video game.

    Programmers...

    Okay, maybe not everyone follows this pattern, or maybe that's exactly what's happening. Maybe some devs don't care about coding but care about reviewing, others don't care about testing but care about coding, and others don't care at all and vibe-code everything.

    I don't see any value in any gen AI usage because I usually care about the output, but also about the process, and the how and why is, most of the times, more relevant than the final outcome.

    That's why I try to use only free software, and I'm not using Windows or Mac, that's why sometimes I choose to use a tool just because it's written in python and not in java.

    So to me, the quality of code is not more important than the license, it's not more important than technology used, and of course it's not more important than who and why.

    Because I care... And you should care too!

    I've a "Software Engineer" university degree. But the final paper has no value. What's important to me at the end is that I started that career because my brother introduces me to debian and free software in the 90's. What's important is my relation with peers, professors, my activity in the local Linux User Group, days studying, the failure and the success after understanding interesting math... I don't need an AI generated title, and I don't want people with the "Software Engineer" title, I just want more people to have the opportunity to experience the same growth path, the journey.

    What's the value of music? It's just something to listen when you are working, to hide the sound of life that surround you? Anyone that had listen any musician in live sees the value, the difference. It doesn't matter that you can make "better" music and record and play without any mistake, but we value the live performance, because the music is not the important part, the important part is the musician and the listener, the communication. And it's not the same if you listen the exact same song from someone that just lost his father.

    What's my job? It's just the code that I write? To me it's clear that's not, and shouldn't be. My job is to create software, I don't care if a gen AI can do that, other people can do that before I started to be able to do it, and I'm not asking others to do it for me.

    Of course, not caring about something is natural, no one is interested in all the human activity and just delegate some parts to continue working on what's important to them. But after thinking about it, I can't just ignore it.

    Now, when I need an image, that I don't care enough to create myself, I will care just a little to find someone who actually care and delegate to him instead to a big corp AI. When I need some text to read, I will look for someone who actually cares about the text. And, of course, when I need any software or application , that I don't care enough to create myself, I will look for some developer that actually care about the code and for sure I won't ask any gen AI.

    • Pl chevron_right

      GIMP: GIMP 3.2.8 Released

      news.movim.eu / PlanetGnome • 4 days ago • 9 minutes

    We’re glad to announce the release of GIMP 3.2.8! This new stable release contains a number of bugfixes and security updates from new and long-time contributors.

    This news posts provides an overview of the changes since GIMP 3.2.6. For a more detailed review, check out the NEWS changelog.

    Wilber-o'-Lantern Wilber-o’-Lantern, CC BY-SA 4.0, October 31st, 2026

    General Updates and UX Improvements⁠

    The Add Border filter now allows you to create semi-transparent borders based on the color you choose in the filter.

    Jehan fixed a bug introduced in GIMP 3.2.6 when we added better support for cutting/copying from layer groups. Non-rectangular selections on layers within a layer group will now be copied over correctly.

    Bruno Lopes corrected an issue where the cursor coordinates did not always update in the status bar when changing between different applications.

    denzjos helped us identify a bug with the Levels tool where picking input levels with the Color Picker tool would report incorrect values when working with non-destructive filters. Jehan then developed a fix for it.

    Harsh Verma has implemented a new GUI testing suite in GIMP so we can better check for regressions in the GUI during development. He is preparing a news post that will go over this in more detail, which we will share soon!

    Jehan improved our font-loading code so that it can be cancelled early (for instance, when quitting GIMP while the fonts are still loading). This should speed up our shut-down times.

    Bruno Lopes made improvements to some dialogs so they appear on the correct screen for users with multiple monitors. In addition, the Dot to Dot setting now works again. It was reporting wrong pixel density since GIMP 3.0.

    Jacob Boerema backported some fixes for the Metadata Editor and Viewer feature, as part of his larger work in the development branch.

    Alx Sa and Bruno Lopes added more definitions to our theme file so that GIMP looks the same on each platform.

    Highlighting New Contributor’s Work⁠

    All contributions to GIMP from the community are valued! We want to highlight work from some of the newer contributors here.

    Infinity made several improvements to our text tool for this release! In particular, they improved text cursor movement when editing Right-to-Left languages and mitigated issues when editing text with negative kerning.
    As a side effect of this bug fix, we actually get much better support of RTL text as well as of mix of LTR and RTL texts. The on-canvas dialog now has two new icons for text directions, and the tool automatically detects your base text direction, as defined by rule P2 of the Unicode Bidirectional Algorithm, unless you manually override by clicking one of the buttons.

    Showcasing improved support for RTL text - GIMP 3.2.8

    Aruius improved our color picking display GUIs, so you see more minor changes in colors when editing.

    Chiem Whua Ma helped resolve an issue on Windows where the UI would appear to freeze when moving the canvas after opening multiple images at once. They also fixed a bug where vector layers would be offset incorrect after the canvas was resized.

    Manu Cornet has focused on several performance fixes for GIMP. For this release, they improved caching when drawing gradients larger than 6000 x 6000 pixels. They also made the “marching ants” display for selections run more efficiently. Additionally, they improved how channels are displayed in the Channel dock when a dark theme is set. Finally they sped up the display time for the Preferences dialog.

    balooii made several fixes as well. For instance, they updated our external copy and paste code to also pass along the DPI settings for the image; this means that other software can properly rescale what you paste if they have a different setting that what you used in GIMP. They also made our Debug dialog themeable and translatable (though we hope you don’t get the opportunity to see their work in this area!)

    MrYoranimo fixed an oversight in our raw data import plug-in, where images were not loaded as binary data on Windows. This is a bit technical, but it meant that some raw data might not be interpreted correctly. Their fix ensures that the data is loaded consistently on Windows as it has been on other platforms.

    Dimitriy Ryazantcev has continued their work on Windows icon and animated cursors. In this release, they have updated our loading code to match how Windows orders and groups icons in the file.

    abderraouf updated our HEIF loading code to allow for loading larger images.

    Chomu updated our menu code to allow plug-in and script developers to add submenus in named menu sections. For instance the following code will add a submenu Custom/ below other Paste as actions and your new plug-in action in it:

    gimp_procedure_add_menu_path (procedure, "<Image>/File/[Paste as]/Custom");
    

    Also gimp_plug_in_add_menu_branch() has been deprecated (though it was already not working properly anyway so we expect nobody was using it).

    System-specific Updates⁠

    Bruno Lopes continues their work to improve GIMP’s integration on different platforms. To name a few updates:

    • On macOS 27+, title bars are displayed with background colors again. Icons on the menu bar should also appear accordingly. Since the release of Golden Gate, these were being rendered transparently due to breaking changes on the macOS side.

    • On macOS 14+, we now use the ScreenCaptureKit API for taking screenshots.

    • On Intel-based macOS, GIMP should run without warnings from GateKeeper thanks to us now consistently notarizing Python.

    • We now display a 1/0 value for switches on macOS based on the “Differentiate without color” setting.

    • Transparency is retained when copying an image from certain apps to GIMP, instead of it showing as black.

    • The longstanding “Blank UI” bug that happened on startup for certain macOS computers should be finally fixed!

    • Print Preview (aka Image Settings tab) should now work with the Windows 11 Unified Print Dialog on that platform. In addition, Page Setup should now use the correct printer, not just the default one on Windows.

    • On Windows, “Merged title bar” settings now play nicer with system features such as minimizing from the task bar and title bar shadowing effets.

    • The Screenshot feature now works better on HDR displays on Windows.

    • AppImage compatibility was improved to support installing Python Wheels from pip like Flatpak and Snap. Note, however, that our minimum version for 3.2 continues to be a distro released after Debian 13 (Trixie).

    Security Updates⁠

    As many free and open source software projects can attest, we have continued to receive a large quantity of security reports due to recent advances in software scanning and testing programs. Jacob Boerema and Alx Sa along with new contributors Mike Gorse, Dirk Müller, and Alynx Zhou have proactively responded to and patched these reported issues when applicable.

    We take security seriously, but this is not quite as scary as it first sounds. There are no personal accounts or banking information to exploit since we of course don’t access or store that information! The most common report that we get is our older image plug-ins and legacy filters are too trusting of the image size information provided by the image file, and if you intentionally alter this information, you could cause the plug-in (not GIMP itself) to crash.

    Around GIMP⁠

    Documentation for resource makers⁠

    Bruno Lopes wrote two new tutorials on developer.gimp.org:

    These articles should help plug-in and script developers who want to make their plug-ins translatable, either by themselves or by members of the community. This will be especially helpful as we make progress on creating an built-in Extension repo for easily downloading and installing plug-ins, filters, and more. (More information on that coming soon!)

    New Mirrors⁠

    Randhost, in Portugal, and ZEROLAG, in Romania, have graciously offered to serve mirrors for GIMP downloads.

    Mirrors help GIMP be available for download at high speeds wherever you are in the world.

    Does your organization wish to be one of our official mirror sponsors? Create a request to become an official mirror!

    Release Stats⁠

    Since GIMP 3.2.6, in the main GIMP repository:

    • 82 reports were closed as FIXED.
    • 46 merge requests were merged.
    • 300 commits were pushed.
    • 11 translations were updated: Chinese (China), Dutch, Georgian, Kazakh, Lithuanian, Norwegian Bokmål, Norwegian Nynorsk, Slovenian, Swedish, Turkish, Ukrainian.

    27 people contributed changes or fixes to GIMP 3.2.8 codebase (order is determined by number of commits; some people are in several groups):

    • 10 developers to core code: Bruno Lopes, Jehan, Alx Sa, Harsh Verma, Manu Cornet, Chiem Whua Ma, balooii balooii, infinity, Chomu, aruius.
    • 11 developers to plug-ins or modules: Alx Sa, Bruno Lopes, Jacob Boerema, Dimitriy Ryazantcev, Alynx Zhou, Dirk Müller, Harsh Verma, Jehan, Mike Gorse, MrYoranimo, phoinix.
    • 11 translators: Anders Jonsson, Dick Groskamp, Kolbjørn Stuestøl, Martin, luming zh, Aurimas Aurimas Černius, Baurzhan Muftakhidinov, Ekaterine Papava, Kjartan Maraas, Yuri Chornoivan, Emin Tufan Çetin.
    • 1 theme designers: Alx Sa.
    • 4 build, packaging or CI contributors: Bruno Lopes, Jehan, Harsh Verma, Alx Sa.
    • 2 contributors on other types of resources: Jehan, Bruno Lopes.

    Contributions on other repositories in the GIMPverse (order is determined by number of commits):

    • The gimp-test-images (unit testing repository) repository had 2 commits by 1 contributors: Jacob Boerema.
    • The flatpak release had 12 commits by 2 contributors: Bruno Lopes, Jehan.
    • Our main website (what you are reading right now) had 65 commits by 3 contributors: Bruno Lopes, Jehan, Alx Sa.
    • Our developer website had 56 commits by 5 contributors: Bruno Lopes, Jehan, Harsh Verma, Alx Sa, Denis Rangelov.
    • Our 3.0 documentation had 197 commits by 8 contributors: Jacob Boerema, Dick Groskamp, Kolbjørn Stuestøl, Anders Jonsson, Marco Ciampa, Jehan, Balázs Úr, Yuri Chornoivan.

    Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

    Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

    Downloading GIMP 3.2.8⁠

    You will find all our official builds on GIMP official website (gimp.org):

    • Linux AppImages for x86 and ARM (64-bit)
    • Linux Flatpaks for x86 and ARM (64-bit)
    • Linux Snaps for x86 and ARM (64-bit)
    • Universal Windows installer for x86 and ARM (64-bit)
    • Microsoft Store for x86 and ARM (64-bit)
    • macOS DMG packages for Intel/x86 and Apple/ARM hardware (64-bit)

    Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc).

    What’s Next⁠

    While we’ve been making periodic updates to the stable GIMP 3.2 branch, we’ve also been hard at work on developing the next version of GIMP. There’s a lot of cool things in progress, and we look forward to sharing more about that with you all soon!

    Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger!

    • Pl chevron_right

      This Week in GNOME: #272 Shiny Icons

      news.movim.eu / PlanetGnome • 6 days ago • 9 minutes

    Update on what happened across the GNOME project in the week from October 23 to October 30.

    GNOME Fellowship

    Sophie (she/her) says

    GNOME RFC Process, many fixes in glycin, CMYK images in Loupe, and more: Learn about my work in October as part of the GNOME Fellowship.

    GNOME Core Apps and Libraries

    Files ↗

    Providing a simple and integrated way of managing your files and browsing your file system.

    Peter Eisenmann announces

    Many MRs have landed in Files since the 51.1 release! Here are some highlights:

    • Jakub Steiner made some ✨shiny✨ new placeholder icons
    • Khalid Abu Shawarib removed blocking I/O, so Files feels snappier
    • Khalid also added more file operation tests and fixed issues an automated audit turned up
    • Sivaprasad Murali brought operation error messages in line with the HIG
    • Corey Berla fixed a security issue with emptying the trash on removable devices
    • Jordan Petridis set up automated testing on GNOME OS in GitLab CI
    • “Programejt” made sure overly long content text in the properties dialog doesn’t get ellipsized
    • Peter Eisenmann taught the “Open With” app search to also match executable names

    qEjlOTVdzwSlTsvTwQBoTJoU_image.PiRgMKjS_Z16KF0P.webp

    Software ↗

    Lets you install and update applications and system extensions.

    Philip Withnall says

    Thanks to sysprof profiling by Jeff Fortin and code review by Georges, gnome-software has had some nice speedups in icon loading and downloading this week, which should make icons show up a lot faster in app listings, and reduce bandwidth and disk usage. See https://gitlab.gnome.org/GNOME/gnome-software/-/merge_requests/2466

    Calendar ↗

    A simple calendar application.

    Georges Stavracas (feaneron) announces

    GNOME Calendar continues to evolve with a few user facing and accessibility improvements in the past week. Thank you to everyone who submitted patches that landed this week, and everyone who reviewed and gave feedback on them!

    Folding Search Results

    Previously, searching in Calendar showed all instances of matching recurring events. Last week, we managed to merge a long-awaited patch that improves this behaviour by folding all instances of a matching recurring event into a single row! This makes searching for events cleaner and easier to parse, as the results are no longer flooded with irrelevant duplicates.

    See !808, by John Cardullo; reviewed by Niklas Wimmer, Alen Galinec, Zelda Ahmed, and Georges Stavracas

    Focus Selected Date First

    Continuing the long effort to make GNOME Calendar more keyboard accessible, we landed a small tweak that improves the behaviour when tabbing into the sidebar’s and event editor’s date chooser grid. Instead of focusing the first cell in the grid, focus is now properly moved to the currently selected date’s cell. This matches the expected behavior when tabbing into other grids or lists, to first focus the currently selected item.

    See !869, by Hari Rana; reviewed by Niklas Wimmer

    Improved Screen Reader Output

    To make Calendar more accessible, grid cells in the month view and date chooser will announce the month and day of the cell when focused. Previously, these cells only announced the day of the month, which made it very difficult for users to identify which month they were currently in!

    See !886 and !887, by Arak; reviewed by Hari Rana and Niklas Wimmer

    GLib ↗

    The low-level core library that forms the basis for projects such as GTK and GNOME.

    Philip Withnall announces

    Support for XDG intents has landed in GLib, thanks to work by Ignacy Kuchciński (based on implementation work by Sebastian Wick and spec work by many others). This is the groundwork for allowing apps to register themselves as supporting opening commands in a terminal, or handling certain URI schemes. Work is ongoing to implement these specific intents. See the specification and the implementation in GLib.

    GNOME Circle Apps and Libraries

    Alexander Vanhee reports

    Bazaar has hit half a million downloads on Flathub! To celebrate, I’ve fixed our most upvoted issue: the Bazaar Flatpak can now install apps from user remotes. Try it today with the beta on the GNOME Nightly remote, and report any issues you may face, especially on that niche distro only you and your grandma use.

    Third Party Projects

    Mark announces

    GitY 2026.7 is now out! No longer is GitY simply a git repository viewer you can now manage your repositories directly. Many features have been added this year to make it a modern version of GitG. The most recent changes include:

    • Add tags and branches
    • Remove tags, branches, and stashes
    • Commit diffs show images being added, changed, or removed (if you’re curious on the technical details it uses glycin)
    • Search branches, tags, and stashes with CTRL-SHIFT-F
    • Live repository refresh is now available as an option (default off)
    • Can turn off the summary of lines changed per diff

    Download from Flahub: https://flathub.org/en/apps/com.markdeepwell.GitY

    PMNVSYdAwZuxVizapUnpXhMl_GitYimagesadded.C2GGMkWt_Z1TkSwb.webp

    BdxXJTeyAdPjkdqHlwqOPEXQ_GitYlinux.J5bIJkRR_ZoYAA4.webp

    Nathan Perlman reports

    Rewaita got an update to v1.1.8 this week! This update was mostly focused on adding new features and filling in some of the odd blanks in the theming.

    What’s new?

    • Added gtksourceview theme support (the editor part Gedit and Builder)
    • Finally added hot reloading for GTK4
    • Fixed Firefox 157.0 theming issues
    • Moved user guide to Github wiki
    • Unrelated to GNOME but Rewaita now has Cinnamon desktop support

    Hope you all enjoy! Give Rewaita a try if you haven’t, once you get sucked in you’ll never want to go back. And if do you like it make sure to leave a star on Github. Installs are available of Flathub and the AUR.

    qMzewKRQXhxTTyFWoRYclISA_TWIG-Screenshot.BxK63YpA_Gtz5l.webp

    Rat Cornu reports

    Ratic got a new version 0.4.5 this week!

    This is not a big update, but it greatly improve performances: it is now instantaneous to reload the datas already cached during previous launches. Furthermore, scrolling in the application no longer make it lag, and the image cache size can been limited to control RAM consumption.

    You can check the new version on Flathub, on the repo, or even come discuss with us on our matrix room!

    Thanks again for all the people that contribute to the localization on weblate!

    Anton Isaiev reports

    RustConn 0.24 is out - a connection manager for SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Web and Zero Trust, built with GTK4 and Libadwaita.

    Since 0.23:

    • Faster SSH connects (no process spawns on the UI thread) and a Bitwarden performance pass
    • “Set Up Key Authentication…” - generate or reuse an SSH key, install it, verify, switch over
    • Terminal .rsc scripting + OSC 52 remote clipboard
    • RDP clipboard direction control, QUIC proxy preset, richer MobaXterm import/export
    • Embedded browser in the Snap (now on core26)
    • Loopback-only tunnels and stdin-fed Bitwarden secrets

    Thanks to Christian Petri, Naim Shafiev and all the contributors and translators who drove this cycle. And thanks to everyone who files bugs and supports the project - this cycle was driven largely by the issues you reported. If you’d like to support development, the repo has a Sponsor link.

    https://github.com/totoshko88/RustConn https://flathub.org/apps/io.github.totoshko88.RustConn https://snapcraft.io/rustconn/

    zNMeWjjgycgpHWMNeBBXFBqc_image.C3Vj3XZi_Z2piQF5.webp

    Daniel Elia announces

    Convey 51.0 has been released!

    Since 50.2-1 it has become a much more polished mail client; narrow windows and mobile layouts work better, notifications are clearer, with several showing at once, and spell-checking has proper dictionary support.

    • Subject shown above the conversation
    • Per-address signatures, with images
    • Drag to resize images in the composer
    • Unread filter in the search bar
    • Unsubscribe from mailing lists
    • Reply to List action
    • Local Starred folder for IMAP accounts
    • Folders in a sidebar on mobile

    I’m working on adding a “Favourites” section to the sidebar, so folders from any account can be shown at the top of the sidebar, and there’s still bugs to be fixed, all planned for 51.1

    Lastly, a big thank-you the community for getting so involved with the development of Convey, its first release to Flathub was a little over a month ago, and it’s seen much more adoption than I expected!

    Check it out on Flathub, and check out the repo here

    fvIvcUYbQPfsTROQuwzpyXyR_image.mMiOA5_W_Z1C2t7u.webp

    UapQLJffcMkynCPJpQJOFfhp_main-window.Bpv7wj-Q_Z2uIprs.webp

    Fractal ↗

    Matrix messaging app for GNOME written in Rust.

    Kévin Commaille reports

    Only a week went by since our previous security-related update, and several upstream dependencies released even more security fixes so we bundled them into Fractal 14.3 to make sure that everything keeps running smoothly until the next release!

    This version is available right now on Flathub.

    As usual, you can also help make sure the next major version is solid by using Fractal Nightly. Help on fixing our remaining bugs is of course always appreciated!

    Crosswords ↗

    A crossword puzzle game and creator.

    jrb announces

    GNOME Crosswords 0.3.19 is out! This version features a redesigned game layout, with smooth animations and a new bottom sheet for clues in mobile mode. In the editor, acrostics are now out of Beta, with a much faster generator and an easier grid-building workflow. Also new: rich text in puzzle metadata, synonyms in word lists, large print templates, and tons of bug fixes.

    A plea for help: We received an experimental merge request to build macOS bundles. As that’s outside my expertise, I’d love help testing the game and reviewing the changes. Please take a look or let me know if you can help.

    Get it on Flathub! (Editor)

    GNOME Websites

    Philipp Sauberzweig announces

    The Inter font has been installed on the GNOME WordPress instance. You can now use it on your personal GNOME blog to ensure consistency with GNOME’s web typography standards.

    Shell Extensions

    Tomáš Gažovič announces

    RSS Feed v10

    RSS Feed reached version 10, a jubilee release for the extension.

    The main new features:

    • Starred articles: kept in their own group, even after they drop out of the feed or the feed is removed
    • Configurable article actions: up to three hover buttons per article and separate actions for the left, middle and right mouse button: open, mark as read or unread, star, dismiss, mark older as read, copy link
    • Dismiss and restore: hide articles you do not want to see and bring them all back from the header menu
    • Article history: articles stay stored after they drop out of the feed, up to a per-feed limit

    Since the extension was ported to modern GNOME Shell earlier this year, it has passed 1000 downloads. Thank you to everyone who installed it, reported issues and sent feedback!

    Missing something in your RSS workflow? Share your idea in Feature Requests on GitHub Discussions, I read every one.

    Miscellaneous

    GNOME OS ↗

    The GNOME operating system, development and testing platform

    Ada Magicat reports

    It has been a busy week with tons of fixes and 2 new contributors! Welcome John Adams and Lars Ellinger. Check out what they worked on:

    • Lars added support for the LDAC codec to our pipewire builds. This will provide higher audio quality for bluetooth headsets that support it. !35267
    • John contributed 3 different fixes for Nvidia and snapd:
      • Adapting our firmware installation for the new 615 Nvidia driver. !5122
      • Making Nvidia graphics cards work inside snap applications. !5146
      • Fixed a regression with snapd’s apparmour profiles. !5123

    We haven’t been sitting still either:

    • Hari, Jonas and Valentin ironed out various issues with our zswap setup. !5090, !5101, !5118, !5135
      • While it used to be a nightly-only feature, we think it is now rebust enough for everyone, so we enabled zswap in OS Preview as well.
    • We now enable the extra-codecs feature by default. This was introduced earlier this year to expand codec support, but it required users to enable it manually. !5109
    • Jonas enabled speaker support on the Dell XPS 14 and other modern Intel laptops. !5119
    • Our installer now offers to erase the user’s drive before installation. !5112
    • Valentin backported a few CUPS patches to fix printing !5009, !5097
    • Minor documentation touchups by Hari, zyxhere, Jonas and Tobias !4994, !5056, !5092, !5105

    Events

    Evangelos “GeopJr” Paterakis 🏳️‍⚧️🏳️‍🌈 says

    Come visit us in FOSSCOMM, Athens!

    We will have a booth this weekend in the University of West Attica on 31st October and 1st November.

    There will be t-shirts, stickers and community members available to chat!

    https://2026.fosscomm.gr/

    That’s all for this week!

    See you next week, and be sure to stop by #thisweek:gnome.org with updates on your own projects!

    • Pl chevron_right

      Jussi Pakkanen: A slightly better ThreadPoolExecutor in Pystd through types

      news.movim.eu / PlanetGnome • 6 days ago • 2 minutes

    In the previous post we looked at a simple multithreaded task executor that behaves roughly like its Python standard library counterpart. The biggest missing feature was being able to return values from run tasks via future objects. In a fully dynamic language like Python this is fairly straightforward, whereas in a language with static typing, such as C++, things are trickier.

    The simplest solution is merely to make your Executor class a template, parameterized by the function you want to run. The obvious downside is code bloat. If your program has an Executor<Foo> and Executor<Bar>, all of their code is duplicated in the binary, even though 90% of it is probably the same. Also, due to the magic of template instantiation, compilation is slower. Another downside is that you can't run tasks that do different things, especially having different return value types, with one Executor.

    I set about trying to solve both of these issues at the same time. It turned out that if you are willing to tolerate just a little bit of OO and one extra malloc per task, one can get a fairly nice solution. As a task executor is used for things that run for a long time and consume a lot of resources, the overhead is insignificant for most use cases. And if it absolutely, positively matters to someone, they are going to roll their own anyway. Trying to cater to those use cases would be a waste of effort in any case.

    These requirements point to a fairly obvious solution. The executor deals with TypeErasedFuture/Promise types that store all the task metadata via good ol' void pointers and virtual functions. The concrete Future and Promise tasks are just type safe shims on top of them. The entire implementation required the use of only two reinterpret_casts, which is quite surprising. I would have expected more, but sometimes you get lucky, I guess.

    The Executor gets to remain a concrete class. The only template in it is the submit method that preserves the type erased task and returns a typed future object.

    executor_template.png

    Using this is not quite a simple as its Python counterpart, but still fairly easy. After you have written a class that implements the executor's task interface, submitting work and consuming the results is done like this.

    executor_submit.png

    If the return value had been something other than void, .get() would return a reference to the result object. The tradeoff between the ease of use provided by maximal templateism and minimal code generation is clearly visible in the extra boilerplate code you need to write to get things going. But in return you get both reduced binary size and faster compile times. Whether that is an improvement or a detriment is up to you.

    This code is not going to win any robustness prizes (though, in the modern day of AI garbage, you never know), but the end result is more than adequate for a single evening work. 

    • Pl chevron_right

      Matthew Garrett: Getting Google Cast on my Soundbar

      news.movim.eu / PlanetGnome • 30 October 2026 • 6 minutes

    I have a Samsung Q800A soundbar. It ships with built-in support for the Apple Airplay protocol, but I’m not really an Apple kind of guy so that’s never been particularly helpful for me. So, instead, I have a Chromecast Audio plugged into it via TOSLINK, and that works fine - except for the fact that there’s no way to explicitly pick TOSLINK as the audio input. Instead, there’s a “Digital In” option that refers to both the optical in and eARC input from a TV. Not inherently a problem, given I’m unlikely to be watching TV while listening to music, but my TV is a Samsung Frame, a device that’s intended to display art whenever someone is standing nearby, and which infuriatingly generates an eARC signal even if it’s only in art mode and isn’t going to make any noise. This switches the soundbar away from optical and I get sad. I could plug a video cast device into the HDMI port on the soundbar and cast audio to that, but then the art would get replaced with album covers whenever I’m playing music, and again that’s not quite the ambience I want. Still, none of this is that important.

    Until I learned that the Australian version of the soundbar does have Google Cast support. The firmware image was downloadable from Samsung support, so I grabbed that, but unfortunately found that it was encrypted. However, if I downloaded the firmware image for the US model, the encrypted blob was identical - there’s no difference in the underlying firmware between the two of them. So, how come one has support, and the other doesn’t?

    I’d need an unencrypted copy of the firmware to have a real chance of figuring this out, and the easiest way to get one was to just run an ebay watch for a broken model of the same series. Once I had one in my hands I used hot air to remove the eMMC storage from the device, cleaned up the chip, and then stuck it in one of these adapters to read it on a local system. Samsung uses a weird in-house filesystem called VDFS4 on some of their devices and this was one of them, so I needed to cobble together a kernel that was compatible with their source dump for this device (not all VDFS drivers seem to be able to read all VDFS filesystems), but eventually I had it all extracted, and then I got distracted by other stuff, so let’s fast forward to this week.

    Samsung makes use of a modified version of the Android Debug Bridge called sdb, which is included in the Tizen SDK. The firmware showed that this device had sdbd on it, and it would be executed if a network device called “huart0” was plugged in. Samsung does, thankfully, provide the source code for their GPLed components, so I could dig through that to discover that drivers/net/usb/usbnet.c had a bunch of references to huart (which apparently stands for “HyperUART”). If CONFIG_SAMSUNG_USBNET_HYPERUART_IFNAME is set, and if the ethernet device is using either the asix or ax88179_178a drivers, and if “/opt/etc/HyperUART_IP_Addr”1 isn’t just “0”, it sets the interface name to “huart0” and in turn triggers sdbd startup. So now I just needed to figure out how to set /opt/etc/HyperUART_IP_Addr to something else.

    Some digging revealed a binary called wap-factory that referenced the file, which then led to /usr/share/mobile-mgr/jsons/com.samsung.audio.waapp-verification-test.json which mentioned a “SetUartOnOff” call, which brought me here2, which led me into a bit of a rabbit hole about the Samsung WAM protocol. Long story short, you connect to either port 55001 or 56001 and make two requests over the same connection:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    GET /connect HTTP/1.1
    Host: 192.168.87.126:56001
    User-Agent: SamsungMultiroom/1.0
    Connection: interactive
    
    GET /UIC?cmd=%3Cname%3ESetUartOnOff%3C/name%3E%3Cp%20type%3D%22str%22%20name%3D%22uartOnOff%22%20val%3D%22on%22/%3E HTTP/1.1
    Host: 192.168.87.126:56001
    User-Agent: SamsungMultiroom/1.0
    Connection: interactive
    

    and then plug in an asix chipset ethernet adapter into the USB port (which on mine is micro-B, so I needed an OTG adapter), and suddenly it’s sitting there on 192.168.250.250 and will speak sdb to you. sdb root on switches it into root mode, and sdb shell now gives you a root shell. I was in, and now I could investigate what was happening.

    First up, there was a process called “com.samsung.audio.google-cast-control-app” running, which seemed like a good start. Unfortunately it wasn’t doing anything. After some tracing I found that it was making a call to Samsung at startup time, and getting back a response telling it that Cast support wasn’t available. The request (which was helpfully dumped to stdout when I ran this by hand) included the country code, in my case “US”. Repeating the request by hand with curl and changing the code to “AU” told me it was supported, so now I needed to figure out how to get the soundbar to believe it was Australian. Some digging showed it was reading this from a config variable called db/comss/countrycode, and running

    1
    
    buxton2ctl set-string system db/comss/countrycode AU
    

    got me past that gate. Now, however, it was complaining that it couldn’t provision a key. /usr/apps/com.samsung.audio.google-cast-control-app/shared/res included a bunch of encrypted blobs and an app called teeStoreKey.elf, and tracing com.samsung.audio.google-cast-control-app showed it was trying to call that, but it seemed like it was failing with a permissions issue. Running com.samsung.audio.google-cast-control-ap directly as root triggered key provisioning successfully, and a few seconds later the rest of the Cast API came up and I could talk to port 8443 with standard Cast API calls. Unfortunately it still wasn’t working as a Cast device, though - it wasn’t advertising itself via mDNS and so nothing could see it. Querying the /setup/eureka_info endpoint gave me a clue - the ’tos_accepted’ field was false. Normally this would be set as part of initial device setup, but the Samsung app wasn’t doing that because it didn’t think the device had Cast support. It turns out that POSTing some json with {“tos_accepted”: true} to setup/set_eureka_info made it work, and suddenly there was an additional Cast device available to me.

    (Update: I realised I didn’t mention anything about why it was doing key provisioning in the first place! The Cast protocol doesn’t enforce cryptographic identity as such, but Google’s reference client implementation which is what almost everything uses verifies that the device is presenting an identity that chains back to Google. Unsurprisingly they don’t want the private key material to be easily extractable and used to produce clone devices, so it’s all supposed to be encrypted and only accessible to some sort of trusted execution environment, which is why keys here need to be loaded into Trustzone and never be visible in the clear to the main OS)

    Mission accomplished. Unfortunately the device vanished from my Smartthings home aferwards, presumably because there’s a mismatch between its reported country code and my account country. To get around that I’d somehow need to get com.samsung.audio.google-cast-control-app to either change the query without changing the global device country, or to ignore the response from Samsung (it does this every 24 hours, ugh), and that’s made more annoying by the fact that this thing will only execute signed binaries. Although, weirdly, one of the signed binaries shipped is a full Python interpreter, so if I cared enough I could probably cobble together enough Python to execute arbitrary binaries. I currently don’t.

    More modern soundbars don’t implement the listener on port 55001 or 56001. I don’t know how you get sdb working on them.


    1. Yes, it reads a file directly from in-kernel ↩︎

    2. Good god I hate reading this kind of slop ↩︎

    • Pl chevron_right

      Sophie Herold: GNOME Fellowship October 2026

      news.movim.eu / PlanetGnome • 30 October 2026 • 2 minutes

    The GNOME Foundation is supporting contributors with its fellowship program. You can help expand the fellowship program with a donation.

    After the release of GNOME 51 in the previous month, this month was the time were people noticed the first regressions and bugs. Hence, a lot of work went into bug fixes this month.

    RFC Process Landed

    GNOME now has a project-wide RFC process. There were a few changes that happened this month, which further simplified the process and removed the special role of teams.

    Since we have a consensus on a process now, I will supplement it with further documentation soon.

    glycin

    The CMYK support has been merged. You can check my last blog post for more details.

    Another big change this month is the move from libjxl to jxl-rs. This is the same decoder now used by Chromium and Firefox. Thanks a lot to Wonwoo for the contribution and for all the people who fixed upstream issues that the GNOME implementation revealed.

    Other than that, there were a lot of smaller things to address in glycin, most due to the GNOME 51 release:

      • Fix image loading getting stuck on systems with lowered sysctl net.core.wmem_default #334
      • Fix libglycin’s get_mime_types blocking main thread !487
      • Fix orientation not parsed correctly for some images with MakerNote Exif tag #332
      • Fix memory growth via filling up the channel in image-rs loader for animated images #338
      • Fix animation threads in image-rs not terminated until the loader process exits !491
      • Canonicalize loader paths when reading config #340
      • Fix Exif decoder panic I #329
      • Move JPEG XL loaders into the image-rs loader while keeping the C-based editor separate !495
      • Fix some .cur-files being detected as TGA files #345
      • Fix Exif decoder panic II #346
      • Fix libglycin panic in construction of GlyPixelDensity with invalid data #347

    Image Viewer (Loupe)

    Loupe benefits from the new CMYK support in glycin. Here is a comparison of nightly Loupe vs Loupe 50.

    Loupe app window showing a dominantly green image with moss and a pink blurred flower in the backgroundLoupe with latest glycin showing the CMYK image correctly and indicating the CMYK color model under Image Format. Very similar image to the previous one. Only difference being that the colors are oversaturated and "CMYK" isn't mentioned in the image properties.Loupe 51 showing wrong colors for a CMYK image with ICC profile. This ICC profile oversaturates the colors to print on uncoated paper that will absorb a lot of ink.

    There are also some fixes that landed in Loupe this month:

      • Set physical dimensions of generated intermediate PDF for printing correctly #417 #613
      • Fix fractional scaling potentially blurring image rendering (see “Snapping”) #326
      • Show if image uses CMYK color model !621

    Other Work

    I reviewed Resources, which is currently incubating as a replacement GNOME Core app for System Monitor. I found a few minor issues. Other than that, the app is close to being ready for GNOME Core. A review from the Design Team is still outstanding.

    A topic that has been causing me a headache for a while has been how to properly implement memory limitations for glycin and thumbnailer sandboxes. There currently is no perfect solution. It looks like I will go with cgroups outside Flatpaks created via StartTransientUnit, at least for glycin. I’m happy that we finally have a decision.

    Support the GNOME Project

    The GNOME Fellowships are funded by our community. If you would like to help the GNOME project to stay sustainable, please consider donating.

    Donate to GNOME

    • Pl chevron_right

      Jakub Steiner: I am playing Grid right now!

      news.movim.eu / PlanetGnome • 30 October 2026 • 1 minute

    I never liked racing "sims" like Gran Turismo. So realistic! You can bounce off the guardrails like in a pinball. Grid on the other hand was a fantastic "arcade" racer with a brilliant damage model where mistakes were punished. And the camera work! And music. Boy, that was such a treat!

    Nostalgia stroke me fiercely and I needed to play that game in some form. Among a sea of weird remakes, there simply wasn't a platform you could play the proper original Racedriver: Grid on, other than emulators. So I bit the bullet and dove into the craziness of RPCS3.

    That UX is crazy, let me tell you. In the end you get a game playable even on an old workstation, which was a surprise in itself. A much bigger surprise was the support for network play. Obviously not a single soul is playing Grid in 2026, but it's a fun thought I might convince someone to play :)

    Race Driver: Grid running in RPCS3

    3D model: "Playstation 5 Dualsense" by AHarmlessPotato, CC-BY-4.0

    Anyway, the reason to post this is to remind myself in the future how to get my PS5 DualSense controller to work on GNOME OS. As always, a udev rule. Having this config in /etc/udev/rules.d/70-dualsense.rules:

    # DualSense over USB (054c:0ce6)
    KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0660", TAG+="uaccess"
    # DualSense over Bluetooth (054c:0ce5)
    KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce5", MODE="0660", TAG+="uaccess"
    KERNEL=="hidraw*", KERNELS=="*054C:0CE5*", MODE="0660", TAG+="uaccess"
    # DualSense Edge over USB (054c:0df2) / Bluetooth (054c:0df4)
    KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0df2", MODE="0660", TAG+="uaccess"
    KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0df4", MODE="0660", TAG+="uaccess"
    KERNEL=="hidraw*", KERNELS=="*054C:0DF4*", MODE="0660", TAG+="uaccess"
    

    Reload the rules and replug (the ACL is re-applied on every plug, so it persists across reboots and replugs):

    run0 udevadm control --reload-rules && run0 udevadm trigger
    

    Check things work from inside RPCS3's sandbox:

    flatpak run --command=sh net.rpcs3.RPCS3 -c 'test -r /dev/hidraw9 && test -w /dev/hidraw9 && echo OK'
    

    But again, the experience of this monstrosity. Briefly looking over Alice' shoulder at what's she's cooking with Highscore, the difference in experience and polish is night & day.

    • Pl chevron_right

      Cassidy James Blaede: Updates to the Blog

      news.movim.eu / PlanetGnome • 28 October 2026 • 3 minutes

    I’ve been wanting to get back into more frequent blogging instead of just posting half-thought-out toots to Mastodon, turning them into a rambling thread, and then losing the thought to the depths of social media… but every time I try to write something, there are a bunch of changes I want to make to my website so I get overwhelmed and do something else. 😅

    Between the recent Matrix Conference (another blog post I need to write…), travel, and taking a couple of days off of work to recover, I decided to tackle some of those changes to hopefully reduce the mental block for the future: I finally added pagination and tags, plus imported a bunch of my writing from other sites! As long as I’m here, I figured I should document the changes as a blog post, too.

    Pagination

    As my blog has grown (I have posts as from over a decade ago!), dropping every post onto a single index page has started to get a bit unwieldy. I knew Jekyll had a pagination plugin, but I hadn’t set it up. I finally did that, with nicely-styled back/forward buttons.

    Newer button, page 4 of 7, older button

    It’s a little thing, but something I’d been putting off for too long.

    Tags

    With over a hundred and fifty posts, even paging through the blog is not a great experience if you’re looking for something specific. I went through and tagged every blog post by topic: e.g. GNOME, Design, Flatpak & Flathub, How-To, and Web Development.

    Tags on a post

    Fun accident: the Star Wars tag page gets the same styling as my Star Wars pages section because of how I use path-based CSS classes for custom styling. It was a bug, but I kind of like how it’s a fun easter egg, so I kept it. 😉️

    I also wanted a way to format the tags nicely (e.g. Star Wars for the starwars tag) and provide some more context, so I added a data file to my Jekyll site to optionally provide a display name and description for each tag. Hover the tags to see the descriptions, or check out the new tag listing to browse all of the available topics!

    Importing my writing

    Pagination and tags help a lot because now because: my blog has way more posts! I’ve imported my writing from elementary and Android Police so it’s all accessible from one place.

    I wrote a ton for the elementary Tumblr, Medium publication, and blog during the decade-plus I contributed and then worked full-time on elementary; release announcements, AppCenter Spotlights, design rationale, developer tips, and more. I’d copied some of my work here in the past, but most of it was still only accessible on the elementary blog—or was lost to the depths of Medium and Tumblr. I finally spent the time to import the 80+ remaining posts I authored. Where the posts are still available on the elementary blog, I made sure to point the canonical URL there to avoid leeching any search engine juice from the original site; I just want to make it convenient to read my stuff in one place, but don’t want to mess up search engine ranking or anything. You can check out the entire archive on my site under the elementary tag.

    Similarly (though on a much smaller scale), I contributed a few posts to Android Police before they were bought out and strip-mined by Valnet—the company described by former writers as unethical that acquires news sites and immediately lays off their staff, and threatens to sue journalists for reporting on them. Since the topics I wrote about may be of interest to readers of my blog, I added those posts as redirects (with the ability to serve them from the site directly if they ever disappear). You can peruse those posts under the Android tag.

    If I find more of my writing across the Internet, I plan to pull it into this blog in a similar way; either cross-posted directly or at least indexed here with a redirect to the original.

    What’s next?

    I know not to promise anything (especially timelines!) but here are some things I’d like to work on next for my blog:

    • Per-tag styling (e.g. a unique accent color)
    • Find some of my more verbose Mastodon threads and turn them into blog posts
    • Automatically-generated social cards by default
    • Search while keeping everything static
    • Address whatever other issues I’ve opened
    • Write more!

    If anything in this post sounded interesting, my website is open source! Check out the source code or commit history to learn how I did things. I can’t promise I did everything the right way, but it works!