Programming Languages ===================== GNOME applications can be written in a range of languages, including C++, Javascript, Python, Rust and Vala. This page provides an overview of the languages that are available, with links to the relevant developer documentation. Overview -------- GNOME platform libraries are primarily written in C, and provide a machine-readable description of their API and ABI through `GObject-Introspection `__. This means that C is the "default" platform language, and that the upstream documentation for each library typically references C, but it is possible to use multiple programming languages to write applications for GNOME. GObject-Introspection allows GNOME to easily provide support for a range of high level languages. In each case, this support is provided by a separate project, which provides its own documentation and support. Language support typically needs to be installed as part of your development environment. Packages are available for most Linux distributions. In some cases, Flatpak runtime extensions are also available. Available languages ------------------- Here are the most commonly used programming languages available for writing GNOME applications. .. tip:: The GNOME project recommends using the C programming language for libraries, as it allows the maximum support across multiple programming languages. Applications, on the other hand, can be written in C or in any programming languages that provides access to the GNOME platform libraries through language bindings. .. list-table:: :widths: 10 10 10 70 :header-rows: 1 * - Language - Project - Documentation - Notes * - C++ - `gtkmm `__ - `Documentation overview `__ - * - JavaScript - `GJS `__ - `API references `__ - Built on Mozilla’s SpiderMonkey, featuring ES6 (ECMAScript 2015). Applications which use GJS include `Polari `_, `Maps `_ and `Sound Recorder `_. * - Perl - `Glib::Object::Introspection `__ - `Documentation overview `__ - * - Python - `PyGObject `__ - `API references `__ - Works with Python 3.5+, PyPy, and PyPy3. Applications which use PyGObject include `Music `_, `Lollypop `_ and `Pitivi `_. * - Rust - `gtk-rs `__ - `Book `__ - Applications which use gtk-rs include `Authenticator `_, `Shortwave `_ and `Video Trimmer `_. * - Vala - `Vala `__ - `API References `__ - Vala is a programming language which wraps GNOME libraries and outputs C code. Applications which use Vala include `Games `_, `Boxes `_, `Clocks `_ and `Gitg `_. * - C# - `gir.core `__ - `Get started `__ - .. note:: For more information about applications written in these languages, go to the `Welcome to GNOME website `_. See the :doc:`Libraries overview ` for a list of libraries in the GNOME platform, and their documentation.