Recent from talks
Nothing was collected or created yet.
GTK version 4 (gtk4-widget-factory, a collection of examples that demonstrate many of the GUI widgets) | |
| Original authors | Spencer Kimball, Peter Mattis |
|---|---|
| Developers | The GNOME Project, eXperimental Computing Facility (XCF) |
| Initial release | April 14, 1998 |
| Stable release | 4.20.2[1] |
| Preview release | 4.19.2
/ June 27, 2025 |
| Repository | |
| Written in | C, CSS[2] |
| Operating system | Linux, Unix-like, macOS, Windows |
| Type | Widget toolkit |
| License | LGPLv2.1+ |
| Website | gtk |
GTK (formerly GIMP ToolKit[3] and GTK+[4]) is a free open-source widget toolkit for creating graphical user interfaces (GUIs)[5] targeted at Linux and specifically GNOME (though with some use in other desktop environments). It is licensed under the terms of the GNU LGPL, allowing both free and proprietary software to use it.[6]
The GTK team releases new versions on a regular basis.[7] GTK 4 and GTK 3 are actively maintained, while GTK 2 is no longer supported.[8] GTK 1 is independently maintained by the CinePaint project.[9]
Software architecture
[edit]


This section needs to be updated. (May 2024) |
The GTK library contains a set of graphical control elements (widgets); version 3.22.16 contains 186 active and 36 deprecated widgets.[10] GTK is an object-oriented widget toolkit written in the programming language C; it uses GObject (that is, the GLib object system) for object orientation. While GTK is mainly used with windowing systems based on Wayland (and prior to that on Wayland's predecessor X11), it works on other platforms, including Microsoft Windows (interfaced with the Windows API), and macOS (interfaced with Quartz). There is also an HTML5 back-end named Broadway, although this was deprecated in 2025 with the X11 backend to indicate both would be removed in GTK version 5.[11][12][13] GTK uses Vulkan or GL to draw most graphical elements.[14]
GTK can be configured to change the look of the widgets drawn; this is done using different display engines. Several display engines exist which try to emulate the look of the native widgets on the platform in use.
GTK Drawing Kit (GDK)
[edit]GDK acts as a wrapper around the low-level functions provided by the underlying windowing and graphics systems.
GTK Scene Graph Kit (GSK)
[edit]GSK is the rendering and scene graph API for GTK. GSK lies between the graphical control elements (widgets) and the rendering. GSK was finally merged into GTK version 3.90 released March 2017.
GtkBuilder
[edit]GtkBuilder allows user interfaces to be designed without writing code. The interface is described in an Extensible Markup Language (XML) file which is written by hand or generated by a GUI designer, which is then loaded at runtime and the objects created automatically. The description of the user interface is independent from the programming language being used.
Language bindings
[edit]Language bindings are available for using GTK from languages other than C, including C++, Genie, JavaScript, Perl, Python, Vala, and others.[15]
Backends
[edit]GTK supports various backends, which provides different ways to display GTK applications depending on the system and environment. Examples of GTK backends are:
- Wayland – Used with the Wayland display server on Linux systems, it is a modern replacement for X11.
- X11 – The default on Linux systems using the X.Org display server.
- Win32 – For running GTK applications on Windows.
- Quartz – For macOS support.
- Broadway – Allows GTK applications to run in web browsers using HTML5 and WebSocket.[11][12]
Development tools
[edit]GUI designers
[edit]
There are several GUI designers for GTK. Here is a selection of GTK GUI designers:
- Cambalache - a successor to Glade, supports GTK 4.[16][17]
- Glade - supports GtkBuilder, which is a GTK built-in GUI description format. (not actively maintained)
- Gazpacho - GUI builder for the GTK toolkit written in Python[18]
- Crow Designer - relies on its own GuiXml format and GuiLoader library.[19]
- Stetic - part of MonoDevelop, oriented toward Gtk#.
- Gambas (since version 2.0 atop BASIC)
- Xojo
- Lazarus (on Linux defaults to interfacing with GTK 2)
GTK Inspector
[edit]
The GTK Inspector is a built-in interactive debugging tool in GTK, allowing developers to inspect and modify UI elements, test CSS changes, and analyze widget structure in real time. It can be enabled using the Control + Shift + I or Control + Shift + D shortcuts, or by setting the GTK_DEBUG=interactive environment variable.[20] It was introduced with GTK version 3.14.[21][22]
Features
[edit]- Interactive debugging
- Real-time CSS testing and modifications
- Widget magnification for detailed inspection
- UI structure analysis and object property examination
- Customizable display settings via environment variables
- Detailed object inspection (type, state, properties, CSS, actions, etc.)
- Global application information display
- CSS rule debugging
- Rendering pipeline recording and inspection
Development
[edit]GTK is mainly developed by The GNOME Project, which also develops the GNOME Development Platform and the GNOME Desktop Environment.[23] GTK is mainly written in C.[24] Many language bindings are available.
GNOME developers and users gather at an annual GNOME Users And Developers European Conference GUADEC meeting to discuss GNOME's current state and future direction.[25] GNOME incorporates standards and programs from freedesktop.org to better interoperate with other desktops.[citation needed]
Many GNOME applications have been ported to GTK 4, which was released in December 2020,[26] however some still use GTK+ 3 (GIMP being a major one).
Build automation
[edit]The master branch of GTK utilizes Meson for its build automation. GTK (and GNOME, GLib, etc.) formerly utilized the GNU Build System (named Autotools) as the build automation system of choice. Since August 14, 2017, the Autotools build system files have been dropped.[27]
Criticism
[edit]The most common criticism of GTK is the lack of backward-compatibility in major updates, most notably in the application programming interface (API)[28] and theming.[29] The result is that application developers or theme developers have to rewrite parts of their code to make it work with a newer version of GTK.
The compatibility breaks between minor releases during the GTK 3.x development cycle was explained in 2013 by Benjamin Otte as due to strong pressures to innovate, such as providing the features modern users expect and supporting the increasingly influential Wayland display server protocol. With the release of GTK 4, the pressure from the need to innovate will have been released and the balance between stability and innovation will tip toward stability.[30] Similarly, recent changes to theming are specifically intended to improve and stabilise that part of the API, meaning some investment now should be rewarded later.[citation needed] However, in 2025, GTK 5 is described in the official documentation as "a major new version of GTK that breaks both API and ABI compared to GTK 4.x.", like GTK 3 and 4.[31][32][33]
- Aurélien Gâteau started Gwenview as GTK application but switched to Qt early in development.[34]
- Dirk Hohndel, codeveloper of Subsurface and member of Intel's Open-Source Technology Center, criticized the GTK developers for being abrasive and ignoring most community requests.[35]
- Hong Jen Yee, the creator of LXDE, expressed disdain for the GTK3 toolkit's radical breaking API changes and increased memory usage, leading him to port the project to Qt, renaming it LXQt.[36]
- The Audacious music player moved to Qt in version 3.6.[37] The reasons stated by the developers for this include a transition to client-side window decorations, which they claim cause the application to look "GNOME-y and out of place."[38]
- Wireshark has switched to Qt due to not having a good experience with GTK's cross-platform support.[39]
- EasyEffects, a popular audio equalizer, is being ported to Qt.[40]
Use
[edit]

Applications
[edit]Some notable applications that use GTK as a widget toolkit include:
- Ardour, a digital audio workstation (DAW)
- Deluge, a BitTorrent client
- Foliate, an ebook reader
- GIMP, a raster graphics editor
- GNOME Core Applications, a collection of applications as a standard bundle of the GNOME desktop environment
- GNOME Circle, a collection of applications created to work within the GNOME ecosystem
- GNOME Evolution, a personal information manager
- HandBrake, digital video transcoder
- Inkscape, a vector graphics editor
- LibreOffice, an office suite
- Lutris, a game manager
- Mozilla Firefox, a web browser
- Mozilla Thunderbird, a personal information manager
- Pitivi, a video editor
- PCSX-Reloaded, a video game console emulator
- REAPER, a digital audio workstation (DAW)
- Remmina, a remote desktop client
- Transmission, a Bit Torrent client
GTK programs can be run on desktop environments based on X11 and Wayland, or others including ones not made with GTK, provided the needed libraries are installed; this includes macOS if X11.app is installed. GTK can be also run on Microsoft Windows. It is used by some popular cross-platform applications like Pidgin and GIMP. wxWidgets, a cross-platform GUI toolkit, uses GTK on Linux by default.[41] Other ports include DirectFB (for example used by the Debian installer).
Desktop environments
[edit]Several desktop environments utilize GTK as the widget toolkit.
Current
[edit]- GNOME, based on GTK, meaning that programs native to GNOME use GTK
- Budgie, built from scratch for the SolusOS successor, Solus Operating System
- Cinnamon, a fork of GNOME 3 which uses GTK version 3
- MATE, a fork of GNOME 2 which uses GTK 3 since version 1.18
- Xfce, based on GTK 3 since version 4.14
- Pantheon uses GTK 3 & 4, being developed by elementary OS
- Sugar, a desktop environment for youth primary education, which uses GTK, especially PyGTK
- Phosh, a mobile UI designed for PureOS
- LXDE (Lightweight X11 Desktop Environment) is based on GTK 2
- Unity, the former default desktop environment of Ubuntu
Inactive
[edit]- Access Linux Platform (successor of the Palm OS PDA platform)
- Consort, the GNOME 3.4 Fallback Mode – fork from Solus
- GPE, the GPE Palmtop Environment
- ROX Desktop, a lightweight desktop, with features from the GUI of RISC OS
Window managers
[edit]The following window managers use GTK:
GtkSourceView
[edit]For syntax highlighting there is GtkSourceView, "source code editing widget". GtkSourceView is maintained by GNOME separately from GTK as a library: gtksourceview. There are plans to rename to gsv.[citation needed]
GtkSpell
[edit]GtkSpell is a library separate from GTK. GtkSpell depends on GTK and Enchant. Enchant is a wrapper for ispell, hunspell, etc., the actual spell checker engine/software. GtkSpell uses GTK's GtkTextView widget, to highlight misspelled words and offer replacement.
History
[edit]GTK was originally designed and used in the GNU Image Manipulation Program (GIMP) as a replacement of the Motif toolkit; at some point Peter Mattis became disenchanted with Motif and began to write his own GUI toolkit named the GIMP toolkit and had successfully replaced Motif by the 0.60 release of GIMP.[42] Finally GTK was re-written to be object-oriented and was renamed GTK+.[43] This was first used in the 0.99 release of GIMP. GTK was subsequently adopted for maintenance by the GNOME Foundation, which uses it in the GNOME desktop environment.
GTK 2
[edit]The GTK 2.0.0 release (2002[44]) series introduced new features which include improved text rendering using Pango, a new theme engine, improved accessibility using the Accessibility Toolkit, transition to Unicode using UTF-8 strings, and a more flexible API. Starting with version 2.8, released in 2005, GTK 2 depends on the Cairo graphics library for rendering vector graphics.[45]
GTK 3
[edit]GTK version 3.0.0 (2011[46]) included revised input device handling, support for themes written with CSS-like syntax, and the ability to receive information about other opened GTK applications. All rendering was done using Cairo.[47]
The '+' was dropped returning to simply 'GTK' in February 2019 during a Hackathon.[48]
GTK 4
[edit]Release of the first GTK 4 version was in December 2020. At the 2018 edition of DevConf.cz, Matthias Clasen gave an overview of the then-current state of GTK 4 development, including a high-level explanation of how rendering and input worked in GTK 3, what changes were being made to GTK 4, and the reasons for those changes. Examples of things that have become possible with GTK 4 were given as well.[49]
One of the main changes made during the GTK 4 development cycle (i.e. GTK 3.92, etc.) was the removal of user customization options (like individual keyboard shortcuts that could be set in GTK+ 2), and the delegation of functionality to ancillary objects instead of encoding it into the base classes provided by GTK. Other changes include:
- Event handling from signal handlers described by GtkWidget is delegated to event controllers.
- Rendering is delegated to GtkSnapshot objects.
- The layout mechanism is delegated from GtkWidget to GtkLayoutManager.
- Cairo was de-emphasized and Vulkan or GL were used instead to draw most graphical elements.[14]
Releases
[edit]| Release series | Initial release | Major enhancements | Latest minor version |
|---|---|---|---|
| 1.0 | 1998-04-13[50] | First stable version | 1.0. |
| 1.2 | 1999-02-25[51] | New widgets:
|
1.2.10 |
| 2.0 | 2002-03-11[52] | GObject
Overall support for UTF-8 |
2.0.9 |
| 2.2 | 2002-12-22[53] | Multihead support | 2.2.4 |
| 2.4 | 2004-03-16[54] | New widgets:
|
2.4.14 |
| 2.6 | 2004-12-16[55] | New widgets:
The last to support Windows 98/Me |
2.6.10 |
| 2.8 | 2005-08-13[56] | Most widgets are rendered by Cairo | 2.8.20 |
| 2.10 | 2006-07-03[57] | New widgets:
Print support: GtkPrintOperation |
2.10.14 |
| 2.12 | 2007-09-14[58] | GtkBuilder | 2.12.12 |
| 2.14 | 2008-09-04[59] | JPEG 2000 load support | 2.14.7 |
| 2.16 | 2009-03-13[60] | New widget: GtkOrientable
Caps Lock warning in password entry Improvements on GtkScale, GtkStatusIcon, GtkFileChooser |
2.16.6 |
| 2.18 | 2009-09-23[61] | New widget: GtkInfoBar
Improvement on file chooser, printing To remove much of the necessary IPC between the X11 application and the X11 server, GDK is rewritten (mainly by Alexander Larsson) to use "client-side windows", i.e., the GdkWindow, which every widget must have, belongs now to the client |
2.18.9 |
| 2.20 | 2010-03-23[62] | New widgets:
Improvement on file chooser, keyboard handling, GDK Introspection data is now included in GTK |
2.20.1 |
| 2.22 | 2010-09-23[63] | GdkPixbuf moved to separate module
Most GDK drawing are based on Cairo Many internal data are now private and can be sealed in preparation to GTK 3 |
2.22.1 |
| 2.24 | 2011-01-30[64] | New widget: GtkComboBoxText which had previously been a custom widget shipped with Gtkmm
The CUPS print backend can send print jobs as PDF GtkBuilder has gained support for text tags and menu toolbuttons and many introspection annotation fixes were added Migrating from GTK+ 2.x to GTK+ 3 |
2.24.33 (2020-12-21)[65] |
| 3.0 | 2011-02-10[66] | Development and design of the GTK 3 release of the toolkit started in February 2009 during the GTK Theming Hackfest held in Dublin[67]
Completed mostly Project Ridley
All the rendering is done using Cairo GDK became more X11 agnostic XInput2, theme API is based on Cascading Style Sheets (CSS), worsening the achievable performance for 60 Hz frame rates |
3.0.12 |
| 3.2 | 2011-09-25[70] | New widgets:
New Font Chooser dialog New experimental backends: |
3.2.4 |
| 3.4 | 2012-03-26[71] | Menu support in GtkApplication
A new color chooser Added support for touch devices Added support for smooth scrolling GtkScrolledWindow will do kinetic scrolling with touch devices macOS support is improved This is the first version of GTK 3 that works well on Windows The Wayland backend is updated to the current Wayland version Spin buttons have received a new look Accessibility: the treeview accessible support is rewritten More complete CSS theming support |
3.4.4 |
| 3.6 | 2012-09-24[72] | New widgets:
Vertical spin buttons CSS animations, blur shadows Support for cross-fading and transitions in themes |
3.6.5 |
| 3.8 | 2013-03-25[73] | Wayland 1.0 stable support
Support for the broadwayd server Improved theming Better geometry management Touch improvements Support with the window manager for the frame synchronization protocol GdkFrameClock added[74] |
3.8.9 |
| 3.10 | 2013-09-23[75] | New widgets:
Support for Wayland 1.2
Added:
Removed:
Tear-off menu-items, plus many GTK settings The modern GTK drawing model |
3.10.9 |
| 3.12 | 2014-03-25[76] | Client-side decorations[77]
Support for Wayland 1.5 New widget: GtkPopover (an alternative to menus and dialogs) |
3.12.2 |
| 3.14 | 2014-09-22[78] | GtkInspector (a copy of gtkparasite) introduced[79][80]
Improved support for gestures/multi-touch merged[81][82] Deprecated:[83]
Most widgets converted to use gestures internally Wayland supports GNOME Shell classic mode[84] |
3.14.15 |
| 3.16 | 2015-03-22[85] | GDK supports rendering windows using OpenGL for X11 and Wayland using libepoxy
New widgets:
|
3.16.7 |
| 3.18 | 2015-09-23[88] | Add CSS node infrastructure
More filechooser design refresh and better filechooser search Dropped Windows XP support Model support for list and flow box Kinetic touchpad scrolling Touchpad gestures (Wayland) gtk-builder-tool utility Output-only windows |
3.18.9 |
| 3.20 | 2016-03-21[89] | Further Integration of CSS nodes[90]
Move drag and drop down to GDK New widget: GtkShortcutsWindow (shows keyboard shortcuts and gestures of an application) |
3.20.10 |
| 3.22 | 2016-09-21[91] | Last 3.x release[92]
Wayland tablet support is merged,[93] support for graphics tablets is considered feature complete[94] GTK 3.22 shall be as rock-stable (and hence "boring") as GTK 2[30][95][96] |
for 3+ years 3.22.29 |
| 3.24 | 2018-09-03[97] | 3.22 was supposed to be the last version of GTK 3 series
Dependency bumps – require:
New font chooser features:
New Emoji features:
Other new APIs: gdk_window_move_to_rect Wayland: use anonymous shared memory on FreeBSD Backported event controllers from GTK 4:
Deprecate a few APIs that are gone in GTK 4:
|
3.23.0 3.23.1 3.23.2 3.23.3 3.24.0 ...3.24.5 3.24.14 ... 3.24.51 |
| 3.90 | 2017-03-31[98] | GTK Scene Graph Kit (GSK) merged[7]
Remove any API marked as deprecated Heavy development |
3.89.1 3.89.2 |
| 3.92 | 2017-10-18[100][101] | As GNOME 3.26 was released already on September 13, 2017,[102] it was not based on GTK 3.92.
GNU autotools was replaced with Meson. |
3.91.0 3.91.1 |
| 3.94 | 2018-06-26[103] | 3.93
GdkWindow renamed to GdkSurface New abstraction for drawable content: GdkPaintable There is support for displaying media with:
|
3.93 3.94.0 |
| 3.96 | 2019-05-07[104] | The gtk4-builder-tool simplify command has gained a --3to4 option to convert GTK3 ui files to GTK4; though with AMTK menus, toolbars or other objects like GtkShortcutsWindow are created programmatically (not with a *.ui file), but with convenient APIs.[105]
GtkWidget can now use a GtkLayoutManager for size allocation
Focus handling has been rewritten, and focus-change event generation has been unified with crossing events Events have been simplified and are just used for input:
|
3.93 3.94.0 |
| 3.98 | 2020-02-10[104] |
|
3.96.0 |
| 3.99.0 | 2020-07-31[107] |
|
3.99.4 |
| 4.0 | 2020-12-16[109] | 4.0.3 | |
| 4.2 | 2021-03-30[110] | 4.2.1 | |
| 4.4 | 2021-08-23[111] | 4.4.1 | |
| 4.6 | 2021-12-30[112] | 4.6.9 | |
| 4.8 | 2022-09-06[113] | 4.8.3 | |
| 4.10 | 2023-03-04[114] | GtkFileChooser deprecated (use GtkFileDialog)[115] | 4.10.5 |
| 4.12 | 2023-08-05[116] | 4.12.5 | |
| 4.14 | 2024-03-12[117] | 4.14.6 | |
| 4.16 | 2024-06-09[118] | 4.16.12 | |
| 4.18 | 2025-03-14[119] | 4.18.6 | |
| 4.19 | 2025-04-06[120] | 4.19.4 | |
| 4.20 | 2025-08-29[121] | 4.20.2 | |
| 4.21 | 2025-09-29[122] | 4.21.0 | |
Legend: Unsupported Supported Latest version Preview version Future version | |||
See also
[edit]- Client-side decoration
- List of widget toolkits
- gtkmm – C++ bindings for GTK
- Enlightenment Foundation Libraries (EFL) – widget toolkit written for the Enlightenment window manager
- FLTK – a light, cross-platform, non-native widget toolkit
- Fox toolkit – a fast, open source, cross-platform widget toolkit
- IUP – a multi-platform toolkit for building native graphical user interfaces
- Ultimate++
- Visual Component Library (VCL)
References
[edit]- ^ "4.20.2". September 30, 2025. Retrieved September 30, 2025.
- ^ "The GTK Open Source Project on Open Hub: Languages Page". www.openhub.net. Archived from the original on March 28, 2019. Retrieved March 28, 2019.
- ^ "A brief description on how GTK was born". www.gtk.org. Archived from the original on June 9, 2023. Retrieved July 5, 2023.
- ^ Bassi, Emmanuele (February 6, 2019). "Project rename to "GTK"". mail.gnome.org. GNOME mailinglist. Archived from the original on November 7, 2020. Retrieved February 7, 2019.
- ^ The GTK+ Team. "GTK+ Features". Archived from the original on May 25, 2019. Retrieved September 8, 2014.
- ^ "Documentation". www.x.org. Archived from the original on December 21, 2019. Retrieved November 22, 2019.
- ^ a b "Projects/GTK/Roadmap - GNOME Wiki!". wiki.gnome.org. Archived from the original on May 22, 2019. Retrieved November 22, 2019.
- ^ "GTK 4.0 – GTK Development Blog". December 16, 2020. Archived from the original on May 28, 2023. Retrieved October 18, 2021.
- ^ "Robin Rowe / GTK1 · GitLab". GitLab. Archived from the original on March 9, 2023. Retrieved February 22, 2023.
- ^ "GTK+ 3 Reference Manual". Archived from the original on July 15, 2025. Retrieved July 19, 2025.
- ^ a b "Using GTK+ with Broadway". GNOME Developer. GNOME. Archived from the original on June 14, 2021. Retrieved March 6, 2018.
- ^ a b "Broadway - GitHub symbiose/symbiose Wiki". GitHub. Archived from the original on June 28, 2023. Retrieved March 6, 2018.
- ^ mclasen (February 1, 2025). "What's new in GTK, winter 2025 edition". GTK Development Blog. Retrieved September 26, 2025.
The X11 and Broadway backends have been deprecated, as a clear signal that we intend to remove them in the GTK 5. In the meantime, they continue to be available.
- ^ a b GTK Development Team. "Gtk – 4.0: Common Questions". Retrieved September 26, 2025.
Can I improve the performance of my application by using another backend of cairo (such as GL)? No. Most drawing in GTK is not done via cairo anymore (but instead by the GL or Vulkan renderers of GSK).
- ^ The GTK+ Team. "GTK+ Language Bindings". www.gtk.org. Archived from the original on May 25, 2019. Retrieved June 3, 2017.
- ^ GUADEC. "Cambalache: road to version 1.0".
- ^ "glade - man pages section 1: User Commands". docs.oracle.com. Retrieved September 11, 2024.
- ^ "Debian -- Package Search Results -- gazpacho". packages.debian.org. Archived from the original on June 28, 2023. Retrieved November 22, 2019.
- ^ "Nothing-personal - A development site for Crow Designer, GuiLoader and Rally - Google Project Hosting". Archived from the original on January 24, 2013. Retrieved February 17, 2014.
- ^ "GTK Inspector". GNOME Developer Documentation. Retrieved September 14, 2024.
- ^ "Introducing GtkInspector". May 15, 2014. Archived from the original on May 17, 2014. Retrieved May 17, 2014.
- ^ "Another GtkInspector update". July 11, 2014. Archived from the original on July 14, 2014. Retrieved July 13, 2014.
- ^ "GNOME Quick SWOT Analysis". The GNOME Project. Archived from the original on March 18, 2014. Retrieved March 18, 2014.
- ^ "GNOME Languages". Ohloh. Black Duck Software. Archived from the original on May 22, 2014. Retrieved May 22, 2014.
- ^ "About". GNOME Users And Developers European Conference (GUADEC). Archived from the original on October 4, 2011. Retrieved December 3, 2011.
- ^ "GTK 4.0". GTK development blog. December 16, 2020. Archived from the original on May 28, 2023. Retrieved October 18, 2021.
- ^ "Build system change GTK's master branch". mail.gnome.org. Archived from the original on August 15, 2017. Retrieved October 29, 2018.
- ^ "How Does One Create A Gtk+ Application? – Morten Welinder". blogs.gnome.org. June 23, 2014. Archived from the original on July 1, 2014. Retrieved June 3, 2017.
- ^ mclasen (November 20, 2015). "A GTK+ update". Goings on. Archived from the original on May 2, 2016. Retrieved June 3, 2016.
- ^ a b "GUADEC2013: Benjamin Otte talks about GTK+". GUADEC. Archived from the original on March 6, 2014. Retrieved March 5, 2014.
- ^ "Gtk: Preparing for GTK 5". docs.gtk.org. Retrieved August 19, 2025.
- ^ "Gtk: Migrating from GTK 2.x to GTK 3". docs.gtk.org. Retrieved August 19, 2025.
- ^ "Gtk: Migrating from GTK 3.x to GTK 4". docs.gtk.org. Retrieved August 19, 2025.
- ^ Aurélien Gâteau (October 3, 2021). "The story behind Gwenview name". agateau.com. Archived from the original on April 22, 2024. Retrieved December 15, 2024.
Yes, you read this right! Gwenview started its life as a GTK+ application!
- ^ Larabel, Michael (January 12, 2014). "The Biggest Problem With GTK & What Qt Does Good". Phoronix. Archived from the original on July 1, 2016. Retrieved September 10, 2014.
- ^ Hong Jen Yee (March 26, 2013). "PCManFM Qt 0.1.0 released". Archived from the original on June 7, 2013. Retrieved September 10, 2014.
- ^ "Audacious - An Advanced Audio Player". audacious-media-player.org. Archived from the original on July 28, 2019. Retrieved November 22, 2019.
- ^ Lindgren, John (May 6, 2014). "Ugly window decorations and how to fix them (GTK 3.12)". Archived from the original on October 13, 2014. Retrieved October 21, 2014.
- ^ Gerald Combs (October 15, 2013). "We're switching to Qt". Archived from the original on October 19, 2013. Retrieved August 19, 2015.
- ^ "Things to do for Qt port · Issue #3521 · wwmm/easyeffects". GitHub. Retrieved July 21, 2025.
- ^ "GTK+". WxWidgets Compared To Other Toolkits. Archived from the original on October 5, 2007. Retrieved August 28, 2007.
- ^ "LinuxWorld - Where did Spencer Kimball and Peter Mattis go?". Archived from the original on April 17, 1999. Retrieved August 19, 2013.
- ^ "What is the + in GTK+?". 2011. Archived from the original on March 26, 2012. Retrieved March 18, 2014.
- ^ "GTK+-2.0.0 release notes".
- ^ "GTK+ to Use Cairo Vector Engine". February 5, 2005. Retrieved December 27, 2009.
- ^ "GTK+ 3.0.0 released".
- ^ "Gtk: Migrating from GTK 2.x to GTK 3". docs.gtk.org. Archived from the original on May 26, 2023. Retrieved June 16, 2022.
All drawing in GTK 3 is done via Cairo.
- ^ "Rename some references to GTK+ (d080be3e) · Commits · GNOME / gtk". gitlab.gnome.org. February 4, 2019. Archived from the original on February 25, 2021. Retrieved February 5, 2019.
- ^ Clasen, Matthias. "GTK+ 4 Status Update" (PDF). Fedora People. Archived (PDF) from the original on April 22, 2024. Retrieved April 22, 2024.
- ^ Amundson, Shawn T. (April 13, 1998). "ANNOUNCE: GTK+ 1.0.0 Released!". GNOME Mail Services (Mailing list). Archived from the original on March 12, 2019. Retrieved May 20, 2019.
- ^ Amundson, Shawn T. (February 25, 1999). "ANNOUNCE: GTK+ and GLib 1.2.0 Released". GNOME Mail Services (Mailing list). Archived from the original on August 10, 2020. Retrieved May 20, 2019.
- ^ Taylor, Owen (March 11, 2002). "GTK+-2.0.0 released". GNOME Mail Services (Mailing list). Archived from the original on August 10, 2020. Retrieved May 20, 2019.
- ^ Taylor, Owen (December 22, 2002). "GTK+-2.2.0 released". GNOME Mail Services (Mailing list). Archived from the original on August 10, 2020. Retrieved May 20, 2019.
- ^ Taylor, Owen (March 16, 2004). "GTK+-2.4.0 released". GNOME Mail Services (Mailing list). Archived from the original on August 10, 2020. Retrieved May 20, 2019.
- ^ Clasen, Matthias (December 16, 2004). "GTK+-2.6.0 released". GNOME Mail Services (Mailing list). Archived from the original on August 10, 2020. Retrieved May 20, 2019.
- ^ Clasen, Matthias (August 13, 2005). "GTK+ 2.8.0 released". GNOME Mail Services (Mailing list). Archived from the original on August 10, 2020. Retrieved May 20, 2019.
- ^ Clasen, Matthias (July 3, 2006). "GTK+ 2.10 released". GNOME Mail Services (Mailing list). Archived from the original on January 22, 2021. Retrieved May 20, 2019.
- ^ Clasen, Matthias (September 14, 2007). "GTK+ 2.12 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (September 4, 2008). "GTK+ 2.14.0 released". GNOME Mail Services (Mailing list). Archived from the original on August 10, 2020. Retrieved May 20, 2019.
- ^ Clasen, Matthias (March 13, 2009). "GTK+ 2.16.0 released". GNOME Mail Services (Mailing list). Archived from the original on June 3, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (September 23, 2009). "GTK+ 2.18.0 released". GNOME Mail Services (Mailing list). Archived from the original on June 3, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (March 23, 2010). "GTK+ 2.20.0 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (September 23, 2010). "GTK+ 2.22.0 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (January 20, 2011). "GTK+ 2.24.0". GNOME Mail Services (Mailing list). Archived from the original on May 8, 2019. Retrieved May 20, 2019.
- ^ "Tags · GNOME / gtk · GitLab". GitLab. December 21, 2020. Archived from the original on December 4, 2023. Retrieved October 18, 2023.
- ^ Clasen, Matthias (February 10, 2011). "GTK+ 3.0.0 released". GNOME Mail Services (Mailing list). Archived from the original on March 12, 2019. Retrieved May 20, 2019.
- ^ "Gtk+ 3.0 Theming API Hackfest". Silicon Island. Archived from the original on July 17, 2011. Retrieved June 3, 2017.
- ^ "Gtk+ 3 roadmap draft". Archived from the original on April 12, 2009. Retrieved June 3, 2017.
- ^ "Attic/ProjectRidley - GNOME Wiki!". wiki.gnome.org. Archived from the original on March 4, 2016. Retrieved March 29, 2014.
- ^ Clasen, Matthias (September 25, 2011). "GTK+ 3.2.0". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (March 26, 2012). "GTK+ 3.4.0 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (September 24, 2012). "GTK+ 3.6.0 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (March 25, 2013). "GTK+ 3.8.0 released". GNOME Mail Services (Mailing list). Archived from the original on March 3, 2016. Retrieved May 20, 2019.
- ^ "Frame clock: GDK 3 Reference Manual". developer.gnome.org. Archived from the original on April 14, 2017. Retrieved April 13, 2017.
- ^ Clasen, Matthias (September 23, 2013). "GTK+ 3.10.0 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (March 25, 2014). "GTK+ 3.12 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ "Client-side decorations in themes | Goings on". December 5, 2013. Archived from the original on September 19, 2015. Retrieved December 31, 2015.
- ^ Clasen, Matthias (September 22, 2014). "GTK+ 3.14.0 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ Matthias Clasen (May 15, 2014). "GtkInspector Author's blog entry". Archived from the original on May 17, 2014. Retrieved May 17, 2014.
- ^ "GtkInspector in GNOME wiki". May 15, 2014. Archived from the original on May 24, 2014. Retrieved May 17, 2014.
- ^ "Merging gestures into 3.14". May 23, 2014. Archived from the original on September 14, 2016. Retrieved May 23, 2014.
- ^ "RFC: gestures". March 4, 2014. Archived from the original on May 24, 2014. Retrieved May 23, 2014.
- ^ "gtk+ 3.13.2". May 27, 2014. Archived from the original on May 29, 2014. Retrieved May 28, 2014.
- ^ "gtk+ 3.13.3". June 24, 2014. Archived from the original on December 15, 2014. Retrieved June 25, 2014.
- ^ Clasen, Matthias (March 22, 2015). "GTK+ 3.16.0 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ online, heise (March 25, 2015). "Linux-Desktop: Neues Gnome zeigt Nachrichten oben". heise online. Archived from the original on June 25, 2016. Retrieved June 3, 2017.
- ^ "GTK+ 3.16.0 released". mail.gnome.org. Archived from the original on April 7, 2016. Retrieved June 3, 2017.
- ^ Nestor, Marius (September 24, 2015). "GTK+ 3.18.0 Officially Released as Part of the GNOME 3.18 Desktop Environment". Softpedia. Archived from the original on May 25, 2019. Retrieved May 25, 2019.
- ^ Clasen, Matthias (March 21, 2016). "GTK+ 3.20". GNOME Mail Services (Mailing list). Archived from the original on March 12, 2019. Retrieved May 20, 2019.
- ^ "GTK+ 3.20 – Style Classes and Element Names". November 20, 2015. Archived from the original on March 5, 2016. Retrieved December 18, 2015.
- ^ Clasen, Matthias (September 21, 2016). "GTK+ 3.22 released". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ "Versioning and long term stability promise in GTK". GTK development blog. September 1, 2016. Archived from the original on September 21, 2016. Retrieved September 2, 2016.
- ^ "GTK+ Wayland tablet support is merged – Carlos Garnacho". April 6, 2016. Archived from the original on April 16, 2016. Retrieved April 8, 2016.
- ^ "hutterer input". www.x.org. Archived from the original on September 23, 2016. Retrieved September 23, 2016.
- ^ a b "Gtk 4.0 will not be stable until Gtk 4.6". June 13, 2016. Archived from the original on June 23, 2016. Retrieved June 15, 2016.
- ^ a b "Gtk 5.0 will not be stable until Gtk 5.6". June 14, 2016. Archived from the original on June 23, 2016. Retrieved June 15, 2016.
- ^ Clasen, Matthias (September 3, 2018). "gtk+ 3.24.0". GNOME Mail Services (Mailing list). Archived from the original on May 25, 2019. Retrieved May 20, 2019.
- ^ Clasen, Matthias (March 31, 2017). "gtk+ 3.90.0". GNOME Mail Services (Mailing list). Archived from the original on December 29, 2017. Retrieved May 20, 2019.
- ^ "Commits · master · GNOME / gtk". GitLab. Archived from the original on June 22, 2020. Retrieved November 22, 2019.
- ^ Clasen, Matthias (October 18, 2017). "gtk+ 3.92.1". GNOME Mail Services (Mailing list). Archived from the original on December 29, 2017. Retrieved May 20, 2019.
- ^ Clasen, Matthias (October 23, 2017). "GTK+ 3.92". GTK Development Blog. Archived from the original on May 25, 2019. Retrieved May 25, 2019.
- ^ "GNOME 3.26 Released". September 13, 2017. Archived from the original on March 16, 2021. Retrieved October 19, 2017.
- ^ Clasen, Matthias (June 26, 2018). "gtk+ 3.94.0". GNOME Mail Services (Mailing list). Archived from the original on July 5, 2018. Retrieved May 20, 2019.
- ^ a b Clasen, Matthias (May 7, 2019). "gtk 3.96". GNOME Mail Services (Mailing list). Archived from the original on May 28, 2019. Retrieved May 28, 2019.
- ^ "Introducing amtk". Archived from the original on June 22, 2020. Retrieved May 4, 2020.
- ^ Clasen, Matthias (February 13, 2020). "GTK 3.98". GTK+ Development Blog. Archived from the original on February 18, 2020. Retrieved February 18, 2020.
- ^ a b Clasen, Matthias (June 9, 2021). "gtk 4.3.1". FTP Releases (Mailing list). Archived from the original on July 10, 2021. Retrieved July 10, 2021.
- ^ "Emmanuele Bassi / guadec-2020". GitLab. Archived from the original on August 15, 2020. Retrieved September 12, 2020.
- ^ Clasen, Matthias (December 16, 2020). "gtk 4.0.0". GNOME Mail Services (Mailing list). Archived from the original on October 28, 2021. Retrieved December 16, 2020.
- ^ Clasen, Matthias (March 30, 2021). "gtk 4.2.0". GNOME Mail Services (Mailing list). Archived from the original on October 27, 2021. Retrieved March 30, 2021.
- ^ Clasen, Matthias (August 23, 2021). "gtk 4.4.0". GNOME Mail Services (Mailing list). Archived from the original on August 24, 2021. Retrieved January 23, 2022.
- ^ Clasen, Matthias (December 30, 2021). "gtk 4.6.0". FTP Releases (Mailing list). Archived from the original on January 23, 2022. Retrieved January 23, 2022.
- ^ Clasen, Matthias (September 6, 2022). "gtk 4.8.0". Archived from the original on January 11, 2023. Retrieved January 11, 2023.
- ^ "NEWS · 4.10.1 · GNOME / gtk · GitLab". GitLab. March 13, 2023. Archived from the original on April 19, 2023. Retrieved April 19, 2023.
- ^ "On deprecations – GTK Development Blog". October 30, 2022. Archived from the original on February 28, 2024. Retrieved April 21, 2024.
- ^ Clasen, Matthias (July 28, 2023). "NEWS · 4.12.0 · GNOME / gtk · GitLab". GitLab. Retrieved January 4, 2025.
- ^ Clasen, Matthias (March 12, 2024). "NEWS · 4.14.0 · GNOME / gtk · GitLab". GitLab. Retrieved January 4, 2025.
- ^ Clasen, Matthias (September 7, 2024). "NEWS · 4.16.0 · GNOME / gtk · GitLab". GitLab. Retrieved January 4, 2025.
- ^ Clasen, Matthias (March 14, 2025). "NEWS · 4.18.0 · GNOME / gtk · GitLab". GitLab. Retrieved July 28, 2025.
- ^ Clasen, Matthias (April 6, 2025). "NEWS · 4.19.0 · GNOME / gtk · GitLab". GitLab. Retrieved October 23, 2025.
- ^ Clasen, Matthias (August 29, 2025). "NEWS · 4.20.0 · GNOME / gtk · GitLab". GitLab. Retrieved October 23, 2025.
- ^ Clasen, Matthias (September 29, 2025). "NEWS · 4.21.0 · GNOME / gtk · GitLab". GitLab. Retrieved October 23, 2025.
Bibliography
[edit]- Krause, Andrew (April 23, 2007), Foundations of GTK+ Development (1st ed.), Apress, ISBN 978-1-59059-793-4
- Wright, Peter (May 15, 2000), Beginning GTK+ and GNOME (1st ed.), Peer Information, ISBN 978-1-86100-381-2
- Logan, Syd (September 6, 2001), Gtk+ Programming in C (1st ed.), Prentice Hall, ISBN 978-0-13-014264-1, archived from the original on September 30, 2012, retrieved August 15, 2009
External links
[edit]Introduction
Definition and purpose
GTK is a free and open-source multi-platform widget toolkit designed for creating graphical user interfaces (GUIs).[1] Originally developed as the GIMP Toolkit for the GNU Image Manipulation Program (GIMP), it has evolved into a versatile framework used across various applications.[2] The primary purpose of GTK is to supply developers with a comprehensive collection of widgets—such as buttons, windows, and containers—along with drawing primitives via tools like Cairo and event handling through an event-driven signal system.[8] This enables the construction of responsive user interfaces for desktop applications, making it particularly suitable for environments like GNOME, where it serves as the core UI foundation.[7] Key features of GTK include robust cross-platform compatibility across Linux, Windows, and macOS, allowing applications to maintain a native look and feel via theme support, including CSS-based customization.[9] It also integrates accessibility standards through the GtkAccessible interface, ensuring support for assistive technologies and diverse user needs.[10] In distinction from many similar toolkits, GTK emphasizes a C-based API augmented by the GObject system for object-oriented programming, facilitating efficient and extensible GUI development.[8]Licensing and development
GTK is licensed under the GNU Lesser General Public License (LGPL) version 2.1 or later, which permits its use in both free and proprietary software applications through dynamic linking without requiring the disclosure of source code for the linking application.[1][11] This licensing choice facilitates widespread adoption by allowing developers to integrate GTK into closed-source projects while ensuring the toolkit itself remains freely modifiable and redistributable. Development of GTK is primarily led by the GNOME project, a community-driven initiative focused on creating free desktop environments and applications. Contributions come from a diverse group of volunteers, alongside significant input from companies such as Red Hat and Collabora, whose engineers dedicate time to enhancing the toolkit's features and performance.[12][13] For instance, Red Hat has been a leading corporate contributor to GNOME-related projects, including GTK, by employing developers who commit code and participate in upstream improvements.[13] Governance of GTK development is decentralized and community-oriented, with key decisions made by the GTK maintainers and the broader GNOME community through discussions and collaboration. Release cycles are coordinated via the project's GitLab repository, where merge requests, issue tracking, and versioning follow a structured process to ensure stable and timely updates.[14] Community participation occurs primarily through public mailing lists, such as the GTK development list for discussions and feedback, and in-person or virtual hackfests that facilitate collaborative coding sessions and planning.[15][16] Funding for GTK development is sustained by the GNOME Foundation, a non-profit organization that receives sponsorships from entities committed to free software, including corporate memberships and donations without any single entity holding ownership. These resources support developer stipends, infrastructure, and events, enabling ongoing maintenance and innovation in the toolkit.[17][18]History
Origins and early versions
GTK originated in the mid-1990s as part of the development of the GNU Image Manipulation Program (GIMP), an open-source image editing application created by university students Spencer Kimball and Peter Mattis at the University of California, Berkeley. Initially, GIMP relied on the Motif widget toolkit, but its restrictive licensing and limitations for plugin development prompted Mattis to develop a custom alternative. This new toolkit, initially named the GIMP Tool Kit (GTK) and comprising the GIMP Drawing Kit (GDK) for low-level graphics, was designed specifically for GIMP's needs and emphasized a free software approach compatible with the GNU project. Development began around 1996 during the GIMP 0.60 series, with the toolkit evolving significantly by early 1997.[19] The first stable release of GTK 1.0 arrived on April 13, 1998, marking the toolkit's maturation after two years of iterative improvements driven by GIMP's requirements. Spanning from its initial versions in 1997 through to 2002, the GTK 1 era introduced a core set of widgets including buttons, menus, windows, and specialized elements like rulers and color selectors tailored for image manipulation. It adopted an event-driven programming model, where applications responded to user interactions via callbacks, and relied on an X11 backend through GDK for rendering and window management on Unix-like systems, ensuring network transparency inherited from X11. Licensed under the GNU Lesser General Public License (LGPL) from its inception, GTK enabled both open-source and proprietary applications to link against it without requiring full source disclosure.[20][2] Key innovations in GTK 1 included a lightweight C-based object system that supported inheritance through macros, allowing developers to derive custom widgets from base classes, and a signals mechanism for event handling that functioned similarly to slots in other frameworks, enabling flexible connections between UI events and application logic. This signals system broadcasted notifications for actions like button clicks or window resizes, promoting modular and extensible code without deep dependencies on the underlying windowing system. These features provided a foundation for rapid GUI prototyping in C, prioritizing simplicity and performance on resource-constrained 1990s hardware.[21] Early adoption of GTK centered on open-source projects, with GIMP serving as its primary user and ongoing driver for enhancements until the toolkit's separation into an independent project in 1997. The GNOME desktop environment, founded on August 15, 1997, by Miguel de Icaza and Federico Mena, quickly embraced GTK 1 as its foundational widget library, using it to build a complete free software alternative to proprietary desktops like KDE. This integration propelled GTK's use in early Unix desktop applications, fostering a community around lightweight, customizable interfaces.[19][22]GTK 2 era
The GTK+ 2.0 release on March 11, 2002, marked a significant milestone as a major rewrite of the toolkit, introducing foundational improvements for modern graphical user interfaces.[23] This version integrated Pango for advanced text layout and rendering, enabling comprehensive Unicode support and enhanced internationalization across all widgets.[23] Additionally, it featured new widgets such as GtkTextView for rich text editing, GtkTreeView for hierarchical data display, and GtkImage for image handling, alongside simplified APIs for common UI elements like dialogs and progress bars.[23] Theming capabilities were bolstered with support for themeable stock icons and images in toolbars and menus, allowing greater customization of visual appearance.[23] Subsequent updates in the GTK+ 2 series further refined rendering and accessibility. Cairo was integrated starting with version 2.8 in August 2005, providing a vector graphics library that handled anti-aliased fonts, double buffering, and high-quality 2D rendering, replacing older GDK drawing primitives.[24] Accessibility support was enabled through the ATK library, which allowed GTK+ widgets to implement interfaces for screen readers and other assistive technologies, ensuring compliance with GNOME's accessibility standards from the outset. Multi-head display handling was added in GTK+ 2.2 (December 2002), supporting multiple X servers, Xinerama configurations, and seamless window migration across screens.[2] GTK+ 2 achieved widespread adoption as the core toolkit for the GNOME 2.x desktop environment, released alongside it in 2002, and powered numerous applications including the Gedit text editor and Totem media player.[23] Its stability and incremental enhancements sustained active development through multiple point releases, with the final version, 2.24.0, arriving in January 2011. This era emphasized reliability, making GTK+ 2 the dominant choice for Linux desktop applications until the shift toward GTK+ 3. To facilitate adoption, GTK+ 2 maintained backward compatibility with GTK+ 1.x through compatibility headers and wrappers, allowing much existing code to compile and run with minimal changes despite API evolutions.[25] Projects like openSUSE's gtk1-compat provided additional shims for legacy applications, easing the transition for developers reliant on older versions.[26]GTK 3 transition
The GTK+ 3.0 release occurred on February 10, 2011, representing a major redesign from GTK 2 with the removal of numerous deprecated features, including the X11-specific drawing API, graphics contexts (GCs), colormaps, and pixmaps, in favor of exclusive Cairo-based rendering for improved consistency and performance.[27] This shift emphasized modern hardware acceleration through Cairo's vector graphics capabilities, which leverage OpenGL and other backends where supported to enhance rendering efficiency on contemporary systems.[28] Additionally, the release introduced a comprehensive theming overhaul using a CSS-like syntax, allowing developers to define styles, layouts, and animated state transitions more flexibly and expressively than the previous engine.[27] Major architectural changes in GTK 3 included a complete rework of input handling to align with the X Input Extension version 2 (XI2), providing stricter and more precise management of events from multiple pointers, keyboards, and input devices, which replaced the looser GTK 2 model and required applications to adapt to new event propagation rules.[27] For animations, the CSS theming system natively supported transitions, while integration with Clutter via the Clutter-GTK library enabled embedding advanced graphical effects and scene graphs in GTK applications, though Clutter itself entered deep maintenance mode and was deprecated by 2022.[29] HiDPI support was further bolstered starting with GTK 3.10 in September 2013, introducing scaled output modes to handle high-resolution displays by applying device pixel ratios, ensuring crisp rendering without manual developer intervention in many cases.[30] The transition to GTK 3 presented significant adoption challenges due to deliberate API and ABI breaks from GTK 2, necessitating code porting for features like drawing, event handling, and theming, which caused migration difficulties for legacy applications and led to prolonged dual-support periods in Linux distributions such as Ubuntu and Fedora, where both versions coexisted in repositories for several years to ease the shift.[31] These breaks, while enabling cleaner architecture, resulted in compatibility layers and shims being developed by some projects, slowing widespread uptake until around 2015-2017 as distributions prioritized GTK 3 for new software.[31] GTK 3 remained stable and actively maintained through incremental releases up to version 3.24 in 2019, with maintenance releases continuing as of 2025 (latest 3.24.51), receiving security updates and minor enhancements, though GTK 4 is the primary development target.[32][1]GTK 4 and beyond
GTK 4.0 was released on December 16, 2020, marking a significant evolution in the toolkit's design with the introduction of the Graphene Scene Kit (GSK) for declarative scene graph rendering, which enables more efficient custom drawing through render nodes.[5] This release also incorporated stable, non-deprecated media playback APIs via the GtkMediaControls widget, supporting formats like video and audio without reliance on external plugins.[5] Additionally, GTK 4.0 emphasized explicit state management for widgets, utilizing event controllers to handle input and gestures in a more modular and predictable manner, reducing implicit behaviors from prior versions.[5] Following the initial release, GTK 4 saw iterative enhancements, particularly in Wayland integration, with improvements to fractional scaling and monitor handling starting in version 4.14, released in March 2024 as part of GNOME 46.[33] This version set the NGL (new OpenGL) renderer as the default, providing better support for high-DPI displays and zero-copy video playback through dmabuf textures.[34] By GTK 4.18, released in early 2025, the legacy OpenGL renderer was fully removed to streamline maintenance on modern hardware, alongside further Wayland optimizations like refined pointer scaling to eliminate oversized cursors on fractional displays.[35] Accessibility received a major boost in 4.18 with the addition of an AccessKit backend, enabling cross-platform support for screen readers on Windows and macOS for the first time, built with the -Daccesskit=enabled meson option and activated via the GTK_A11Y=accesskit environment variable.[36] Subsequent releases include 4.20 in August 2025 with enhanced Wayland support and rendering improvements, and 4.21 in October 2025 introducing GtkSvg for animated SVG support.[37][6] GTK maintains a bi-annual cadence for stable minor releases, typically aligning with GNOME's cycle—such as 4.14 in spring 2024 and 4.18 in spring 2025—with odd-numbered minors (e.g., 4.13, 4.17) serving as development snapshots for testing upcoming features.[4] As of November 2025, groundwork for GTK 5 focuses on backend unification, prioritizing Wayland as the primary display server while deprecating X11 and Broadway backends for removal in the next major version, alongside performance optimizations in rendering and media handling.[35] No firm release date has been announced, emphasizing stability in the GTK 4 series before transitioning.Software Architecture
Core libraries (GDK and GSK)
GDK, standing for GIMP Drawing Kit, serves as the low-level windowing abstraction layer in GTK, providing a unified API that shields applications from platform-specific details of window management, event handling, and input processing. It supports multiple backends, including X11 via GdkX11, Wayland via GdkWayland, Win32 for Windows, and Quartz for macOS, allowing seamless portability across Unix-like systems, Windows, and Apple platforms. Core components encompass GdkSurface objects, which represent drawable areas for content rendering, and event mechanisms that capture user inputs such as keyboard presses, mouse movements, and touch gestures, along with system events like window resizes or focus changes. This abstraction enables developers to write cross-platform code without direct interaction with underlying APIs like Xlib, Wayland protocols, or Win32 GDI. The pluggable backend architecture of GDK has evolved to enhance flexibility, permitting runtime selection or switching of implementations based on the environment, which was refined in GTK 4 to better support modern compositors and high-DPI displays. For instance, GDK's input device model, through classes like GdkDevice, categorizes peripherals into logical seats for multi-user scenarios, ensuring accurate event routing in complex setups. Additionally, GDK integrates with graphics contexts, such as GdkGLContext, to facilitate hardware-accelerated drawing while maintaining portability. GSK, or GTK Scene Graph Kit, forms the rendering abstraction introduced in GTK 4, designed to efficiently process and draw the widget hierarchy using a scene graph paradigm. It transforms GTK's widget tree into a graph of render nodes—such as containers, blends, and transforms—that can be optimized and rendered via GPU pipelines supporting OpenGL or Vulkan, thereby achieving hardware acceleration for complex UIs. This node-based structure allows for advanced operations like culling invisible elements and batching draw calls, significantly improving performance over CPU-based rendering in prior versions. GSK depends on libraries like Graphene for vector mathematics to handle 2D transformations and projections accurately. The interplay between GDK and GSK establishes a clear division: GDK delivers the foundational surfaces and event infrastructure, upon which GSK constructs and renders content, enabling capabilities such as offscreen rendering for print/export and fluid animations through synchronized frame timing. In GTK 4, GSK supplants the legacy OpenGL renderer, deprecating direct GL areas for standard widget drawing in favor of a unified scene graph that integrates with GDK's paintables for extensible content like icons or textures. This evolution promotes scalability, with Vulkan serving as the default renderer on Wayland since GTK 4.16 for reduced latency and better resource utilization.[38]UI construction tools (GtkBuilder)
GtkBuilder is a class in the GTK toolkit that serves as an XML parser for constructing widget hierarchies and other objects at runtime. It reads textual descriptions of user interfaces defined in XML format, instantiating GTK widgets, windows, and supporting GObject-based classes while managing their references until finalization. The XML structure typically begins with an<interface> root element, which can include a translation domain attribute, followed by <requires> tags specifying the GTK version and <object> elements defining widgets with unique IDs, properties, signals, and child relationships. GtkBuilder supports setting properties of various types, such as strings, enums, and colors, through <property> tags, and connects signals to handlers via <signal> elements that allow attributes like after, swapped, or object for flexible event handling; custom handlers are implemented in application code and linked by name.
In usage, GtkBuilder loads UI description files, commonly with a .ui extension generated by design tools, enabling developers to separate interface definitions from implementation code for rapid prototyping and easier maintenance. It facilitates internationalization by marking translatable strings in properties with translatable="yes" and optional context or comments attributes, integrating with gettext via dgettext() for domain-specific translations. Developers instantiate a GtkBuilder object using functions like gtk_builder_new_from_file() or gtk_builder_new_from_string(), retrieve objects by ID with gtk_builder_get_object(), and manually destroy top-level windows to release resources; multiple UI sources can be added dynamically with gtk_builder_add_from_file() or exposed objects via gtk_builder_expose_object().
One key advantage of GtkBuilder is its ability to reduce boilerplate code in applications by declaratively defining complex UIs, avoiding manual widget creation and hierarchy setup in programming languages. It supports dynamic modifications, such as adding constraints or bindings post-construction, and integrates seamlessly with GObject Introspection for automatic type resolution using get_type() heuristics or explicit type-func attributes in XML, enhancing portability across language bindings. Property bindings are also supported through <binding> elements that create GBinding instances between objects, allowing reactive UI updates without custom code.
In older GTK versions, such as GTK 3, GtkBuilder was limited to traditional layout managers like boxes and grids, requiring nested structures for complex arrangements and lacking native support for relational positioning. GtkBuilder evolved significantly in GTK 4, incorporating support for constraint-based layouts via the GtkConstraintLayout class, which implements the GtkBuildable interface and uses custom <constraints> elements in XML to define widget relationships through GtkConstraint objects, including targets, sources, relations, and strengths; this enables more flexible, equation-based UI designs similar to Visual Format Language, reducing nesting and improving scalability for modern interfaces.
Language bindings and portability
GTK is primarily implemented in the C programming language, leveraging the GObject type system to provide object-oriented features such as inheritance, signals, and properties, which facilitate structured application development. This native API serves as the foundation for GTK's core functionality, including widget management and event handling. To extend GTK's usability beyond C, language bindings are generated using GObject Introspection (GI), a middleware layer that exposes the C API through metadata in XML or binary formats, enabling dynamic access from higher-level languages without manual wrapping. This approach ensures that bindings remain closely aligned with the underlying C implementation, supporting features like type safety and signal emission across languages. Prominent bindings include PyGObject for Python, which integrates GTK with Python's ecosystem for rapid prototyping and scripting, as seen in tools like GNOME's Software Center. GJS provides JavaScript support, powering GNOME Shell extensions and applications with asynchronous capabilities suited for dynamic UIs. The gtk-rs project offers safe, idiomatic Rust bindings, emphasizing memory safety and performance for systems-level applications. Vala, a GNOME-specific language, compiles to C and uses native bindings for efficient development of GTK-based apps like GNOME's core utilities. Legacy bindings such as GTK2-Perl enable Perl integration for older GTK 2.x and 3.x projects but require updates for newer versions. GTK ensures portability across operating systems including Linux, Windows, and macOS through abstract layers like GDK for windowing and input handling, allowing applications to compile and run with minimal platform-specific adjustments. Compile-time configuration via build systems like Meson adapts to target environments, while runtime detection handles variations in graphics drivers and themes. ABI stability is maintained within long-term stable series of major versions—for instance, GTK 3.22 and GTK 4.x releases promise no ABI breaks during their support lifecycle of at least three years, enabling reliable binary compatibility for bindings and applications. However, transitions between major versions, such as from GTK 3 to 4, introduce deliberate ABI breaks to remove deprecated elements and refactor internals, necessitating binding updates. Maintaining bindings poses challenges, particularly in synchronizing with GTK's evolving API, where changes to opaque structures or event systems can disrupt introspection data and require regeneration of wrappers. Ensuring signal compatibility remains critical, as GObject signals underpin event-driven programming; mismatches in parameter types or emission semantics across versions can lead to runtime errors in bound languages, demanding rigorous testing and version-specific forks. Emerging efforts, such as the ongoing WebAssembly and WebGPU port of GTK 4, aim to extend portability to browser environments, with pre-alpha demos demonstrating widget rendering at over 200 frames per second, though full ecosystem integration is incomplete. Additionally, the Broadway backend supports HTML5-based rendering for web deployment, further broadening cross-platform reach.Rendering backends
GTK's rendering backends are implemented within the GDK library, which provides a platform-agnostic abstraction layer for low-level graphics operations across various display systems. These backends adapt GTK applications to specific windowing systems, enabling cross-platform compatibility while handling native interactions. The primary active backends in GTK 4 include Wayland for modern Linux compositors, X11 as a legacy option for Unix-like systems, Broadway for HTML5-based remote rendering in web browsers, Win32 for Windows environments, and Quartz for macOS integration. An experimental Android backend was introduced in GTK 4.18 for mobile platform support. Legacy backends such as DirectFB, designed for embedded systems without a full windowing stack, were supported up to GTK 2 but removed in GTK 3 due to lack of maintenance. Similarly, the Mir backend, introduced in GTK 3.16 for Ubuntu's Mir display server, was dropped in GTK 4 as Mir adoption declined. The evolution of GTK's rendering backends reflects a strategic shift from X11 dominance to prioritizing Wayland as the default protocol in GTK 4, aligning with broader Linux desktop trends toward modern, secure compositing. In early versions, X11 was the sole focus, but multi-backend support emerged to accommodate diverse platforms; by GTK 4, Wayland became the preferred backend, with X11 and Broadway deprecated in 2025 to signal their planned removal in GTK 5. This deprecation means no new features, such as DMA-BUF support or Vulkan integration, will be added to X11, emphasizing resource allocation to Wayland. The Vulkan renderer, part of the GSK scene graph kit, provides hardware-accelerated rendering across compatible GDK backends, including Wayland, and has been the default on Wayland since GTK 4.16.[38] Functionally, these backends manage core interactions with the underlying display server, including the creation and configuration of surfaces for windows, allocation and submission of buffers for content updates, and coordination with compositors for efficient rendering and input handling. For instance, the Wayland backend uses wl_surface and related protocols to negotiate buffer formats and handle subsurface attachments, while Win32 leverages Windows GDI or DirectComposition APIs for similar tasks on that platform. This abstraction ensures GTK widgets render consistently regardless of the backend, with GDK translating high-level requests into native calls. Backend selection occurs at runtime via the GDK_BACKEND environment variable, allowing users or applications to specify preferences like "wayland,x11" to prioritize Wayland and fall back to X11 if needed; the "help" option lists compiled-in backends. Recent developments in GTK 4.18, released in early 2025, have significantly enhanced Wayland support, particularly resolving longstanding issues with fractional scaling by accurately computing pointer sizes and output scales in compositor interactions. These improvements enable smoother handling of non-integer scaling factors, such as 125% or 150%, improving usability on high-DPI displays without relying on integer approximations that previously caused visual artifacts. The update also includes better drag-and-drop surface management and clipboard stability on Wayland, reinforcing its role as the flagship backend.Development Practices
Build systems and automation
GTK employs the Meson build system paired with the Ninja backend for compiling both the library itself and applications built upon it, a shift implemented starting with GTK 4 to replace the older Autotools system used in GTK 3.[39][40] Meson provides a fast, user-friendly configuration process via commands likemeson setup, while Ninja enables rapid incremental builds, significantly improving development iteration times over Autotools' configure and make workflows.[41][42] This combination supports multiple build types, including debug for validation during development and release for optimized production use.[39]
Key dependencies for building GTK include core libraries such as GLib for foundational utilities, Pango for text layout, Cairo for 2D rendering, and ATK for accessibility support, all integrated through pkg-config to manage compilation flags and library paths via .pc files.[39][43] Developers set environment variables like PKG_CONFIG_PATH to locate these dependencies, ensuring seamless linkage without manual flag specification; optional components like Wayland protocols or libepoxy for OpenGL can be enabled during Meson configuration for specific backends.[39]
Automation in GTK development leverages GitLab CI/CD pipelines to handle continuous integration, testing across platforms including Linux (Fedora), Windows (via MSYS2 and MinGW cross-compilation), macOS (arm64), and even Android.[44] These pipelines execute stages such as preparation, building with Meson and Ninja, analysis, and Flatpak packaging for demo applications, utilizing tools like ccache for accelerated recompilation and JUnit for test reporting.[44] For distribution packaging, GTK supports formats like Debian's .deb and Red Hat's .rpm, where Meson-generated builds are adapted into native installers, often via the plain build type to align with distro-specific flags.[39]
GTK 4 introduces stricter build requirements compared to prior versions, mandating Meson without Autotools fallbacks and excluding legacy compatibility options like deprecated X11 behaviors, which streamlines the system but requires updated dependency versions and configuration.[39][40] This ensures a more modern, efficient toolchain while supporting cross-platform portability through explicit backend selections in Meson.[39]