Guides & References
Vala for C# Programmers by GNOME
Vala for Java Programmers by GNOME
Gtk+ Kick-Start Tutorial for Vala by Alberto Ruiz
Vala Language Introduction by Andre Masella
Creating elementary OS apps with GTK & Vala
Learn Vala and Gtk+ from Scratch (Playlist)
Packages
Submitting API-Bugs and Patches
For all bindings where the status is not marked as external, and unless otherwise noted, bugs and pull-requests should be submitted to the Vala product in the GNOME GitLab instance.
Projects without VAPI files
Most GObject-instrospected projects are shipping their own bindings and Vala also ships with many of them. For many non-GObject introspected libraries, a repository is available in the vala-extra-vapis project in the GNOME GitLab instance.
GNOME & Friends
Core
Libgee is a collection library providing GObject-based interfaces and classes for commonly used data structures.
GIO provides a modern and easy-to-use VFS API. It provides a file system abstraction which allows applications to access local and remote files with a single consistent API.
GLib provides the core application building blocks for libraries and applications written in C. It provides the core object system used in GNOME, the main loop implementation, and a large set of utility functions for strings and common data structures.
libpeas is a gobject-based plugins engine, and is targetted at giving every application the chance to assume its own extensibility.
libpeas is a gobject-based plugins engine, and is targetted at giving every application the chance to assume its own extensibility.
User Interface
Clutter is a GObject based library for creating fast, visually rich, graphical user interfaces.
GooCanvas is a canvas widget for GTK+ that uses the cairo 2D library for drawing.
GTK+ is the primary library used to construct user interfaces in GNOME applications. It provides user interface controls and signal callbacks to control user interfaces.
GTK is the primary library used to construct user interfaces in GNOME applications. It provides user interface controls and signal callbacks to control user interfaces.
GtkSourceView is a portable C library that extends the standard GTK+ framework for multiline text editing with support for configurable syntax highlighting, unlimited undo/redo, search and replace, a completion framework, printing and other features typical of a source code editor.
GtkSourceView is a GNOME library that extends GtkTextView, the standard GTK+ widget for multiline text editing. GtkSourceView adds support for syntax highlighting, undo/redo, file loading and saving, search and replace, a completion system, printing, displaying line numbers, and other features typical of a source code editor.
GtkSourceView is a GNOME library that extends GtkTextView, the standard GTK+ widget for multiline text editing. GtkSourceView adds support for syntax highlighting, undo/redo, file loading and saving, search and replace, a completion system, printing, displaying line numbers, and other features typical of a source code editor.
WebKitGTK+ is a full-featured port of the WebKit rendering engine, suitable for projects requiring any kind of web integration, from hybrid HTML/CSS applications to full-fledged web browsers. This is the library to use to acces JavaScript from WebKitGTK.
WebKitGTK+ is a full-featured port of the WebKit rendering engine, suitable for projects requiring any kind of web integration, from hybrid HTML/CSS applications to full-fledged web browsers. This is the library to use to acces JavaScript from WebKitGTK.
WebKitGTK+ is a full-featured port of the WebKit rendering engine, suitable for projects requiring any kind of web integration, from hybrid HTML/CSS applications to full-fledged web browsers. This is the library to use to acces JavaScript from WebKitGTK.
The libdazzle library is a companion library to GObject and Gtk+. It provides various features that we wish were in the underlying library but cannot for various reasons. In most cases, they are wildly out of scope for those libraries. In other cases, our design isn't quite generic enough to work for everyone.
Libgda is a (relatively small) database access library. This package provides GTK+ widgets to database access.
Shumate is a library providing a widget to display maps in applications.
WebKitGTK+ is a full-featured port of the WebKit rendering engine, suitable for projects requiring any kind of web integration, from hybrid HTML/CSS applications to full-fledged web browsers.
WebKitGTK+ is a full-featured port of the WebKit rendering engine, suitable for projects requiring any kind of web integration, from hybrid HTML/CSS applications to full-fledged web browsers.
WebKitGTK+ is a full-featured port of the WebKit rendering engine, suitable for projects requiring any kind of web integration, from hybrid HTML/CSS applications to full-fledged web browsers. This is the library to use to build extensions running in the separated webprocess.
WebKitGTK+ is a full-featured port of the WebKit rendering engine, suitable for projects requiring any kind of web integration, from hybrid HTML/CSS applications to full-fledged web browsers. This is the library to use to build extensions running in the separated webprocess.
WebKitGTK+ is a full-featured port of the WebKit rendering engine, suitable for projects requiring any kind of web integration, from hybrid HTML/CSS applications to full-fledged web browsers.
WebKitGTK+ is a full-featured port of the WebKit rendering engine, suitable for projects requiring any kind of web integration, from hybrid HTML/CSS applications to full-fledged web browsers. This is the library to use to build extensions running in the separated webprocess.
Multimedia
babl is pixel encoding and color space conversion engine in C. It allows converting between different methods of storing pixels known as pixel formats that have with different bitdepths and other data representations, color models, color spaces and component permutations. A vocabulary to formulate new pixel formats from existing primitives is provided as well as the framework to add new color models, spaces and data types.
GEGL (Generic Graphics Library) is a data flow based image processing framework, providing floating point processing and non-destructive image processing capabilities to GNU Image Manipulation Program and other projects (imgflo, GNOME Photos, gcut, iconographer, …)
GEGL (Generic Graphics Library) is a data flow based image processing framework, providing floating point processing and non-destructive image processing capabilities to GNU Image Manipulation Program and other projects (imgflo, GNOME Photos, gcut, iconographer, …)
gexiv2 is a GObject wrapper around the Exiv2 photo metadata library. It allows for GNOME applications to easily inspect and update EXIF, IPTC, and XMP metadata in photo and video files of various formats
Framework that provides access to various sources of multimedia content
GObject-based API for handling resource discovery and announcement over SSDP.
The GStreamer Editing Services (GES) aims to fill the gap between GStreamer/NLE and the application developer by offering a series of classes to simplify the creation of many kind of editing-related applications.
Powerful framework for creating multimedia applications. Supports both Audio and Video.
GStreamer Multimedia Framework Base plugin libraries.
Small utility library that aims to ease the handling and implementation of UPnP audio/video profiles
GUPnP DLNA is a set of utility APIs to simplify DLNA-specific bits of MediaServer implementations, such as DLNA media profile guessing.
A small and lightweight implementation of the XDG Sound Theme Specification.
Libcanberra-gtk provides a few functions that simplify libcanberra usage from Gtk+.
Librygel-core is a collection of classes useful to Rygel's server and renderer implementation libraries and useful to plugin implementors.
This library implements a generic database abstraction used by rygel and rygel plugins
This library may be used to create UPnP or DLNA Renderers. For instance, librygel-renderer-gst uses librygel-renderer with GStreamer to implement its RygelPlaybinRenderer renderer.
This library may be used to create UPnP or DLNA Renderers using GStreamer. The RygelPlaybinRenderer may wrap an existing GStreamer playbin or create its own. See the example.
This library implements the Remote User Interface Server protocol interfaces.
This library may be used to create UPnP or DLNA servers, Rygel Server plugins or Rygel Media Engines
Under the Hood
ATK provides the set of accessibility interfaces that are implemented by other toolkits and applications. Using the ATK interfaces, accessibility tools have full access to view and control running applications.
AT-SPI2 is a D-Bus based accessibility framework. It defines a D-Bus protocol for providing and accessing application accessibility information. The project includes a library for bridging the D-Bus protocol to the ATK API, allowing Gtk based applications to be made accessible.
Cairo is a 2D graphics library with support for multiple output devices like the X Window System (via both Xlib and XCB), Quartz, Win32, image buffers, PostScript, PDF, and SVG.
COGL is a low level OpenGL abstraction library developed for (and part of) Clutter. It is used primarily by Clutter to provide a common rendering API that works transparently across OpenGL >=1.4, OpenGL ES 1.1 and OpenGL ES 2.0.
An intermediate layer which isolates GTK+ from the details of the windowing system.
GdkPixbuf is a library for image loading and manipulation. The GdkPixbuf documentation contains both the programmer's guide and the API reference.
Pango is the core text and font handling library used in GNOME applications. It has extensive support for the different writing systems used throughout the world.
Data Storage
Camel is a generic messaging library. It supports the standard messaging system for receiving and sending messages. It is the messaging backend for Evolution.
Libfolks is a library that aggregates people from multiple sources (eg, Telepathy connection managers and eventually evolution data server, Facebook, etc.) to create metacontacts.
This package is a client library for evolution addressbooks.
The data server, called "Evolution Data Server" is responsible for managing calendar and addressbook information.
GeoClue is a D-Bus geoinformation service. The goal of the Geoclue project is to make creating location-aware applications as simple as possible.
Implementation of the iCalendar protocols and protocol data units. The iCalendar specification describes how calendar clients can communicate with calendar servers so users can store their calendar data and arrange meetings with other users.
The libmediaart library is the foundation for media art caching, extraction and lookup for applications on the desktop.
libsecret is a library for storing and retrieving passwords and other secrets. It communicates with the "Secret Service" using DBus. gnome-keyring and ksecretservice are both implementations of a Secret Service.
Vala Data Access library, a set of interfaces to connect to databases and execute queries
VDA implementation using GDA as backend, suitable to implement new GDA supported implementations
VDA implementation using GDA as backend to connect to PostgreSQL databases
Web Services & HTTP
A library which provides a secure layer over a reliable transport layer
A centralized service that allows a set of online accounts to be configured for use with core GNOME applications. In UX terms, GOA provides a static list of online accounts that can be setup by users (through the Online Accounts panel in System Settings). These accounts can then be used by core GNOME applications.
An open source command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMTP, SMTPS, Telnet and TFTP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, HTTP/2, cookies, user+password authentication (Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos), file transfer resume, proxy tunneling and more.
GData (Google data) is a set of Application Programming Interfaces (APIs) for the Common Language Infrastructure (CLI) which provide a simple protocol for reading and writing data on the web.
Single signon authentication library for online services.
libsoup is an HTTP client/server library for GNOME. It uses GObjects and the glib main loop, to integrate well with GNOME applications.
libsoup is an HTTP client/server library for GNOME. It uses GObjects and the glib main loop, to integrate well with GNOME applications.
Telepathy is a D-Bus framework for unifying real time communication, including instant messaging, voice calls and video calls. It abstracts differences between protocols to provide a unified interface for applications.
Markup
JSON-GLib is a library for reading and parsing JSON using GLib and GObject data types and API.
LibGRSS is a library for easy management of RSS/Atom/Pie feeds. Includes methods to fetch, parse and handle XML documents, an implementation of PubSubHubBub client, an OPML parser and some more utility.
Template-GLib is a library to generate text from a template and user defined state. Template-GLib allows you to access properties on GObjects as well as call simple methods via GObject-Introspection Template-GLib does not use a language runtime, so it is safe to use from any GObject-Introspectable language.
Remote Display Systems & Virtualization
A bridge to the Pulse Audio system for VNC. It allows VNC clients to play back audio on the local system
GObject binding for libguestfs, a set of tools for accessing and modifying virtual machine disk images.
API for controlling virtualization engines. (openvz,kvm,qemu,virtualbox,xen,etc)
A Gtk client and libraries for SPICE remote desktop servers.
Other
AppStream is a cross-distro effort for enhancing the way we interact with the software repositories provided by the distribution by standardizing sets of additional metadata.
The Avahi package is a system which facilitates service discovery on a local network.
Avahi is a system which facilitates service discovery on a local network via the mDNS/DNS-SD protocol suite. This enables you to plug your laptop or computer into a network and instantly be able to view other people who you can chat with, find printers to print to or find files being shared. Compatible technology is found in Apple MacOS X (branded Bonjour and sometimes Zeroconf).
Initial D-Bus Support (Do not use in new projects, use DBus support included in GLib instead)
The GNOME Devtools Library package provides a docking system and several utilities useful to GNOME development tools and GNOME applications in general.
The GNOME Devtools Library package provides a docking system and several utilities useful to GNOME development tools and GNOME applications in general.
GObject introspection is a middleware layer between C libraries (using GObject) and language bindings.
GUdev (libgudev) is a library with GObject bindings to libudev, now made independent, after being part of udev itself, and later systemd.
Jsonrpc-GLib is a library to communicate with JSON-RPC based peers in either a synchronous or asynchronous fashion. It also allows communicating using the GVariant serialization format instead of JSON when both peers support it. You might want that when communicating on a single host to avoid parser overhead and memory-allocator fragmentation
The Easy Publish and Consume library (libepc) provides an easy method to publish data using HTTPS, announce that information via DNS-SD, find that information and finally consume it.
Small, fast and convenient set of widgets to visualize the history of git repositories.
Structured File Library (GSF) is an I/O abstraction for reading/writing compound files.
libnotify is a library that sends desktop notifications to a notification daemon, as defined in the Desktop Notifications spec. These notifications can be used to inform the user about an event or display some form of information without getting in the user's way.
Library for managing information about operating systems and hypervisors.
Library to manage X windows and workspaces (via pagers, tasklists, etc.)
Provides a way to load and enumerate PKCS#11 modules. Provides a standard configuration setup for installing PKCS#11 modules in such a way that they're discoverable.
Ubuntu
A small little library that was created by pulling out some comon code out of indicator-applet. It passes a menu structure across DBus so that a program can create a menu simply without worrying about how it is displayed on the other side of the bus.
A small little library that was created by pulling out some comon code out of indicator-applet. It passes a menu structure across DBus so that a program can create a menu simply without worrying about how it is displayed on the other side of the bus.
Library to provide objects allowing to create Model-View-Controller type programs across DBus.
A library for instrumenting- and integrating with all aspects of the Unity shell.
Zeitgeist is a service which logs the users's activities and events (files opened, websites visites, conversations held with other people, etc.) and makes relevant information available to other applications. It is able to establish relationships between items based on similarity and usage patterns.
Pantheon
Granite is an extension of GTK+. Among other things, it provides complex widgets and convenience functions designed for use in apps built for elementary OS.
Granite is a platform library for Gtk 4. It provides complex widgets and convenience functions designed for use in apps built for elementary OS.
Switchboard is a modular system settings hub containing plugs (settings panels)
SDL
Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D. It is used by video playback software, emulators, and popular games including Valve's award winning catalog and many Humble Bundle games.
Provides the basic drawing functions such as lines, circles or polygons provided by SDL_gfx on SDL2 against renderers of SDL2.
A small sample cross-platform networking library, with a sample chat client and server application. The chat client uses the GUIlib GUI framework library.
A sample library which allows you to use TrueType fonts in your SDL applications. It comes with an example program "showfont" which displays an example string for a given TrueType font file.
Databases & Resource Description
A free library that handles Resource Description Framework (RDF) query syntaxes, query construction and query execution returning result bindings
System
A library that makes it possible to implement a filesystem in a userspace program.
This project aims to make updating firmware on Linux automatic, safe and reliable.
These pages attempt to provide a specification and an implementation of a hardware abstraction layer.
ModemManager provides a unified high level API for communicating with (mobile broadband) modems.
The libnl suite is a collection of libraries providing APIs to netlink protocol based Linux kernel interfaces.
libportal provides GIO-style async APIs for most Flatpak portals.
Multimedia
Other
Bump is a library designed to make asynchronous programming easy by providing high-level data structures for concurrency management, including multi-threading and main loop callbacks, in GObject/GIO based projects, especially those written in Vala.
Libdaemon is a leightweight C library which eases the writing of UNIX daemons.
LibESMTP is a library to manage posting (or submission of) electronic mail using SMTP to a preconfigured Mail Transport Agent (MTA) such as Exim. It may be used as part of a Mail User Agent (MUA) or another program that must be able to post electronic mail but where mail functionality is not the program's primary purpose.
Libosso is a wrapper library for user applications for platform-specific, frequently-used D-Bus services.
valac, the Vala compiler, is a self-hosting compiler that translates Vala source code into C source and header files. It uses the GObject type system to create classes and interfaces declared in the Vala source code.
Loudmouth is a C library that enables applications to use the Jabber protocol. It is designed to be cross platform, and straightforward to use.
The Open Resource Container is a general-purpose, platform-independant file format for storing many different types of data that applications may need.
Vala Extra Vapis
Check is a unit testing framework for C. It features a simple interface for defining unit tests, putting little in the way of the developer. Tests are run in a separate address space, so both assertion failures and code errors that cause segmentation faults or other signals can be caught. Test results are reportable in the following: Subunit, TAP, XML, and a generic logging format.
CTPL is a template library written in C. It allows fast and easy parsing of templates from many sources (including in-memory data and local and remote streaming, thanks to GIO) and fine control over template parsing environment.
A language independent, scalable, open extension to CGI that provides high performance without the limitations of server specific APIs.
A general purpose crypto library based on the code used in GNU Privacy Guard. This is a development version.
A free, open source, multi-platform library for OpenGL application development that provides a powerful API for handling operating system specific tasks such as opening an OpenGL window, reading keyboard, mouse, joystick and time input, creating threads, and more.
This is a library that defines common error values for all GnuPG components. Among these are GPG, GPGSM, GPGME, GPG-Agent, libgcrypt, pinentry, SmartCard Daemon and possibly more in the future.
A library designed to make access to GnuPG easier for applications. It provides a high-level Crypto API for encryption, decryption, signing, signature verification, and key management. Currently it uses GnuPG as its back-end, but the API is not restricted to this engine.
A Fast Fourier Transform based up on the principle, "Keep It Simple, Stupid." Kiss FFT is a very small, reasonably efficient, mixed radix FFT library that can use either fixed or floating point data types.
A fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.
The C library provides fast access to documents in Couchbase Server 2.0. With JSON documents and Couchbase server 2.0 you have new ways to index and query data stored in the cluster through views. This client library, libcouchbase, also simplifies requests to Views through its handling of HTTP transport.
Abstract asynchronous event notification library. The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. libevent is meant to replace the asynchronous event loop found in event driven network servers.
The library includes support for the SASL framework and at least partial support for the CRAM-MD5, EXTERNAL, GSSAPI, ANONYMOUS, PLAIN, SECURID, DIGEST-MD5, LOGIN, and NTLM mechanisms.
Library for parsing and evaluating symbolic expressions input as text
Libmemcached is a C and C++ client library to the memcached server. It has been designed to be light on memory usage, thread safe, and provide full access to server side methods. The libmemcachedutil library contains utility functions used by libmemcached.
Qpid Proton is a high-performance, lightweight messaging library. It can be used in the widest range of messaging applications, including brokers, client libraries, routers, bridges, proxies, and more. Proton makes it trivial to integrate with the AMQP 1.0 ecosystem from any platform, environment, or language.
QRencode is a library to encode a string as a QR code and save it as a PNG image.
This is a C-language AMQP client library for use with AMQP servers.
libserialport is a minimal library written in C that is intended to take care of the OS-specific details when writing software that uses serial ports. By writing your serial code to use libserialport, you enable it to work transparently on any platform supported by the library.
Snowball stemming algorithms for use in Information Retrieval Snowball provides access to efficient algorithms for calculating a "stemmed" form of a word. This is a form with most of the common morphological endings removed; hopefully representing a common linguistic base form. This is most useful in building search engines and information retrieval software; for example, a search with stemming enabled should be able to find a document containing "cycling" given the query "cycles".
The 0MQ lightweight messaging kernel is a library which extends the standard socket interfaces with features traditionally provided by specialised messaging middleware products. 0MQ sockets provide an abstraction of asynchronous message queues, multiple messaging patterns, message filtering (subscriptions), seamless access to multiple transport protocols and more.
Oniguruma is a regular expressions library. The characteristics of this library is that different character encoding for every regular expression object can be specified. (supported APIs: GNU regex, POSIX and Oniguruma native)
OpenCL (Open Computing Language) is the open, royalty-free standard for cross-platform, parallel programming of diverse processors found in personal computers, servers, mobile devices and embedded platforms.
OpenCV (Open Source Computer Vision Library) is an open source computer vision and machine learning software library.
PortAudio is a portable audio I/O library designed for cross-platform support of audio. It uses a callback mechanism to request audio processing. Audio can be generated in various formats, including 32 bit floating point, and will be converted to the native format internally.
The library purpose is to provide common functions for password quality checking and also scoring them based on their apparent randomness. The library also provides a function for generating random passwords with good pronounceability. The library supports reading and parsing of a configuration file.
Scanner Access Now Easy (SANE) is a universal scanner interface. The SANE application programming interface (API) provides standardized access to any raster image scanner hardware (flatbed scanner, hand-held scanner, video and still cameras, frame-grabbers, etc.).
Hardware health monitoring for Linux. Includes programs that show data from some sensor chips. The interface /proc/bus/i2c/ is provided by loading kernel modules.
Fast compression and decompression library. It does not aim for maximum compression, or compatibility with any other compression library; instead, it aims for very high speeds and reasonable compression.
The X protocol C-language Binding (XCB) is a replacement for Xlib featuring a small footprint, latency hiding, direct access to the protocol, improved threading support, and extensibility.