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
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:
.gsand.valafiles 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
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