Contents
Vala - Documentation
Getting Started
Here is a staged approach to get familiar with the Vala compiler, related tools and the Vala language:
The first thing to do is install Vala for your platform and compile a small program to show everything is working.
The second activity is to skim over the Sample Code on this page and choose a topic that interests you. Compile one or more sample programs from that topic area and pay special attention to the use of the --pkg option with valac. This tells the Vala compiler which library binding the program should use. Cross-reference the name of the package with its API documentation at Valadoc.org. Valadoc.org is a great resource for finding bindings to libraries and becoming familiar with a library's API (Application Programming Interface).
The third activity is to get familiar with third party build tools and code editors. If you are unfamiliar with such development tools then a good set of starting options are an up to date version of GNOME Builder for editing Vala code. Then a build tool like Meson or CMake. GNOME Builder can create Meson build files and Autovala can create both Meson and CMake build files. These tools are useful for larger projects.
The fourth activity is to get inspired! Visit some of the Projects Developed in Vala linked to from this page. As a taster visit Feed Reader, Corebird and Gradio. These are all GUI (Graphical User Interface) applications using the GTK+3 toolkit. Corebird and Gradio also use special attributes in Vala code to trigger Vala's code generation routines that make using GtkBuilder user interface files a lot easier. In those two projects' source code repositories look for files ending in .ui and the use of [GtkTemplate], [GtkChild] and [GtkCallback] attributes in Vala code.
The fifth activity is to become familiar with the resources available about the Vala language. The Vala syntax is heavily influenced by C#, but it is better to start looking at the Vala Tutorials available. If concepts like strong typing and objects aren't familiar to you then documentation for C# may help explain the underlying idea, but focus on the concept rather than the C# syntax. The syntax in Vala may be different. The Tutorials linked to on this page cover Vala itself and explanations for those coming from a C# or Java background. Vala also has a Reference Manual available online, for download as a PDF and as a Devhelp package available through distributions.
Vala is a community driven project so the sixth activity is to share your experiences. This helps consolidate your understanding and offer insight to others. Blogs posts and shared code repositories are common ways of doing this.
Tutorials
If you want some tips before start hacking in Vala, take a tutorial and see what you can do with this.
GTK+ Kick Start Tutorial for Vala (Screencast)
The Vala Guide (A work in progress.)
Vala tutorials (a series of Video tutorials)
Introduction to asynchronous functions (blog article, in spanish)
Vala Programming Tutorial - Part 1 (in Persian)
Tutorial for beginners and code samples - GNOME Developer Platform
Getting Started - Elementary OS tutorial, covering build system, packaging and Gtk+ GUI applications
Flappy GNOME Tutorial - GTK+ is not a framework for animated games, but this tutorial shows the use of CSS in GTK+ 3.8+ by pushing it to its limits in a fun way
If you find any mistakes in the tutorials on wiki.gnome.org please feel free to correct them.
The Vala Reference Manual
We're still working on documenting the whole language. The current draft can be found at Manual. It covers most of the language and is heavily annotated, but may contain mistakes.
Genie
Genie is another programming language supported by the Vala compiler with a syntax closer to Python.
Genie Tutorials, Blogs and Code Examples - a page listing links to numerous tutorials, articles, blogs, code examples and projects
Developing Genie - a useful starting point if you want to improve the Genie scanner and parser, includes communication channels for developers and a detailed guide on downloading and compiling the Vala source code
Bindings
Vala has bindings to over 250 libraries. A good starting place is to read valadoc.org. This site holds bindings' API documentation generated by Vala's valadoc tool. The site is currently hosted by Elemetary OS. A desktop focused operating system with apps written in Vala.
List Of Bindings - The list aims to be comprehensive. Bindings are listed by how they are distributed: upstream libraries; Vala; the Vala Extra VAPIs repository and individuals
Generating Bindings - Using GObject introspection to generate a binding
Vala and GObject Introspection - write in Vala and use from Ruby, Python, Lua, JavaScript and other languages
Writing VAPI files manually - A document that explains how to write VAPI files for a C library manually, without GObject introspection
Other Resources
Planet Vala - An rss aggregator of blogs about Vala and more
Vala Journal - A periodic summary of what is going on around the Vala programming language
Synchronization in Vala - Yorba blog posting
Interfaces in Vala - Yorba blog posting
Sample Code
If you have trouble compiling an example try the latest release of Vala. Some distributions ship with older versions of Vala which may lack some features. Also make sure that the respective libraries are installed along with their header files (e.g. *-devel packages on RedHat/Fedora/SuSE, *-dev packages on Debian/Ubuntu).
Language Features and Introductory Samples
Basics: Collections, Files, I/O, Networking, IPC
Gee Samples (Collections: lists, sets, maps, iterables)
GIO Samples (Input/Output, file operations)
GIO Compression Sample (Inflating/deflating files)
GIO Settings Sample (Application settings)
GIO Networking Sample (Network socket communication)
Soup Sample (HTTP client / server)
D-Bus Basic Client/Server Samples (Inter-process communication)
D-Bus Client Samples (some "real world" D-Bus client examples)
Async Method Samples (using Vala's special syntax for async methods)
GUI Programming
GTK+ Samples (GUI toolkit)
GDL Sample (Docking widgets)
Mx Samples (MeeGo netbook UX toolkit)
WebKit Sample (Embeddable web browser engine)
StatusIcon Sample (Showing icons in the systray/notification area)
Multimedia and Graphics
GStreamer Samples (Multimedia: Audio, Video)
Cairo Sample (2D vector graphics)
Clutter Sample (Animation framework)
Pango Sample (Font rendering)
Poppler Sample (PDF rendering)
SDL Samples (Full screen graphics and game programming)
OpenGL Samples (2D and 3D graphics)
PulseAudio Samples (Audio playback)
GNOME Platform
Gnome-Desktop and GMenu Sample (Inspecting the application menu)
GLib Samples
MarkupParser Sample (Parsing simple XML files)
Plugin Sample (Loading modules at runtime)
Threading Samples (Concurrency and Synchronization)
Database Access
Other
Curses Sample (Terminal control library)
GSF Sample (Deflating ZIP archives)
GSL Samples (Numerical calculations)
Loudmouth Sample (Jabber instant messaging)
Lua Sample (Scripting)
Tiff Sample (Image loading/saving)
Shared Library Sample and how to call Vala code using GObject introspection
Deprecated Samples (Examples using deprecated libraries such as GNOME 2 panel applets)
Projects Developed in Vala
Vala Specific
Autovala - A project manager for Vala that automatically creates and maintains CMake scripts.
Gee - Collection Library
gtkaml - An Application Markup Language for GTK+/Vala.
Maja - Vala to Javascript compiler.
libmodulo - Dependency Injection / Inversion of Control
Sampala - A sample Vala application demonstrating Autotools and i18n
Vala Benchmarks - Compare Vala versus others languages à la http://shootout.alioth.debian.org/.
Valadate - Unit Testing Framework
vala-dbus-binding-tool - Create Vala D-Bus Interfaces from XML Specifications
Valadoc - Documentation generator for generating API documentation from Vala source code.
Valag - Vala Graphviz code tree and control flow graph generator
Val(a)IDE - Small IDE for the Vala language
ValaSwig - Vapi to Swig interface translator to create bindings for python, perl, ruby,.. from a vapi description.
ValaWinPKG - Vala Package manager, install needed MinGW libraries on Windows®.
Applications / Applets / Other Projects
AllTray - A program for docking software to the system tray/notification area.
Asteroids_Vala- Simple game using OpenGl and SDL
Baobab - Disk usage analyzer
Birdfont - A font editor
Caméléon - Easy file converter.
Cheese - Cheese is an application that takes photos and videos from your webcam.
Chess - GNOME Chess game
Commandeer - A sysadmin tool to lock the desktop while a command runs.
Corebird - A modern Gtk+ Twitter client
Cornucopia - Freesmartphone.org services middleware for mobile devices (2nd incarnation).
Cronopete - A backup utility, which aims to be a clone of Apple's Time Machine.
dconf editor - The dconf configuration editor
Déjà Dup - A backup utility.
Diodon - GTK+ clipboard manager.
DSync - Directory Sync - simple rsync frontend for Maemo and GNOME
DVB Daemon - Daemon to setup your DVB devices, record and watch TV shows and browse EPG.
Ease - Presentation authoring tool for the GNOME desktop.
elementary OS - Vala is the language of choice for elementary OS.
Epris music player - A D-Bus service and command line client to listen to music. Unlike xmms2 or mpd, it uses GStreamer and D-Bus.
FeedReader - RSS desktop client
Fillmore - A Multitrack audio recorder for GNOME
Final Page - A tool to reorganize, split and merge PDF documents.
Folks - A library that aggregates people from multiple sources to create metacontacts.
Calculator - GNOME Calculator
Games - Simple game launcher for GNOME
Geary - An email application built for GNOME 3.
Gitg - git repository viewer for gtk+/GNOME.
Global Menu - A globally-shared menu bar for GNOME
Gmail Notify - A Gmail notification app
Gnome Encfs Manager - A manager and mounter for EncFS stashes
Gnome media applet - A GNOME applet to simply mount/umount removable media
Gnome Pie - A visual application launcher for the Gnome Desktop
GNOME Scan - A scan library for GNOME
gradio - "A GTK3 app for finding and listening to internet radio stations"
gst-plugins-cl - An OpenCL plugin for gstreamer written in vala
Gwibber - Microblogging client
GXml - An XML library
Haguichi - "Haguichi provides a graphical frontend for Hamachi on Linux", with an indicator for GNOME shell
Hum - A lightweight music player built on DBus, Tracker, and GStreamer
i4uc - An IDE for micro-controllers
Iagno - Strategy game
Komorebi - "Komorebi is an awesome desktop manager for all Linux platforms. It provides fully customizeable image and video wallpapers that can be tweaked at any time!"
LaTeXila - An integrated LaTeX environment
lekhonee-gnome - A desktop client for Wordpress
libgtkflow - A universal library for drawing flow graphs with Gtk+ 3
libvfcgi - FastCGI library for GObject/Vala.
Lights Off - Logic game
Lingo - A dictionary application
Listaller - A distro-agnostic application management and software installation tool based on PackageKit
Lucruri - Todo list and note taking application.
Mahjongg - Mahjongg game
Marlin - The sexiest fish in the large sea of file-browsers
Meiga - Light and easy content server for your desktop.
Mines - Minesweeper game
Mind Map Architect - Program for manipulating with mind maps
Mipsdis - MIPS32 disassembler for stripped ELF (without section tables)
moserial - A serial terminal for the GNOME desktop.
MPRIS Applet - MPRIS client panel applet/plugin for GNOME and Xfce.
Multiplication Puzzle - A puzzle game.
Mutiara - A motif designer based on fractals.
OMAP Media Apps - GStreamer and GTK+ based applications for the OMAP platform, written in Genie.
Paldo Installer - Installer for the Paldo Linux Distro.
openSage - a port of OpenSAGE from C# to Vala. OpenSAGE is a free, open source re-implementation of SAGE, the 3D real time strategy (RTS) engine used in Command & Conquer
Pantheon Mail - An email client application.
Pasang Emas - Traditional board game of Brunei.
PDF Presenter Console - A Keynote like multi monitor "Presenter Console" using PDF as input.
PDF PC - A fork from PDF Presenter Console with several new options and enhancements.
peek - "Simple animated GIF screen recorder with an easy to use interface"
People Project - Aims at providing an unified access to contacts for desktop applications.
Picsaw - Jigsaw puzzle game
Pino - A Twitter client.
Plank - The world's simplest dock
GNOME Pomodoro - "GNOME Pomodoro is a small application that helps managing time according to Pomodoro Technique", source code on GitHub
Postler - ultra simple desktop mail client
PSchema - A framework for investigating artificial intelligence through the use of Piagetian schema learning.
Quadrapassel - Tetris game
radare - Multi-architecture assembly code graph in Vala-Cairo.
RhythmPnP - Rhythmbox Universal Plug'N'Play Media Renderer Plugin
Rygel - A collection of UPnP/DLNA media devices for GNOME
Scratchpad - Spatial text editor for the GNOME desktop.
SevenUSBurn - Burn ISO images to USB devices.
Shishen Sho Mahjongg for Gtk and Maemo - A board game similar to Mahjong.
Shotwell - A photo organizer.
Simple Scan - Scanner application
SmartSim - Visual digital logic design and simulation package.
Steadyflow - A simple download manager.
Swell Foop - Puzzle game
Switchboard - Modular desktop settings hub.
Synapse - A semantic file launcher
systemd - Graphical frontend for the systemd system and service manager.
Tetravex - Puzzle game
Tuntun - A panel applet to control the OpenVPN daemon.
Vala - The Vala compiler itself is written in Vala.
ValaTerm - A lightweight terminal emulator.
Vala Terminal - A lightweight terminal based on VTE.
Valence - A simple PDF viewer.
Vinagre - A VNC Client for the GNOME Desktop. Parts of Vinagre is written in Vala.
Watray - A general purpose IDE.
XML Bird - XML parser
Xfmpc - A small MPD client.
Xfce4 Notes Plugin - A quick-to-scribble notes application.
Xfce4 Stopwatch Plugin - A plugin for the panel that keeps track of elapsed time
Xnoise - A media player.
Valum - Web framework for Vala. Inspired by sinatra and allows lua scripting.
Zeitgeist - Event logging framework