ALAN
ALAN - the Adventure LANguage - is a declarative, domain-specific language for writing text adventures, designed in 1985 so that people who are not programmers can describe a world rather than implement one.
Created by Thomas Nilsson (now Thomas Nilefalk) and Göran Forslund
ALAN - short for Adventure LANguage - is a special-purpose language for writing interactive fiction. It was designed in 1985 by Thomas Nilsson (who now goes by Thomas Nilefalk) and Göran Forslund on a premise that separates it from almost every other authoring system: the person writing a text adventure should not have to be a programmer. Where Inform and TADS give authors a general-purpose language with an interactive fiction library on top, ALAN gives them a notation for describing a world - rooms, things, characters, verbs - and supplies working defaults for everything the author does not mention. Four decades later, it is still maintained by one of its original designers, still shipping, and still the language behind occasional new competition entries.
History and Origins
ALAN was designed in Sweden in 1985. Its earliest widely cited artefact is the adventure Saviour, which dates from the same period and has, according to the project, been used as a test game for the system ever since - a detail that says a good deal about how the project has been run.
Version 2 arrived around 1993 and is the version most people encountered. Through the 1990s ALAN spread the way hobby systems did at the time: through the Interactive Fiction Archive, the rec.arts.int-fiction newsgroup, and word of mouth among authors who found Inform’s C-like surface forbidding. Late-1999 community comparisons of authoring systems record what ALAN looked like at its peak of visibility: version 2.8, a rewritten manual in several formats, a beginner’s tutorial with code examples, a project website with an FAQ, a proposed standard library, and interpreter builds distributed for a wide spread of then-current platforms - reportedly including MS-DOS, Macintosh, Amiga, Windows, Linux and Solaris - with a Glk port newly completed to make future ports easier. Developer support, unusually, was the author answering email directly.
Work on a successor reportedly began in the early 2000s, and ALAN 3 appeared around 2005 and superseded version 2. It kept the declarative surface but added a real object model underneath - classes with single inheritance, instances, events and rules. What followed was an unusually long beta period: rather than declaring a 3.0 release, the project moved through a long alpha and then a numbered beta series, with the maintainer stating that no incompatible changes were planned before release. Alan 3.0 Beta 8 was announced in September 2021, adding UTF-8 support alongside the ISO 8859-1 encoding the system had required until then. As of mid-2026 it remains the current release.
In July 2019 the source moved from Bitbucket to GitHub, where the compiler, interpreters, standard library, documentation and example collections now live under the alan-if organisation, published under the Artistic License 2.0.
Design Philosophy
The reference manual states the guiding principle plainly: it should be very easy to do common things, but it should also be possible to do more complicated things. Everything else in ALAN follows from that.
Describe, don’t implement. An ALAN source file is a set of declarations. The author states that a location exists, what it looks like, and which exits lead where; that an object is in it and is takeable; that an actor walks a script. The runtime supplies the parser, the world model, the default verb behaviours and the standard failure messages.
Defaults everywhere. Almost every construct is optional and has a sensible default. A location with nothing but a description is a valid location. This is what makes the language usable by non-programmers - the floor is very low, and complexity is opt-in.
Readable source. The syntax is deliberately close to English, with declarations reading as sentences and every construct terminated by a full stop. Source is meant to be readable by the author six months later, and by other authors reading published games.
Strictly typed and compiled. Beneath the friendly surface, ALAN is a strictly typed, compiled, object-oriented language with single inheritance. The compiler catches a large class of errors before the game ever runs - a deliberate trade against the flexibility of a dynamic system, on the theory that an author who is not a programmer benefits most from being told exactly what is wrong.
A game file, not a program. The compiler produces a compact, portable game file that the interpreter runs. Distribution is the game file alone; players never need the compiler, and the same file runs on every platform with an interpreter.
Key Features
The core vocabulary is small. A location looks like this:
The kitchen IsA location
Description "A cramped kitchen. The smell of yesterday's dinner still hangs in the air."
Exit east to hallway.
End the kitchen.
IsA names the class an instance belongs to; location is one of the built-in classes. Every construct ends in a period, and a declaration is closed with an End statement.
Beyond locations, the language provides:
| Construct | Purpose |
|---|---|
OBJECT / instances | Things in the world, with attributes and container behaviour |
ACTOR | Characters, including the player character HERO |
VERB | What a player action does |
SYNTAX | The command patterns that map player input onto verbs |
CONTAINER | Objects that hold other objects, with capacity limits |
EVENT | Something scheduled to happen at a future turn |
RULE | A condition that is checked each turn and fires when true |
SCRIPT / STEP | Multi-turn sequences that drive actor behaviour |
ADD TO / EVERY | Extending an existing class, or applying a declaration across a class hierarchy |
Attributes can be boolean, numeric, string, event-valued or reference-valued, and are inherited from superclasses. The ALAN 3 object model supports classes, inheritance, instantiation and polymorphism, so an author who does outgrow the declarative surface has somewhere to go.
The parser handles the conventions players expect - multiple objects, all except, disambiguation - without the author writing any of it, which is a large part of why the system remains usable by beginners.
Toolchain and Platform Support
The system ships as a compiler plus an interpreter. The interpreter is called Arun; the ALAN 3 compiler produces a game file that Arun executes. Alongside the command-line interpreter, the project’s own build produces a Glk-based interpreter (requiring the Glk library), a Gargoyle plug-in so ALAN games play in the standard multi-format interpreter alongside Z-machine and TADS games, WinArun - a Windows Glk-based GUI interpreter - and WinAlan, a Windows front end for the compiler. A v2-to-v3 source converter is included for authors migrating older games.
The repository documents building on Cygwin, MSYS2 (native Windows, 32- and 64-bit), Linux including WSL, and macOS/Darwin, with cross-compilation to Windows possible given the right toolchain; platforms outside that list are not covered by the project’s own build instructions. Additional pieces exist around the core: an integrated development environment (AlanIDE), a map generator, and the standard library and example collections. The project maintains a unit-test suite (requiring Cgreen) and a regression-test suite (requiring a Java runtime), and the maintainer has said he relies on that automated testing rather than manual checks when packaging releases.
Evolution
| Version | Approximate period | Character |
|---|---|---|
| ALAN 1 | 1985 - early 1990s | Original design; declarative world description |
| ALAN 2 | around 1993 - 2005 | The widely distributed version; interpreter builds for many platforms by 2.8, Glk port, first standard library, most archived games |
| ALAN 3 | around 2005 - present | Classes, inheritance, instances, events and rules; long alpha and beta series; UTF-8 in Beta 8 |
The trajectory is unusual. Most hobby IF systems either stop dead or get rewritten by a successor community; ALAN has instead been carried by its original author across four decades, adding an object model without abandoning the declarative surface that was the point of the language in the first place.
Current Relevance
ALAN today is a small, quiet, still-living project. Beta 8 has stood as the current release since 2021, continuous integration builds development snapshots, and games still appear - Anssi Räisänen, who maintains the standard library, entered Temptation in the Village, an adaptation of an unfinished Kafka work, in IFComp 2025. The community is measured in dozens rather than thousands: the GitHub repositories carry a few dozen stars between them, a community-compiled 2022 list counted roughly 60 ALAN games on IFDB, and most support still flows through the author and a small group of long-time users.
Anyone choosing an authoring system in 2026 will almost certainly land on Inform 7, TADS 3 or Twine, all of which have larger communities, more documentation and more actively maintained libraries. ALAN’s argument is narrower and still valid: if what you want is to describe a world in something close to English, with a compiler that catches your mistakes and a runtime that supplies the boring parts, it does that with less ceremony than anything else.
Why It Matters
ALAN is the clearest example in interactive fiction of a genuinely declarative authoring system. Inform 7 later became famous for natural-language source, but its readability sits on top of a full programming model that authors eventually have to confront. ALAN started from the other end: the language is the world description, and the programming model was added underneath, decades later, only when authors pushed against the edges.
It is also a case study in single-maintainer longevity. A language designed in 1985 by two people, still compiled and released by one of them in the 2020s, with its original test adventure still in the regression suite, is rare in any part of software. The version numbering never quite caught up - a 3.0 that has been in alpha or beta since the mid-2000s is a fair joke at the project’s expense - but the code builds, the games run, and authors with no programming background have shipped complete works in it. For a language whose entire purpose was to let non-programmers write adventures, that is the measure that counts.
Timeline
Notable Uses & Legacy
Onaar, by Robert DeFord
A large ALAN 3 adventure entered in IFComp 2015, where it placed 16th of 53 entries. DeFord had already entered The Wyldkynd Project in Spring Thing 2014, finishing 6th of 10, and the pair are the most substantial modern demonstrations of what the system can carry.
The ALAN Standard Library
A community-maintained library, developed by Anssi Räisänen and published on GitHub as AlanStdLib, that supplies the default verbs, classes, messages and location handling an adventure needs. It removes the need to implement the ordinary player commands - take, drop, examine, go - from scratch, and is the practical starting point for new ALAN 3 games.
IF Competition and Spring Thing entries
ALAN games have been entered in the annual competitions since the mid-1990s, including Don't be late! by Greg Ewing (1996, 22nd of 26), Leaves by Mikko Vuorinen (1997, 29th of 34), CC.. also by Vuorinen (1998, 18th of 27), and The HeBGB Horror! and Vuorinen's King Arthur's Night Out in 1999. The system has never dominated a competition, but it has stayed in the field for three decades.
Temptation in the Village, by Anssi Räisänen
An adaptation of an unfinished work by Franz Kafka, entered in IFComp 2025 - evidence that new ALAN work is still being written and released decades after the language was designed, largely by the same small group that maintains the tooling.
Saviour, the long-running test adventure
A traditional adventure dating from the language's earliest period that has, according to the project, served as a test game for the ALAN system ever since. It is unusual for a hobby language to keep one of its earliest programs as a live conformance check across three major versions of the compiler and interpreter.