What’s new for developers
GNOME 47 comes with plenty of 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.
We encourage you to explore the GNOME Developer website for a comprehensive overview of the resources available to you. Get started building and contributing to the next generation of GNOME experiences!
GTK
-
Default Vulkan Renderer: GTK now uses the Vulkan renderer by default on systems with Vulkan support, enhancing graphical performance and rendering capabilities.
- CSS Engine Enhancements: Significant updates have been made to the CSS engine:
- CSS Variables: Support for CSS variables has been added, allowing for more dynamic and reusable styles.
- New Color Features: GTK has more color functionality, including relative colors,
color-mix
, and support for non-SRGB color spaces. Older APIs such as@define-color
andshade()
are now deprecated. For more details, visit CSS Happenings.
-
Graphics Offloading Improvements: The graphics offloading features in GTK and GStreamer have been enhanced. Applications like Snapshot, Showtime, and Epiphany now leverage these improvements for better performance.
- Initial Color Management Support: GTK has introduced initial support for color management, allowing it to communicate color space information for HDR content to the compositor. This ensures proper display of HDR images and videos. Additionally, the new
GdkColorState
object has been introduced to facilitate this functionality.
Libadwaita
- New Widgets Added:
- AdwButtonRow: A new widget designed for organizing buttons in a row. Design guidelines are available for best practices.
- AdwSpinner and AdwSpinnerPaintable: Added support for spinners to indicate loading or processing states.
- AdwBottomSheet: This widget allows applications to use bottom sheets outside of dialogs and includes an optional bottom bar, which can be particularly useful for music player apps. See it in action.
- AdwMultiLayoutView: Introduced for more flexible layout management.
-
Deprecated Old Dialog APIs: Older dialog APIs have been deprecated in favor of newer implementations.
-
CSS Rework: The CSS has been updated to align with recent GTK changes, such as replacing named colors with variables.
- New Alert Dialog Style: A refreshed style for alert dialogs has been introduced, improving visual consistency and user interaction.
Shell
- Wayland-Only Mutter Build: After necessary cleanups in both Mutter and GNOME Shell, it’s now possible to build Mutter as a Wayland-only compositor. GNOME Shell will automatically detect whether Mutter was built with or without X11 and Xwayland, and will adapt accordingly.
Search
- Renamed Components: Two components of GNOME’s search infrastructure have been renamed for clarity. The TinySPARQL database library and GNOME’s filesystem indexer, LocalSearch, are now separate from the discontinued Tracker project.
- Backward Compatibility: The old Tracker APIs remain available for backward compatibility, so applications do not need to immediately transition to the new API. However, the
tracker3
command-line tool has been replaced by thelocalsearch
command for terminal searches. - Improvements in TinySPARQL: The TinySPARQL library has been renamed and updated with numerous fixes for robustness and standard compliance. A new browser-based query editor has also been introduced.
-
Enhancements in LocalSearch: File unique IDs are now computed using a more reliable method, which helps prevent the repeated processing of files under certain conditions.
- GNOME Shell Extensions: For information on porting extensions, refer to the porting guide.
Mutter: Wayland DRM Lease
This protocol is used by Wayland compositors which act as Direct Rendering Manager (DRM) masters to lease DRM resources to Wayland clients.
The compositor will advertise one wp_drm_lease_device_v1 global for each DRM node. Some time after a client binds to the wp_drm_lease_device_v1 global, the compositor will send a drm_fd event followed by zero, one or more connector events. After all currently available connectors have been sent, the compositor will send a wp_drm_lease_device_v1.done event.
WebKitGTK
- Sysprof Integration: WebKit can now be profiled using Sysprof on Linux, marking the first web engine on the platform to integrate with Sysprof. This integration supports both WebKitGTK and WPE WebKit ports.
- Tracing Points: The integration exposes existing tracing points within WebKit, including those related to JSC (JavaScriptCore), WebProcess, and more. There are plans to consider adding new tracing points in the future.
- Performance Benefits: This development is a significant milestone for WebKit on Linux, as it enables potential performance enhancements, reduced resource usage, and improved overall efficiency.
- Visual Reference: For more details, see the visual reference.
Orca
-
Accessibility Documentation: A new document has been created to assist application developers in making their applications more accessible to screen reader users. You can view the document here.
-
Improvements in Static Text Presentation: The presentation of static text exposed via descriptions has been enhanced. This update is part of ongoing efforts to improve how text is presented to users relying on screen readers.
-
Formatting Strings Elimination: The process of eliminating formatting strings for presentation generation has been completed, streamlining text formatting for screen reader users.
-
Braille Formatting Strings: Work is underway to eliminate the use of formatting strings in Braille. This update aims to complete the transition from formatting strings, with a branch available for user testing.
-
Global ARIA
posinset
andsetsize
: The ARIAposinset
andsetsize
attributes have been made global, allowing for better accessibility. This change also supports GTK developers in addressing issues related to the accessibility tree without needing to expose all objects.
PyGObject
- Enhanced Documentation with Tutorials: PyGObject, the Python bindings for GNOME platform libraries, has seen a major improvement in its documentation with the addition of new tutorials. These tutorials are derived from the PyGObject-Guide by Rafael Mardojai CM, which itself was based on the PyGObject-Tutorial by Sebastian Pölsterl. This effort involved contributions from the community and a relicense to LGPL. Explore the updated tutorials at PyGObject Tutorials.