What’s New for Developers and System Administrators

GNOME 3.20 includes many new features and improvements for those working with GNOME technologies. Read on for the details!


Builder is the new integrated development environment for GNOME. It aims to provide a streamlined, powerful and modern experience for building GNOME applications, and already features inline completion, powerful global search, a documentation browser, a symbol tree browser, and much more.

The Builder 3.20 release contains some significant new features, as well as a lot of polish and refinement. The options for building applications have been significantly extended: it is now possible to use Builder to create xdg-app bundles, and it is also possible to build within a JHBuild environment. All of these build options (and more) can be found in a new build configuration view (see Christian Hergert’s blog post for more details).

A new multi-process plugin framework is another major new feature for 3.20. This allows plugins to add a huge range of functionality to Builder, including additional autocompletion providers, tools, services, build systems, auto indenters, project miners, search providers, symbol resolvers, version control systems, and much more. What can you extend in Builder provides a full list of what can be extended using the new plugin system. There is also a tutorial that describes how to write your own plugins (part one, part two).

Other enhancements to Builder in 3.20 include:

  • Application preferences have been overhauled to help you to find the tweaks you need faster and with less disruption.

  • A new to do plugin shows a list of every TODO, FIXME and XXX in your project, and allows you to navigate to their locations.

  • VIM emulation has continued to improve, allowing users that prefer modal-editing to feel at home.

  • Builder now detects and highlights common gettext errors.

  • ide, a new command line program, allows you to quickly create new projects following GNOME community best practices.

  • For languages that support semantic analysis, holding Ctrl while clicking on variables, types, and functions will jump to their source location.

  • Initial support for the Vala language.

  • Autocompletion is now faster and has fuzzy matching.

  • It is now possible to use Builder with ccache.


xdg-app is the new cross-distro framework for building and distributing desktop applications on GNU/Linux, which is planned to have first class support in GNOME. Not only does xdg-app make it possible to create applications that can be used on different distributions, but it also plans to offer a comprehensive security model, by limiting how much of the host is exposed to applications.

3.20 is a significant moment for xdg-app, with a number of core features being offered in a mature state for the first time. Version 3.20 includes xdg-app-builder, a new tool that makes it easy to build apps. Alexander Larsson, xdg-app’s lead developer, has written a five part tutorial on how to use this to build xdg apps (part one, part two, part three, part four, part five).

If you want to try installing and running xdg-apps, a collection of nightly GNOME applications is available. In addition to being a great way to try xdg-app, this is also a great way to test development versions of GNOME applications, and demonstrates xdg-app’s ability to install multiple different versions of the same application at the same time. For more information, a tutorial is available.

Other significant changes in the 3.20 release include:

  • It is now possible to create and distribute single file application bundles. This is particularly useful for distributing applications using physical media.

  • xdg-app now has a generic permissions store that can be used to record information about what applications are allowed to do what. This is one of the first steps towards application sandboxing.

  • Detailed information about the application, such as a description and screenshots, can now be included in xdg-app bundles, using the cross-desktop AppData standard. This can be used by app stores, like GNOME Software, to provide a rich graphical installation experience.

  • The GNOME runtimes, which provide the common platform on which applications can depend, have been updated and improved, and are now easier to contribute to. They now include an unstable runtime, which can be used to install nightly applications or for application development. For details about all the runtimes that are available, see the runtimes wiki page.


3.20 is a big release for GTK+. CSS theming has had a major overhaul, resulting in significant improvements, with easier theme writing, more exact visual styling and more dynamic interfaces. GTK+ themes now follow the standard CSS box model much more consistently, and margins and minimum height/width can be specified in themes. This not only increases familiarity for those already know CSS, but is also much more predictable and gives theme authors more control over layout and spacing.

Other features of CSS theming in 3.20:

  • CSS theming is now fully documented, and widget documentation now describes CSS element names and style classes, along with their structure.

  • The introduction of CSS selectors allows greater use of specificity in themes and gives more flexibility and power to theme authors.

  • Most widgets can now be animated using CSS, allowing more engaging and dynamic controls.

  • Additional CSS features are now supported, including radial-gradient(), rem and calc().

As a result of these changes, existing GTK+ themes will need to be updated, and many style properties have been deprecated in favor of CSS equivalents. The 3.20 CSS API will remain stable going forward, though (and will continue to follow the documentation included with this version).

CSS theming is not the only area to be enhanced in GTK+ 3.20:

  • GtkShortcutsWindow is a new widget to present an overview of keyboard shortcuts and multitouch gestures in your application. Groups and pages allow shortcuts to be organized, and a search feature comes built in.

  • gtk-query-settings is a new command line utility to query GTK+ settings that are visible to your application.

  • gtk-builder-tool has a new preview command for viewing .ui files.

  • 3.20 sees the first release of gspell, a new spell-checking library for GTK+ applications. It is the best library of its type for GTK+, and makes it easy to add spell checking to GtkTextView. gspell is already being used in gedit for 3.20.

  • gtk3-demo now has a foreign drawing demo that shows how to style non-GTK+ widgets with a GTK+ visual theme.

  • GtkWindow sizing behavior has been improved to work with client-side decorations. This means that gtk_window_set_default_size() must now be combined with gtk_window_get_size(): see the save window state tutorial for information on best-practices for saving window size.

GTK+ Inspector

GTK+’s live inspector has had a number of updates for 3.20:

  • The user interface has been polished: the sidebar has been replaced by a drop down in order to devote more space to content display, and lists and trees have been cleaned up.

  • Device information is now shown in the general tab.

  • In line with GTK+’s new CSS features, CSS nodes and associated style information are now displayed.

  • It is now possible to highlight widgets that are causing resizes.


Notable changes in the 3.20 version of WebKitGTK+ include:

  • Sessions can now be restored exactly as they were, using new serialize/restore APIs.

  • Scrollbars can be presented as a semi-transparent overlay, like standard ones in GTK+.

  • onbeforeunload is now supported, allowing websites to show messages when leaving a page.

  • New APIs allow console messages to be accessed.

  • Significant progress has also been made towards isolating web processes from the network, which will help to make WebKitGTK+ more secure in the future.


PyGObject improvements for 3.20 include extended GError support and performance improvements for function calls and closures. The PyGObject API reference has also been improved for 3.20:

  • Links to git.gnome.org C source code have been added.

  • Lots of improvements have been made to the overrides documentation (including Gtk.ListStore and Gtk.TreeModelRow).

  • Search has been improved and new search settings added.

Other Improvements

Other improvements for developers in GNOME 3.20 include:

  • In GLib, support has been added for DTLS (Datagram TLS), in order to enable encrypted streaming media.

  • Also in GLib, new helpers for overflow-checked integer operations help make it easier to write safe code.

  • JSON-GLib, Gom and GtkBuilder can now be used from Gjs.

  • Tracker has much improved SPARQL 1.1 support (see the query language and update language specifications). DELETE {...}, INSERT {...} and WHERE {...} syntax is now supported, BIND can also be used, and many SPARQL 1.1 builtin functions have been added.

  • gitg, GNOME’s graphical Git client, got a restyled repositories list. Commit previews and diffs have also been improved, with new styling and integration with system themes (so they are properly styled with the dark system theme, for example).