What’s New for Developers

Major improvements have been made to the GNOME developer experience during the GNOME 41 development cycle. Read on to find out more!

Improved Documentation

GNOME 41 is accompanied by an extravaganza of documentation improvements! These encompass changes to the GNOME developer website, new general developer documentation, improved API docs, and a new version of GNOME's design guidelines.

New Docs Site

Since GNOME 40, GNOME's main developer website has been replaced with a new streamlined portal, which provides access to all the GNOME platform docs.

This is coupled with a new developer docs site , which contains general developer documentation, including:

  • A new introduction to the GNOME platform, which includes an overview of included components and services, information on the various programming languages that can be used, and introductions to Builder and Flatpak.

  • Guidelines on general topics such as programming conventions, accessibility and localization.

  • Short tutorials on common developer tasks, like how to use notifications, or create a menu in GTK.

New API Docs

Many GNOME libraries are now using a new API docs tool, called gi-docgen. This produces more accurate and consistent documentation, as well as improved documentation websites.

The primary users of gi-docgen are GTK and its associated libraries, whose docs can be found at docs.gtk.org. This includes API docs for GTK, GDK, GSK, Pango, GdkPixbuf, GLib, GObject, and GIO.

New Human Interface Guidelines

GNOME's design documentation has also been expanded and refined during the GNOME 41 development cycle.

The guidelines have been updated to match contemporary design practice. They have also been substantially expanded, with additional material on accessibility, UI styling, adaptive UI, navigation structures, and more. Virtually all the old content has been rewritten, to make the guidance as accessible as possible.

Finally, the HIG has a new website, which looks better, and is easier to navigate and search.

Better Builder

Builder, the GNOME IDE, has a large collection of enhancements for GNOME 41.

The "find in files" feature, which allows finding and replacing strings across an entire project, has been redesigned for GNOME 41. It is now located in a persistent section in the bottom panel, which makes it more discoverable, and has a new search UI, which makes it easy to browse results across a project.

Builder's preexisting support for deploying to connected devices has been improved for GNOME 41. This allows building and then deploying Flatpak bundles to connected devices, such as mobile devices. It now works much more automatically; to learn how to use it, see James Westman's tutorial.

For GNOME 41, Builder can now also build and run CMake projects, and it can build projects that use a pure Make build setup in a Flatpak environment (thanks to being able to handle make-args and make-install-args).

Finally, Builder has a new markdown renderer for GNOME 41, which produces much better-formatted Markdown previews.


There have been two minor updates to GTK 4 since the GNOME 40 release: 4.2, and 4.4.

NGL, the new GL renderer for GTK 4, is now the default renderer on Linux, Windows and Mac. It has noticable improvements to frames per second, as well as power and CPU usage. Input handling has been another area for improvements in GTK, with changes in compose and dead key handling.

Other improvements in the 4.2 and 4.4 releases include:

  • GTK Inspector is now enabled by default, to make debugging easier.

  • There have been various improvements to GTK 4 on Windows, such as using GL for media playback and improved drag and drop support.

  • Emoji data has been updated to CLDR 39.

The GTK development blog includes more information about the GTK 4.2 and 4.4 releases.


libadwaita is an in-development companion library for GTK 4, which is working towards an initial 1.0 release in the coming months. It will provide the GNOME GTK stylesheet, additional widgets, and convenience functionality for GTK 4 GNOME apps. It is the technological successor to libhandy (which can be used in combination with GTK 3).

libadwaita developments during the GNOME 41 cycle include:

  • A substantial amount of API cleanup and code refactoring, as the library approaches its 1.0 release.

  • Significant CSS stylesheet changes, including a major refactoring, general style updates, and work to support recoloring. The latter will facilitate dark mode as well as allowing apps to recolor their UIs.

  • The addition of AdwApplication, a new base class for apps which reduces repetitive code and handles library initialization.

  • Inclusion of unread badges in view switchers.

  • API documentation is now generated with gi-docgen.

Documentation on how to use each of the options provided by libadwaita will be included in the Human Interface Guidelines, to coincide with the libadwaita 1.0 release.


GJS, the project providing JavaScript bindings for the GNOME platform, boasts a number of improvements in GNOME 41:

  • Memory usage has been reduced by approximately 40 bytes per GObject.

  • The TextEncoder and TextDecoder global objects have been added, which replace the older imports.ByteArray module.

  • An ignoreCaughtExceptions option has been added to the GJS debugger. Enabling this option makes the debugger skip exceptions if they are already going to be caught elsewhere in the code.

  • Documentation for new contributors has been updated.

GJS 41 also includes a good collection of bug fixes.


Rust support for the GNOME platform has made significant progress since GNOME 40:

  • Bindings are now provided for GTK 4 and associated libraries.

  • It's now easy to get started with Rust and GTK 4, thanks to the new GUI development with Rust and GTK 4 book. Additionally, the GTK Rust template can also be used as the basis for new GTK 4 Rust projects.

  • GTK composite templates are now supported, allowing more efficient creation of custom widgets. An example shows how this can be used in practice.

  • Aside from these other major changes, there have been many other smaller improvements, including better documentation, additional GLib macros, simpler subclassing, and more.

Read the release announcement on the gtk-rs blog for more details.

Flatpak SDK Updates

The GNOME Flatpak SDK received a number of improvements for GNOME 41:

  • The Flatpak SDK is now built with sysprof support enabled, making profiling flatpak applications easier.

  • zenity and librest were removed from the runtime.

  • libmanette was added to the runtime, enabling gamepad support in WebKit.

  • The base runtime was updated to freedesktop-sdk 21.08, bringing in newer toolchains (such as GCC 11 and LLVM 12) and libraries (such as Mesa 21.2).

GNOME OS Updates

GNOME OS provides nightly development snapshots of a complete GNOME system. While it is primarily used for GNOME project QA, it can also be a useful reference for downstream distributions and app developers. It has received a variety of updates during the GNOME 41 cycle:

  • GNOME OS libraries are now built with sysprof enabled, making profiling applications on GNOME OS easier.

  • systemd-homed is now included and can be enabled manually using homectl.

  • Support has been added for smartcards and other security keys.

  • The openconnect, fortisslvpn, vpnc and openvpn VPN backends have been added to NetworkManager.

  • LXC tooling is now included.

  • RISC-V was added as a CPU architecture.

  • Mutter is now built with initfd support, enabling better XWayland support.

  • xdg-desktop-portal-gnome has been added, for GNOME-specific desktop portals.

Finally, GNOME OS builds are now tested using an openQA instance hosted at openqa.gnome.org. For details on how developers can use this openQA instance, see the developer documentation.

That's Not All

Other improvements for developers include:

  • Tracker is now available for macOS via Homebrew. Install it by running brew install tracker.

  • Devhelp now supports API reference documentation generated with gi-docgen.

  • App developers can request the high-performance power profile when running a command using powerprofilectl. For example:

    powerprofilectl launch --reason "Compiling software" ninja