Contents Menu Expand

Devel Docs

What’s new for developers

GNOME 45 is packed with new features and enhancements for those who use the GNOME platform. These include updates to GNOME’s developer tools, improved libraries, and updated language bindings.

GNOME Shell Extensions

GNOME Shell 45 includes technical changes which are incompatible with all existing GNOME shell extensions. All shell extensions therefore need to be updated to work with GNOME 45.

In GNOME 45, GNOME Shell has switched from GJS’s import system to the standard JavaScript import system. This change will improve compatibility with the broader JavaScript ecosystem, and ensures that GNOME is following JavaScript standards. However, it also means that shell extensions written for earlier versions of GNOME Shell will be incompatible with version 45 and later.

Extension developers are encouraged to update their extensions for GNOME 45 prior to it being included in stable distro releases. Users are also encouraged to contact the developers of their favorite extensions, to make them aware of the change.

GNOME OS and distros which include GNOME development releases (such as Fedora) can be used for extension testing and development. Extension developers can also get live support in the GNOME Extensions Matrix channel.

A more extensive description of this change is available on the GNOME Shell Development Blog.

Developer Tools

GNOME 45 comes with major updates to the project’s developer tools.

GNOME Builder

In GNOME 45, Builder plugins can now be written using modern JavaScript (thanks to the platform provided by GJS). JavaScript offers a great option for those wanting to write plugins in a dynamic language, and supplements the compiled languages (C, C++, Rust, and Vala) which can already be used for writing plugins. If you want to create a JavaScript plugin for Builder, an example is available. Those who are new to using GObject via JavaScript can find guidance in the GJS documentation.

Builder 45 also includes support for many of the new Sysprof features that are part of GNOME 45 (see below for more details).

Other enhancements in version 45 include:

Sysprof

Sysprof has been redesigned and rewritten from the ground up for GNOME 45. The new version comes with GTK 4 integration, more advanced features, and a new modern app design. Under the hood, highlights include:

The Sysprof app has also been completely redesigned. A new greeter makes it easy to configure a capture before it is started. Capture results can be viewed in many different ways, including viewing the stack trace over time, a log view, a marks view for viewing annotations, a process view, a flame graph, and much more.

Christian Hergert has written a series of blog post on these changes, which are worth checking out:

Workbench

Workbench is a fantastic app for learning and prototyping with GNOME technologies. With it, you can edit GTK and CSS and view the resulting UI in real time. Workbench comes with a library of over a hundred high-quality examples, and supports coding in JavaScript, Rust and Vala.

Changes in its latest release include:

Workbench is part of GNOME Circle and can be downloaded from Flathub.

GNOME Libraries

GNOME’s development libraries also come with new features and enhancements in the latest version.

Libadwaita

GNOME 45 is accompanied by libadwaita 1.4. The new version comes with many new capabilities and enhancements.

New adaptive APIs and widget styles

The new libadwaita release brings a new set of APIs for adaptive behavior, along with associated style changes to several common widgets.

The main change for adaptive behavior is the introduction of AdwBreakpoint, which provides a way to specify at which sizes different UI layouts should be used. Breakpoints are more robust and provide a higher quality user experience than libadwaita’s pre-existing adaptive widgets. They also allow different UI layouts at different window sizes. For example, when a window is narrow, header bar controls can be moved to a new toolbar which pops up at the bottom of the view.

As a result of this change, AdwFlap, AdwSqueezer, AdwLeaflet, and AdwViewSwitcherTitle are all deprecated in the new release. In some cases, these can be replaced by breakpoints alone. In other cases, new replacement widgets can be used, in the shape of AdwNavigationView, AdwNavigationSplitView, and AdwOverlaySplitView.

Several style updates are also part of these changes: AdwNavigationSplitView brings a cool new full-height look for sidebars, and AdwToolbarView is a new widget which provides a new style for header bars.

Many core GNOME apps are already using the new adaptive APIs, and can be used for reference. A migration guide is also available.

New list rows and convenience functionality

Another improvement in the new libadwaita version is the introduction of a number of new types of list rows:

Other enhancements in the new libadwaita release include:

A blog post is available with more details about the libadwaita 1.4 release.

GTK

GNOME 45 is accompanied by GTK 4.12. Improvements in this version include:

Rendering has been a focus of development effort for GTK 4.12, with the following improvements:

GTK 4.12 also comes with improved accessibility:

More can be read about these changes on the GTK development blog.

GLib

GNOME 45 is accompanied by GLib 2.78. Changes for this release include:

Libspelling

Libspelling is a new spell checking library for GTK 4. There is a short post about it on Christian Hergert’s blog.

Libpeas

GNOME 45 comes with libpeas 2.0. The new version breaks ABI compatibility with previous versions. The main new feature is support for JavaScript plugins, using GJS.

Libdex

Libdex is a deferred execution library for GLib-based applications, which uses futures. GNOME 45 comes with version 0.4.0, which has a range of improvements, including:

Devel Docs

Libmks

Libmks is a new library which provides a “Mouse, Keyboard, and Screen” implementation for QEMU, utilizing the D-Bus display device. It supports importing DMA-BUF into GdkTexture with damages for more efficient rendering as part of a GTK 4-based application.

Language Bindings

Finally, GNOME 45 includes a range of improvements to the support for different programming languages.

GNOME JavaScript (GJS)

GNOME 45 comes with GJS 1.78, which comes with a host of improvements:

TypeScript support has also improved in GNOME, with a new SDK extension and Builder template.

GNOME Rust

GNOME 45 comes with a new release of the GTK Rust bindings, which feature the most recent API additions in the Rust the ecosystem. More details can be found in the release notes.

GNOME Python

PyGObject provides GNOME’s official Python bindings, and comes with the following changes for GNOME 45: