Est. 2008 Intermediate

Genie

An indentation-based, Python-inspired programming language for the GNOME platform that shares its compiler and runtime model with Vala.

Created by Jamie McCracken

Paradigm Multi-paradigm: Object-Oriented, Imperative, Structured
Typing Static, Strong, Inferred
First Appeared 2008
Latest Version Ships with Vala (0.56.x series, as of 2024)

Genie is a modern, statically typed, object-oriented programming language for the GNOME platform that pairs a Python-inspired, indentation-based syntax with the GObject type system. It is not a separate language implementation in the usual sense: Genie source files (.gs) are accepted by the Vala compiler (valac), which transpiles them to C code linked against GLib and GObject. The result is native code with no virtual machine and no runtime beyond the libraries already used by the rest of the GNOME stack.

History & Origins

Genie was created by Jamie McCracken and announced publicly on May 19, 2008, when he wrote that the language had just been “incorporated into latest Vala svn.” His goal was to give developers an alternative front-end to the Vala compiler with a syntax that would feel familiar to people coming from Python, Boo, or Pascal-family languages, without giving up access to the GObject runtime, GTK, or any of the existing Vala bindings (.vapi files).

Because Genie was merged directly into the Vala source tree rather than maintained as a fork, it has never had an independent release cycle. Every Vala release since 2008 has been, in effect, a Genie release as well.

Design Philosophy

Genie’s design is built around a single pragmatic idea: keep Vala’s semantics and runtime model, but change the surface syntax. Where Vala uses curly braces, semicolons, and a C#-like declaration style, Genie uses indentation for block structure, omits semicolons, and adopts keyword choices reminiscent of Boo and Object Pascal (for example, def for function declarations and init for the main entry point).

The deeper philosophy is one of cohabitation. A project can mix .vala and .gs files freely and compile them into a single binary, and either kind of file can use any binding the Vala ecosystem provides. Genie is therefore best understood as a stylistic alternative within the Vala ecosystem rather than a standalone language community.

Key Features

  • Indentation-based blocks: significant whitespace replaces braces, in the style of Python.
  • Static typing with inference: variables are strongly typed, but the compiler infers types in many contexts.
  • GObject integration: classes, signals, properties, and interfaces map directly onto the GObject type system used throughout GNOME.
  • Compiles to C: like Vala, Genie code is translated to C and then built with GCC or Clang, producing native binaries with no managed runtime.
  • Full Vala interoperability: .gs and .vala files can be compiled together, and any existing VAPI binding is usable from Genie.
  • Multi-paradigm: supports object-oriented, imperative, and structured styles.
  • Cross-platform reach follows Vala’s: wherever GLib/GObject and a C toolchain are available, Genie can be built.

A small Genie program looks markedly different from its Vala counterpart:

init
    print "Hello, World!"

Evolution

Genie’s evolution is essentially the evolution of Vala. Improvements to the type system, error handling, async support, and bindings that landed in Vala over the years have been available to Genie programs as well. The language itself has not undergone large independent redesigns; the GNOME Wiki’s Genie page documented syntax and idioms that have remained largely stable since the early releases.

Documentation activity around Genie peaked in its first several years. More recently, the GNOME Wiki has been retired in favor of newer infrastructure (handbook.gnome.org and the Vala project on gitlab.gnome.org), and Genie-specific content has not seen the same level of expansion as Vala’s.

Current Relevance

Genie is still maintained in the sense that it ships with every Vala release and continues to compile correctly, including with the Vala 0.56.x series. However, its community is small. Most contemporary GNOME-platform development that does not use C is done in Vala, Rust, or Python; few well-known shipping applications are written primarily in Genie. The clearest historical example is the Khövsgöl distributed music player, and the most accessible body of public Genie code today is the set of tasks on Rosetta Code.

For developers who already enjoy the Vala/GObject model but prefer Python-style indentation, Genie remains a perfectly viable choice. For those looking for an active, growing language community, it is more of a curiosity than a mainstream option.

Why It Matters

Genie is a useful case study in language design pragmatism. Rather than building a new compiler, runtime, and standard library, Jamie McCracken added a second front-end to an existing compiler, instantly inheriting Vala’s bindings, tooling, and platform reach. That decision kept the implementation tractable for a single maintainer and gave users access to the entire GNOME stack from day one. In an era when many new languages arrive with enormous runtime and ecosystem investments, Genie is a reminder that a thoughtful surface syntax over a well-chosen existing platform can itself be a complete language.

Timeline

2006
Vala is first released, providing the compiler and GObject-based runtime that Genie would later target
2008
Jamie McCracken announces Genie on May 19 and it is merged into the Vala source tree, sharing the valac compiler
2008
Genie ships as part of subsequent Vala releases, gaining a 'Projects/Genie' page on the GNOME Wiki
2021
Genie continues to ship with Vala 0.52.x; documentation activity on the GNOME Wiki tapers off
2022
Vala 0.56 series released, continuing to support .gs (Genie) source files alongside .vala
2024
Vala 0.56.x point releases continue through 2024, with Genie still supported as an alternative front-end syntax

Notable Uses & Legacy

Khövsgöl

A distributed music player historically referenced as one of the primary applications written in Genie

Rosetta Code Genie tasks

A community-maintained collection of Genie solutions to standard programming tasks, serving as one of the larger public bodies of Genie code

GNOME ecosystem prototyping

Used by individual GNOME-platform developers who prefer indentation-based syntax for building GTK and GObject-based applications without writing C directly

Language Influence

Influenced By

Python Boo D Object Pascal Vala

Running Today

Run examples using the official Docker image:

docker pull
Last updated: