As shown in the table below, GTK has a range of bindings for various programming languages that implement some or all of its feature set. GTK 2 is unsupported now, so some languages below lack current GTK support.

  • GObject (GOB) was initially written as a central component of GTK, but outsourced into GLib.
  • GObject Introspection is a middleware layer between C libraries (using GObject) and language bindings, e.g. PyGObject uses this, while PyGTK does not.
  • Official GNOME Bindings follow the GNOME release schedule which guarantees API stability and time-based releases.
  • Glade Interface Designer
LanguageNameSupported?LicenseNotes
2.243.124.0GIROfficial
AdaPartialPartial?YesNoGPL-3Supported up to 3.14.
CGTKYesYesYes—N/aYesLGPL-2.1Native, no binding needed.
C++gtkmmYesYesYesNoYesLGPL-2.1
C# and other CLI languagesGtk#PartialNo?NoYesLGPL-2.1Support for GTK 2 is available up to 2.12.
NoYesNoNoNoLGPL-2.1Support for GTK 3 is available up to 3.22.
??PartialPartialNoMIT
CrystalNoYesPartialYesNoBSD
NoNoYesYesNoMIT
DYesYes?YesNoLGPL-3 with exceptionsSupported since 2.12
ErlangPartialNo?NoNoMITNo, partly supported up to 2.16
FortranPartialPartialPartialNoNoGPL-3Supported since 2.24. Supports GTK 3 and GTK 4.
FreeBASICGTK bindingsYesPartial?NoNoLGPL-3 with exceptionSupported up to 3.4 and since 2.8, integrated into the core distribution.
GambasYesPartial?NoNoGPL-2Secondary to the primary Qt components
GenieYesYesYesYesYesLGPL-2.1language written for GObject system
Go???YesNoGPL-3
NoPartial?NoNoISC
GuilePartialNo?NoNoGPL-2supported up to 2.12, partly supported on 2.14
HaskellYesPartial?NoNoLGPL-2.1Gtk2Hs is a set of Haskell bindings to many of the libraries included in the GTK/GNOME platform.
NoYesYesYesNoLGPL-2.1Generate Haskell bindings for GObject Introspection capable libraries
JPartialNo?NoNoGPL-3
Java and other JVM languagesjava-gnomeYesYesNoNoYesGPL-2 with exceptionUnavailable on Microsoft Windows
NoNoYesYesYesLGPL-2.1Works with OpenJDK 25 or later
JuliaYesYesYesNoNoMITIncludes Glib support
JavaScriptYesYesYesYesYesMIT, based on Mozilla's SpiderMonkey
NoYesPartialYesNoMITDynamic Node.js binding to GObject libraries using GObject-Introspection.
SeedYesYes?YesYesLGPL-2.1, based on WebKit's JavaScriptCore
NoPartialPartialPartialNoAGPL-3.0Partial due to being In development, Usable to an extent.
NoNoNoPartialNoLGPL-3Partial due to being In development, Usable to an extent.
LuaPartialYesYesYesNoMITDynamic Lua binding to GObject libraries using GObject-Introspection.
NoYes?YesNoLGPL-3lgob provides bindings of GObject-based libraries for Lua 5.1.
NimNoYesYesYesNoMITHigh level GObject-Introspection based GTK3/GTK4 bindings for Nim language
OCamlPartialPartial?NoNoLGPL-2.1 with exceptionNo, supported up to 2.16
ooRexxRexxGTKPartialNo?NoNoCPLYes, 2.0 or later
Objective-CNoPartial?NoNoLGPL-2.1
PartialNo?NoNoLGPL-2.1
Objective-C GTKPartialNo?NoNoLGPL-2.1
PascalFree PascalYesYes?NoNoLGPL-3 with exceptionSupported up to 2.24, integrated into the core distribution. Gtk 3.0 bindings are being developed in the Lazarus-ccr project.
PerlGtk2-PerlYesYesNoYesYesLGPL-2.1
PHPPHP-GTKPartialPartial?NoNoLGPL-2.1PHP until 5.2, GTK is GTK2
PrologPartialYes?YesNoLGPL-2.1Dynamic Prolog binding to GObject libraries using GObject-Introspection.
PythonPartialPartial?YesNoLGPL-2.1GObject Introspection Bindings for PyPy.
PartialPartial?YesNoBSDPure Python GObject Introspection Repository (GIR) wrapper using ctypes.
PyGObjectYesYesYesYesYesLGPL-2.1since 2.22
PyGTKYesNoNoNoYesLGPL-2.1static bindings, use PyGObject
RRGtk2PartialNo?NoNoGPL-22016-03-09 at the Wayback Machine
Racket???YesNoMIT
RubyPartialPartial?YesNoLGPL-2.1GirFFI-based bindings for GTK. Supports both GTK+ 2 and GTK+ 3.
2008-08-21 at the Wayback MachinePartialYesYesNoNoMIT LicensePartial, supported up to 2.12, partly supported since 2.14
RustNoYesYesYesNoMIT
NoYes?YesNoLGPL-2.1
SmalltalkGNU SmalltalkYesNo?NoNoGPL-2
Smalltalk YX GTK pluginYesNo?NoNoMIT
PartialNo?NoNoMIT
Standard MLNoYes?YesNoLGPL-2.1
TclYesNo?NoNoBSD
ValaYesYesYesYesYesLGPL-2.1language written for GObject system
WraplPartialNo?NoNoGPL-3No, but almost full up to 2.22

Gtk#

Gtk# is a set of .NET Framework bindings for the GTK graphical user interface (GUI) toolkit and assorted GNOME libraries. The library facilitates building graphical GNOME applications using Mono or any other compliant Common Language Runtime (CLR). Gtk# is an event-driven system like any other modern windowing library where every widget allows associating handler methods, which get called when certain events occur.[citation needed]

Applications built using Gtk# will run on many platforms including Linux, Windows and macOS. The Mono packages for Windows include GTK, Gtk# and a native theme to make applications look like native Windows applications. Starting with Mono 1.9, running Gtk# applications on macOS no longer requires running an X11 server.

Glade Interface Designer can be used with the Glade# bindings to easily design GUI applications. A GUI designer named Stetic is integrated with the MonoDevelop integrated development environment (IDE).

In addition to support the standard GTK/GNOME stack of development tools, the gtk-dotnet.dll assembly provides a bridge to consume functionality available on the .NET stack. At this point this includes the functionality to use System.Drawing to draw on a widget.[citation needed]

As of September 2020[update], Gtk# support for Gtk3 remains in the preview phase and forked projects, such as GtkSharp, have been founded to provide full Gtk3 support for C# and other CLI languages. The lack of a released version of Gtk# with support for Gtk3 was cited as a reason to remove the Banshee media player in Ubuntu 12.04.

See also