Inform is a programming language and design system primarily used for creating interactive fiction (IF), a genre of text-based adventure games where players interact with a simulated world through natural language commands.[1][2] Developed by Graham Nelson, it emphasizes literate programming and linguistic principles to make coding accessible, particularly for writers and non-programmers, by allowing source code to resemble English prose.[1][2]
The system originated with Inform 6, released in 1993 as a procedural language that compiles to the Z-machine virtual machine format, enabling compatibility with classic IF interpreters.[2] This version became one of the most popular tools for IF development in the 1990s and early 2000s, supporting features like object-oriented modeling of game worlds, parser integration for player input, and extensions for complex narratives.[2] In 2006, Nelson introduced Inform 7, a revolutionary redesign that adopts a natural-language syntax, where rules and definitions are written in declarative English sentences, such as "The description of the kitchen is 'A dingy untidy kitchen.'".[1] This shift drew from ideas in formal linguistics and object-oriented design, making it easier to prototype stories, simulate environments, and handle dynamic interactions without traditional syntax like brackets or semicolons.[1]
Inform has influenced digital humanities, education, and game design beyond pure IF, appearing in university courses on narrative computing.[1] The project was open-sourced in April 2022, fostering community contributions via GitHub, and continues to evolve with tools for testing, debugging, and exporting to web or mobile formats.[1] Notable works created with Inform include award-winning IF titles and experimental literary projects that blend programming with storytelling.[2]
Overview and History
Purpose and Core Concepts
Inform is a programming language and design system specialized for developing text-based interactive fiction (IF) games, enabling authors to create immersive, narrative-driven experiences where players explore worlds through textual commands and responses.[3] Created by Graham Nelson, it emphasizes simplicity and expressiveness, allowing creators to model complex stories and interactions without requiring advanced programming expertise.[2]
The interactive fiction genre traces its origins to Will Crowther's Colossal Cave Adventure in 1976, a pioneering text adventure that simulated cave exploration via parser-driven input, sparking the evolution of parser-based games in the late 1970s and 1980s.[4] Following the decline of commercial IF publishers like Infocom in the 1990s, Inform revitalized the medium by offering free, open tools that democratized IF creation, sustaining and expanding the genre into the digital age.[5]
At its core, Inform revolves around parser-based interaction, where a natural-language parser interprets player commands to drive the story. It builds worlds through a structured model comprising objects (entities like rooms or items), actions (player intents such as "take" or "open"), and rules (logic governing outcomes), fostering dynamic simulations of narrative environments.[6] Compilers generate portable bytecode for virtual machines, ensuring games run across diverse platforms without modification.[2]
Beyond entertainment, Inform supports literary experimentation by blending prose with interactivity, as seen in works exploring nonlinear storytelling.[7] In education, it teaches programming fundamentals, narrative design, and critical thinking through hands-on IF projects in classrooms.[8]
Development Timeline
Inform was founded by Graham Nelson in 1993 as a design system for interactive fiction, specifically to generate stories compatible with the Z-machine virtual machine and address the scarcity of tools following Infocom's closure in 1989.[2][3] This initial version enabled authors to create parser-based text adventures without needing proprietary software, quickly becoming a cornerstone of the interactive fiction community. Early releases, from versions 1 through 5 between 1993 and 1996, focused on refining Z-machine compatibility while introducing procedural programming features.
In 1996, Nelson undertook a complete rewrite of Inform from first principles, producing Inform 6 to enhance stability, portability, and extensibility.[9] This version introduced a C-like syntax and became the standard for over a decade, with ongoing maintenance leading to major releases such as version 6.3 in February 2004, which added official support for the Glulx virtual machine to overcome Z-machine size and feature limitations. Further updates continued, with the latest version, 6.44, released on September 11, 2025, incorporating bug fixes, performance improvements, and continued Glulx enhancements under community maintainers David Kinder and Andrew Plotkin.[10]
Inform 7 marked a paradigm shift when introduced on April 28, 2006, adopting a natural language syntax inspired by linguistics to make programming more accessible and readable, akin to writing prose.[11] Glulx integration followed shortly in August 2006, expanding multimedia and memory capabilities. The language's design also drew from literate programming principles, with its source code structured as interwoven documentation and implementation using the Inweb tool.[12] In April 2022, Inform 7 was open-sourced on GitHub under the repository ganelson/inform, facilitating community contributions after years of proprietary development.[12] The latest release, version 10.1.2, arrived on August 31, 2022, with no major updates since; as of November 2025, community efforts on GitHub continue with bug fixes and compatibility improvements, though no major version releases have occurred since 2022.[12]
Virtual Machines
Z-Machine
The Z-machine is a virtual machine developed by Infocom in 1979 to enable the porting of their interactive fiction game Zork from mainframe computers to early personal computers, allowing for portable execution across diverse hardware platforms.[13] This design facilitated the creation of compact, self-contained story files that could run on resource-constrained systems without requiring platform-specific recompilation.[14]
The Z-machine operates using Z-code, a form of bytecode executed by interpreters, with specifications defined across eight versions released between 1979 and the late 1980s.[15] Each version introduced incremental improvements, such as expanded memory capacities: Version 3 supports up to 128 KB for the story file, Version 5 extends this to 256 KB, and Versions 6 and 8 reach 512 KB, though dynamic memory (for runtime variables and the stack) is consistently limited to 64 KB across all versions.[16][13] Addressing schemes include byte, word, and packed formats to optimize storage in low-memory environments, where packed addresses multiply the stored value (e.g., by 2 in Versions 1-3 or 4 in Versions 4-5) to reference high-memory locations efficiently.[15]
Inform 6, the procedural version of the Inform language, targets the Z-machine by default during compilation, producing .z* story files interpretable by platforms via emulators such as Frotz.[17] Inform 7 optionally supports Z-machine output alongside Glulx, preserving compatibility with legacy interpreters while enabling cross-platform play on modern systems.[18] Key architectural features include an object-oriented structure for the story file, organizing game elements like rooms, items, and actors in a hierarchical tree of up to 65,535 objects (in later versions), which supports dynamic manipulation during play. Built-in mechanics for saving and undoing turns leverage the machine's stack and memory snapshots, allowing interpreters to restore prior states without external files in early versions, enhancing player interactivity in text-based adventures.[19]
These constraints, including the fixed 64 KB dynamic memory limit and absence of native support for graphics or sound (beyond rudimentary text effects in Version 6), eventually prompted the development of successor virtual machines like Glulx to accommodate larger, multimedia-rich games.[20][21]
Glulx
Glulx is a 32-bit virtual machine designed by Andrew Plotkin and first released in 1999 to address the limitations of the Z-machine, such as restricted memory capacity and absence of native support for modern features like multimedia.[22] Developed as a portable platform for interactive fiction, it enables larger, more complex games by expanding the architectural possibilities beyond the 16-bit constraints of its predecessor.[23]
The core architecture of Glulx employs 32-bit addressing and data types, permitting story files up to four gigabytes in size (2^{32} bytes), which vastly exceeds the Z-machine's maximum of around 512 kilobytes.[23] It includes built-in support for Unicode encoding to handle international characters and integrates with the Glk library for input/output operations, facilitating features like graphics rendering (e.g., inline images and windows) and sound playback (e.g., AIFF or Ogg Vorbis files).[23] Key enhancements include the Blorb format for bundling external resources such as images and audio into a single archive file, streamlining distribution, and the ability to embed inline assembly opcodes for custom low-level operations not covered by standard instructions.[24]
Within the Inform ecosystem, Glulx serves as the default target for Inform 7 compilations, producing .ulx or .gblorb story files optimized for its capabilities, while Inform 6 users can opt into Glulx via the -G compiler directive for enhanced functionality in legacy projects.[25] Notable interpreters include Glulxe, the reference C-based implementation maintained for desktop platforms; Quixe, a JavaScript version for web browsers that supports modern HTML5 features; and various mobile ports, such as iFrotz for iOS and Lectrote for Android, ensuring broad accessibility as of 2025.[26][27][28]
Compiler and Build Process
The Inform 6 compiler, invoked via the inform executable, is a command-line tool that processes source files with the .inf extension to generate executable story files in Z-machine Z-code or Glulx bytecode formats.[29] It accepts input via the syntax inform [options] infile [outfile], where options control aspects like target format and debugging output, and the outfile defaults to a name derived from the input if unspecified.[29]
The build process involves several key steps: the compiler first parses the source code, interpreting directives such as Constant, Array, Include for library integration, and Abbreviate for string optimization.[30] It then links the standard library, resolving references to predefined routines, objects, and verbs, while applying settings like memory allocation limits via $-prefixed directives (e.g., $MAX_STATIC_DATA).[30] Finally, it assembles the code into a binary output file, such as .z8 for Z-machine version 8 or .ulx for Glulx, incorporating any specified metadata like serial numbers or header expansions.[29] Error handling occurs throughout, with the compiler issuing warnings for issues like unused routines or deprecated syntax, and halting on fatal errors; debugging is facilitated by flags such as -a for assembly traces, -s for symbol tables, and -k for generating an XML debug file (gameinfo.dbg) that details compilation artifacts.[29][30]
Platform support emphasizes portability, with precompiled binaries available for Windows and source code that builds on Unix-like systems including Linux and macOS using a standard C compiler like GCC.[31] The tool enables cross-compilation, producing platform-agnostic story files runnable on any compatible interpreter regardless of the host build environment.[29] Integration with build automation is straightforward, as its command-line interface allows embedding in Makefiles or scripts for iterative compilation during development.[29]
Version 6.44, released on September 11, 2025, builds on prior enhancements like support for parenthesized expressions in switch cases (e.g., switch (CONST+1)), arbitrary-length identifiers and dictionary words, and new assembly statements such as @ -> BYTE for direct data compilation (introduced in 6.42).[32][33] It also improves abbreviation handling via the -u option and tracing options (e.g., --trace PROPS), while fixing bugs in Glulx random number generation, error reporting for unclosed quotes, dynamic memory reallocation, line numbers in errors, and Z-machine globals with $ZCODE_COMPACT_GLOBALS.[32][33] For Unicode, the compiler processes UTF-8 source files when the -Cu option is specified and uses the Zcharacter directive to extend the Z-machine alphabet for characters beyond ASCII, though full Unicode rendering depends on interpreter capabilities.[30]
Testing in the development workflow typically involves compiling the story file and executing it in interpreters such as Frotz or Bocfel for Z-code or Quixe for Glulx, allowing authors to interactively verify game logic, responses, and edge cases before final release.[34] Tools like inform6-test can automate regression testing by scripting interpreter interactions against expected outputs.[35]
Procedural Language Syntax
Inform 6 employs a procedural syntax inspired by C, enabling imperative programming for interactive fiction through directives and routines that model game worlds and handle player interactions. The language is object-oriented in a prototype-based manner, where objects serve as the primary building blocks, organized in a hierarchical tree structure with parent-child-sibling relationships to represent spatial and logical connections, such as rooms containing objects.[36] Core keywords include Object for defining entities, Action for processing player commands, and Routine for encapsulating reusable code blocks.[36]
Key constructs emphasize interactive fiction development, such as property declarations using the with keyword for behavioral attributes (e.g., description, before, after routines that trigger at specific action stages) and the has keyword for binary flags (e.g., openable, light). Verb parsing grammar is defined via the Verb directive or ## notation, allowing up to 256 verbs with flexible grammar lines to interpret natural language input, such as Verb 'take' * noun -> Take;. Room and object hierarchies are established through the Object directive, forming a containment model where child objects inherit from parents, facilitating navigation and scoping in the game world.[36]
Control structures adapt C-like syntax for IF needs, including if, switch, while, for, and arrays, with specialized additions like objectloop for iterating over object classes (e.g., objectloop (x ofclass Room) { ... };) and meta-actions for debugging or introspection, such as ##Scope to list visible objects. Unlike standard C, Inform 6 omits pointers to simplify memory handling within Z-machine constraints, enforces a stricter type system with limited local variables (up to 15 per routine), prohibits goto statements, and integrates a built-in multi-level parser for natural language command processing without external libraries. The standard library provides foundational world modeling support, such as initial object placement and event handling.[36]
The syntax evolved from its 1993 debut in version 6.0, which introduced the basic C-inspired framework and object model, to the 1996 Third Edition (versions 6.10–6.20), featuring refinements like dynamic object creation, enhanced grammar flexibility, multiple inheritance for properties, and improved debugging tools to streamline IF authoring.[36]
Standard Library Components
The Standard Library in Inform 6 consists of a collection of precompiled source files that implement core interactive fiction functionality, enabling developers to build games efficiently without implementing basic mechanics from scratch.[37] These files form a monolithic framework, typically included via the Include directive, and cover input handling, world simulation, and output generation.[37] By providing standardized routines and data structures, the library enforces a consistent model of the game world while allowing extension through overrides.[30]
The library's structure revolves around three primary files: Parser, which processes and tokenizes player commands into meaningful actions; Verblib, which defines verb libraries and action execution logic; and Grammar, which specifies the syntactic patterns for English-language input using token-based rules.[37] Parser internals manage disambiguation, multiple object selection, and error recovery, converting raw text into action tokens that Verblib then routes to appropriate handlers. Grammar, in particular, uses a declarative format to map verb phrases (e.g., <direction>, <noun>) to actions, supporting flexible command variations like "get the lamp" or "take lamp".[37]
Central to the library is the world model, a hierarchical system of objects organized by classes and properties that simulate spatial and relational dynamics.[38] Classes such as Container enable objects to hold items internally, governed by properties like open (default closed state), openable (allowing manual opening), capacity (maximum child objects, default 100), and transparent (visibility of contents when closed).[38] For example, a backpack defined as Class Backpack with name 'backpack' has container open openable; can store items via the PutIn routine, but requires explicit opening for access.[38] Similarly, the Supporter class manages surface placement, with properties like supports listing supported items and no inherent openness, as in a table where Class Table has supporter; allows commands like "put book on table".[38] These classes inherit from a base Object template, using parent-child relationships to track location (e.g., an item "in" a container or "on" a supporter), with routines like Move updating the hierarchy dynamically.[38]
Action processing integrates seamlessly with the world model, where Verblib routines handle standard verbs through before/after/action stages.[37] For instance, the Take action checks if the target is movable (not static), not already held, and within scope, then executes Move to the player's inventory while awarding points if scored is set; failure triggers disambiguation or error messages.[38] The Examine action, conversely, prints the object's description property if defined, or a default "You see nothing special" response, respecting visibility rules like light and scenery.[38] Response printing relies on the library's print system, including PrintMessage for dynamic strings and the LibraryMessages array for overriding defaults (e.g., changing "Taken." to a custom phrase via LibraryMessages action Take = "You pick it up.";).[38]
Customization of the library occurs primarily through overriding routines with the Replace directive, which substitutes developer code for library functions (e.g., Replace TakeSub;), or by extending classes with new properties (e.g., Class MagicContainer has container ... with magic: 1;).[37] Adding properties requires careful memory management, as each increases object overhead, potentially inflating story file size—especially in Z-machine formats limited to 256K or 512K—while overrides can bloat code if not selective.[30] This approach preserves the library's integrity, allowing targeted modifications like altering parsing logic in Parser without full rewrites.[37]
The library's design inherently reduces boilerplate by encapsulating repetitive tasks, such as scope checking (via ScopeToken in Parser) or inventory listing (in Verblib's InventorySub), freeing developers to define unique game elements atop a robust foundation.[37] For example, including these files automatically provides over 50 standard actions and a full English parser, minimizing the need for custom input handling in simple games.[37]
Updates in Inform 6.44 (released September 2025) and the corresponding Standard Library 6.12.7 enhanced error reporting, such as flagging self-referential class definitions during compilation, and improved compatibility for library extensions through refined module linking.[39][33] These changes build on prior versions, like 6.21's strict mode, to aid debugging and modular development.[30]
Code Example
To illustrate the procedural syntax of Inform 6, consider a basic interactive scenario: a kitchen room containing a takeable apple on a table. This example demonstrates object and room definitions using directives, properties, and the standard library for handling actions like taking and examining.
inform6
Constant Story "Kitchen Example";
Include "Parser";
Include "VerbLib";
Include "Grammar";
[ Initialise;
location = kitchen;
"Kitchen Example\n";
];
Object kitchen "Kitchen"
with description
"You are in a cozy [kitchen](/page/Kitchen) with wooden counters. A table is here.",
has [light](/page/Light);
Object table "table" kitchen
with description "A sturdy wooden table.",
has static supporter;
Object -> apple "apple" table
with name 'apple' 'fruit' 'red' 'thing',
description "A ripe, tempting fruit.",
has static;
[ TakeSub;
if (noun == apple) {
give player ~has apple;
move apple to player;
"You pick up the apple.";
rtrue;
}
rfalse;
];
[ ExamineSub;
if (noun has description) {
print (noun.description);
".";
} else
"You see nothing special about it.";
rtrue;
];
Constant Story "Kitchen Example";
Include "Parser";
Include "VerbLib";
Include "Grammar";
[ Initialise;
location = kitchen;
"Kitchen Example\n";
];
Object kitchen "Kitchen"
with description
"You are in a cozy [kitchen](/page/Kitchen) with wooden counters. A table is here.",
has [light](/page/Light);
Object table "table" kitchen
with description "A sturdy wooden table.",
has static supporter;
Object -> apple "apple" table
with name 'apple' 'fruit' 'red' 'thing',
description "A ripe, tempting fruit.",
has static;
[ TakeSub;
if (noun == apple) {
give player ~has apple;
move apple to player;
"You pick up the apple.";
rtrue;
}
rfalse;
];
[ ExamineSub;
if (noun has description) {
print (noun.description);
".";
} else
"You see nothing special about it.";
rtrue;
];
This code creates a simple room where the player starts in the kitchen. The kitchen object defines the location with a description and light attribute for visibility. The table is a static supporter, and the apple is a child object with synonyms via the name property. Custom routines TakeSub and ExamineSub override library actions: taking moves the apple to the player's inventory and prints a message, while examining prints the description. The includes provide the parser and standard actions. Player inputs like "take apple" or "examine fruit" are handled by the built-in parser matching grammar to actions, updating the world model via move and property checks.
In execution, Inform 6 compiles this to Z-code or Glulx, runnable on interpreters. Compared to Inform 7's declarative style, Inform 6 requires explicit routine definitions for custom behaviors but offers fine-grained control over the procedural flow.[38] This example can be extended with more objects, routines, or grammar lines for complex interactions.
Notable Games
Inform 6 has been used to create many influential interactive fiction titles since its 1993 release, showcasing its procedural capabilities for intricate puzzles, narratives, and world modeling. One classic example is Photopia (1998) by Adam Cadre, a poignant story blending multiple perspectives and time periods, which won multiple XYZZY Awards including Best Game.[40] Another standout is Spider and Web (1998) by Andrew Plotkin, an espionage thriller featuring interrogation mechanics and non-linear storytelling, also a multiple XYZZY winner for Best Game and Best Writing.[41]
Savoir-Faire (2002) by Emily Short explores alchemy and intrigue in an alternate France, with innovative inventory-based puzzles that manipulate object properties, earning praise for its elegant design.[42] For humor, Lost Pig (2007) by Admiral Jota (as Grunk) follows an orc's quest to retrieve a mischievous pig, using comedic dialogue and exploration; it won the 2007 Interactive Fiction Competition.[43]
Inform 6 remains relevant for compact games targeting retro platforms or Z-machine limits, with ongoing community use. In 2024, A Train to Piccadilly by Marco Innocenti won the IFDB Outstanding Inform 6 Game award for its atmospheric mystery set in Victorian London.[44] As of November 2025, the Interactive Fiction Database (IFDB) lists thousands of games built with Inform 6, many archived on the IF Archive.[45] These works highlight Inform 6's enduring flexibility for both classic parser adventures and modern experiments.
Integrated Development Environment
The Inform 7 Integrated Development Environment (IDE) is a standalone graphical application designed to facilitate the creation of interactive fiction through an intuitive interface that integrates editing, compilation, testing, and debugging tools. It provides a self-contained workspace where authors can write source text in natural language, access embedded documentation, and iteratively refine their projects without relying on external command-line tools. The IDE contrasts with earlier command-line-based predecessors by offering a visual, interactive workflow that lowers the barrier to entry for non-programmers while supporting advanced features for experienced users.[1]
At its core, the IDE features a built-in source text editor that supports project management by organizing files into dedicated folders (typically with a .inform extension), enabling authors to maintain structured projects with multiple source files if needed. The editor includes syntax highlighting to distinguish keywords, rules, and other elements, aiding readability and error spotting during development. Real-time source indexing automatically parses the code to generate dynamic documentation, such as the World Index, which visualizes the game's model world—including a stylized map of rooms and their connections, a taxonomy of kinds with default values, and lists of actions, rules, and relations—updating as the source evolves to provide conceptual overviews without manual intervention.[46][47][48]
Key testing and debugging tools streamline the development cycle. The prominent "Go" button compiles the source text into an executable story file and launches it directly in an embedded Story panel, allowing immediate playtesting; shortcuts like F5 (Windows) or Command-R (macOS) accelerate this process, and the IDE discards prior versions automatically for seamless iteration. If compilation fails, an Errors panel displays detailed diagnostics, highlighting problematic lines with explanatory messages derived from the compiler's analysis, such as syntax ambiguities or undefined relations. For final releases, the IDE supports building polished versions, including the generation of Blorb packages (.gblorb files) that bundle the story file with resources like images or sound, ensuring compatibility across interpreters. This workflow transforms natural language source (.ni files) into intermediate Inform 6 code and ultimately into Glulx or Z-machine story files, with the IDE handling packaging for distribution.[49][12][50]
The IDE is cross-platform, available for Windows, macOS, and Linux (via RPM, DEB, or Flatpak packages), ensuring accessibility across operating systems. Version 10.1.2, released on August 31, 2022, introduced stability improvements, such as enhanced error handling and better resource management, making it the current standard distribution. Following the open-sourcing of Inform 7 in April 2022, the IDE's source code is hosted on GitHub, allowing community contributions to features like UI enhancements and bug fixes, which are integrated into subsequent releases.[51][50][52]
Natural Language Programming
Inform 7 introduces a paradigm shift in interactive fiction authoring by employing a natural language-based syntax that allows developers to define game rules and structures using English-like statements, making the source code highly readable and accessible to non-programmers.[53] This approach contrasts with traditional programming languages by prioritizing declarative descriptions of intent over imperative instructions, enabling authors to model complex worlds through intuitive prose.[53]
The syntax principles of Inform 7 revolve around declarative rules, kinds, and phrases, which form the foundation for expressing game logic. Declarative rules specify behaviors in response to actions or conditions, such as "Instead of taking the cake, say 'You can’t take the cake – it’s too hot!'" to override default interactions.[53] Kinds define hierarchical categories for objects and values, promoting an object-oriented structure; for instance, "A door is a kind of thing" establishes doors as subclasses of general objects, inheriting properties while allowing specialization.[47] Phrases serve as reusable building blocks for actions, conditions, or values, written in natural prose like "To decide what number is the square root of (N - a number): ..." to encapsulate logic that can be invoked across the game.[54]
Core elements extend this natural language framework with tools for data management and computation. Tables organize structured information in a tabular format, akin to spreadsheets, for storing inventories, dialogues, or statistics; an example might declare "Table of Elements" with columns for name, symbol, and atomic number, populated row by row with text and numerical entries.[55] Equations handle calculations and properties declaratively, such as "The capacity of a backpack is usually 3" to set default limits that can vary by instance, supporting numerical kinds like distances or volumes for realistic simulations.[56] The activity system provides a mechanism for overriding and customizing Inform's built-in processes, using rules like "Before printing the name of a woman: say 'Ms ';" to modify output generation without altering core actions.[57]
Drawing inspiration from linguistics, Inform 7 treats programming as an object-oriented modeling exercise in natural language, which significantly reduces verbosity compared to procedural code by focusing on high-level descriptions rather than granular implementation details.[1] In contrast to Inform 6, which relies on low-level routines resembling C syntax for direct control, Inform 7 eliminates such imperatives, emphasizing author intent through rule-based declarations that abstract away machine-level concerns.[58] This relational, natural language paradigm fosters a more narrative-driven development process.[59]
Version 10.1.2, released in August 2022, includes refinements to the language's parsing capabilities, improving the handling of complex natural language constructs for greater robustness in source code interpretation.
Extensions System
Inform 7's Extensions System enables authors to incorporate reusable modules that enhance the core functionality of interactive fiction projects, such as adding custom rules for navigation, conversation, or user interfaces. These extensions function as modular add-ons, written entirely in Inform 7's natural language syntax, allowing developers to import predefined behaviors without rewriting common features from scratch. For instance, the extension Facing by Emily Short introduces actions for characters to face specific directions or peer through doors, facilitating more nuanced spatial interactions in games.[60][61]
Installation occurs seamlessly within the Inform IDE, where authors can select "Install Extension..." from the File menu to download and integrate files directly, or browse the Public Library tab in the Extensions panel for an online index of vetted options. This built-in directory simplifies access to community-contributed extensions, which are stored in the project's Extensions folder for easy management and removal. As of 2025, the primary Friends of I7 collection hosts over 130 extensions, with additional ones available from independent repositories, providing a rich ecosystem for customization.[62][60][63]
Extensions follow a standardized structure to ensure portability and reliability: each begins with a titling heading specifying the name, author, and version (e.g., "Version 11 of Facing by Emily Short"), followed by an optional rubric for documentation and examples. Compatibility is declared via headers that indicate support for specific Inform versions (such as 10.1) and output formats like Glulx or Z-code, helping to avoid runtime conflicts during compilation. Versioning employs a dotted numeric scheme (e.g., 5.2.1) to track updates, allowing authors to specify dependencies and resolve overlaps by overriding rules or using conditional inclusions.[64][65][66]
Among notable extensions, Basic Help Menu by Emily Short (updated by Wade Clarke) implements a comprehensive HELP command that presents players with instructional options via tables, improving accessibility for newcomers to interactive fiction. For wordplay mechanics, extensions like Text Capture and custom modules in games such as Counterfeit Monkey by Emily Short enable dynamic letter manipulation and object transformation, supporting intricate linguistic puzzles. These tools exemplify how extensions promote reusable, sophisticated features without altering the language's natural syntax.[61][60]
The community's role in extension development expanded significantly following Inform 7's open-sourcing in 2022 under the Artistic License 2.0, which facilitated collaborative updates on platforms like GitHub. Repositories such as Friends of I7 saw increased contributions, including compatibility patches for version 10.1 and new experimental modules, fostering a more vibrant and maintainable ecosystem.[11][67][68]
Code Example
To illustrate the natural language programming paradigm of Inform 7, consider a basic interactive scenario: a kitchen containing an apple that the player can take or eat, with customized responses stored in a table for modularity. This example demonstrates declarative rules that define world behavior in English-like syntax.[69]
inform7
"The Kitchen Puzzle" by Anonymous
The Kitchen is a room. "You are in a cozy kitchen with wooden counters. A shiny red apple rests on the table."
The apple is a thing on the table in the [Kitchen](/page/Kitchen). The description of the apple is "A ripe, tempting [fruit](/page/Fruit)." Understand "fruit" or "red thing" as the apple.
Table of Apple Responses
action (text) response (text)
taking "You pick up the shiny red apple."
[eating](/page/Eating) "You take a bite—it's crisp and sweet!"
Check taking the apple:
if the apple is not visible:
say "There's no apple in sight.";
stop the [action](/page/Action).
Instead of eating the apple:
choose row with action of "[eating](/page/Eating)" in the Table of Apple Responses;
say "[response entry].";
now the apple is nowhere.
Carry out taking the apple:
choose row with action of "taking" in the Table of Apple Responses;
say "[response entry]."
"The Kitchen Puzzle" by Anonymous
The Kitchen is a room. "You are in a cozy kitchen with wooden counters. A shiny red apple rests on the table."
The apple is a thing on the table in the [Kitchen](/page/Kitchen). The description of the apple is "A ripe, tempting [fruit](/page/Fruit)." Understand "fruit" or "red thing" as the apple.
Table of Apple Responses
action (text) response (text)
taking "You pick up the shiny red apple."
[eating](/page/Eating) "You take a bite—it's crisp and sweet!"
Check taking the apple:
if the apple is not visible:
say "There's no apple in sight.";
stop the [action](/page/Action).
Instead of eating the apple:
choose row with action of "[eating](/page/Eating)" in the Table of Apple Responses;
say "[response entry].";
now the apple is nowhere.
Carry out taking the apple:
choose row with action of "taking" in the Table of Apple Responses;
say "[response entry]."
This code creates a self-contained puzzle room where player inputs like "take apple," "take fruit," or "eat red thing" are parsed and handled. The Understand phrase extends the parser to recognize synonyms, allowing flexible command entry without rigid keywords. Rule phases structure interactions: the Check phase validates preconditions (e.g., visibility) and halts invalid actions; Instead overrides defaults for custom outcomes (e.g., eating removes the apple via the now ... is nowhere phrase, updating the world state); and Carry out executes post-validation effects, such as printing table-driven messages. The table provides a simple, extensible way to associate actions with responses, enabling easy addition of rows for new behaviors without altering core rules.
In execution, Inform 7 models the world state as a dynamic simulation: objects have locations and properties that change based on rules, while player input is tokenized and matched against defined understandings to trigger appropriate actions. For instance, "take fruit" resolves to the apple via parsing, checks visibility, carries out the take (printing the table response), and updates the inventory. This source compiles via an intermediate Inform 6 layer into Glulx bytecode, a 32-bit virtual machine format supporting larger stories, Unicode, and multimedia beyond the older Z-machine limits.
Compared to equivalent Inform 6 code, which requires procedural imperatives like explicit object creation and low-level action handling in a C-like syntax, Inform 7's declarative style enhances readability, allowing authors to focus on narrative logic rather than boilerplate implementation.[53] This basic example can be enhanced with extensions for more sophisticated parsing or object behaviors.
Notable Games
Since its release in 2006, Inform 7 has enabled the creation of numerous innovative interactive fiction titles that leverage its natural language syntax to craft intricate narratives and mechanics.[70] One standout example is Counterfeit Monkey (2012), authored by Emily Short, which features a unique letter-removal device allowing players to transform objects and solve espionage-themed puzzles in a linguistically playful world.[71] Another influential work is Hadean Lands (2014) by Andrew Plotkin, a sophisticated alchemy simulation set aboard a damaged spaceship, where players perform rituals combining elements to progress through interlinked challenges.[72] For a lighter tone, The Wizard Sniffer (2009) by Brian Fitzgerald humorously casts the player as a hapless dog tasked with detecting a shapeshifting wizard, emphasizing comedic interactions and parser-driven exploration.[73]
The adoption of Inform 7 post-2006 has fostered greater accessibility for authors, resulting in a surge of narrative-driven games that prioritize storytelling and emotional depth over traditional puzzle-heavy designs.[74] This shift is evident in the XYZZY Awards, where Inform 7 titles have frequently excelled; for instance, Counterfeit Monkey secured multiple categories in 2012, including Best Game, Best Puzzles, and Best Writing.[75] Similarly, Hadean Lands won Best Game and other honors in 2014, highlighting the system's capacity for complex simulations.[76]
As of 2025, the Interactive Fiction Database (IFDB) catalogs over 300 games explicitly tagged as built with Inform 7, with many more integrated into community platforms like IFDB for discovery and play.[70] This body of work demonstrates Inform 7's enduring role in the genre, supported by its integration with repositories such as the IF Archive.[77]
Recent community efforts continue to showcase Inform 7's versatility through open-source extensions, as seen in 2024 releases like Moondrop Isle, a collaborative puzzle adventure by multiple authors including Ryan Veeder, and Hebe by Marina Diagourta, which explores introspective themes.[78][79] These titles, often shared via itch.io and IFDB, reflect ongoing experimentation with the system's extensions for multimedia and branching narratives.[80]