Note: Answers to many questions you may have might be found in the Reference section’s links; they provide a lot of info not in the docs.
Inform 7 10.1.2 (current, 2022-08-31)
- Docs for Inform 7 10.1 and IDE (integrated development environment)
- Compiler and tools docs/literate source
- Release notes detail changes and bugfixes
- the 10.1 announcement thread
- The Inform 7 github repo links to individual components
- Bug tracker (requires Atlassian account to view or post)
Installation
@Juhana’s Borogove lets you edit and run I7 (10.1, 9.3/6M62, or 8.5/6G60) online: experiment without installing anything. Borogove snippets allows sharing code examples.
Inform 10.1.2 packages for Mac OS, Windows, or Linux (as RPM, .deb
, or flatpak (Linux IDE installation notes). These include the IDEs; the zipped source code archives there do not.
Version History
10.1 introduced a new version number scheme. Prior to 10.1, releases’ names were their build numbers. Version history has detailed change logs for each release.
Build | Version | Released |
---|---|---|
6G60 | 8.5 | Dec 2010 |
6L02 | 9.1 | May 2014 |
6L38 | 9.2 | Aug 2014 |
6M62 | 9.3 | Dec 2015 |
10.1 | Aug 2022 |
9.1/6L02 included substantial language changes. Expect that it would take substantial revision to adapt 8.5/6G60 (or previous code) to a later release. From 9.1 on, most code would compile in the subsequent version with only minor tweaks, with low-level interaction with the I6 layer (including extensions doing such) as a conspicuous exception.
Many links below are labeled with the I7 version as of which they were current.
Further 9.3/6M62-specific details are below.
Development
The next release will be 11.0. No schedule has been announced. 9.3 is no longer supported; further releases of 10.X are not anticipated. proposals for development are at Inform Evolution.
Learning
Tutorials. Start here!
- Allison Parrish’s I7 Concepts and Strategies (6M62)
- Carolyn VanEseltine’s Welcome to Adventure: A Quick-Start Guide to Inform (6L38)
- Drew Cook’s Inform Basics (10.1)
Manuals/Books
- The Inform 7 Handbook by Jim Aikin; I7 Handbook PDF (10.1)
- Ron Newcomb’s I7 Programmer’s Manual (6G60). Overall written for experienced programmers, but parts are useful to any I7 author: some are linked below. (Previously titled “Inform 7 for Programmers”)
- @aaronius’ book, Creating Interactive Fiction with Inform 7 (6E72). B&N sells an epub of Creating Interactive Fiction for the Nook; it is otherwise out-of-print: PDFs you may see online are bootlegs
- Ryan Veeder’s audiobook of Writing with Inform
- Jason Boyd’s Inform 7 Introductory Guide (6M62)
Reference
Writing with Inform read-through, with commentary (9.3/6M62)
Deep dives by @drpeterbatesuk
- Spatial and other relations between objects & Spatial relations addendum
- Action / Grammar Token reference
- Action Patterns
- Scope and visibility & Scope and visibility II
- Definite/indefinite articles & improper/proper, singular/plural names in thing creation
- How backdrops work
I7 reference manual (Unofficial), discussion of I7 reference manual
Times, Turns, and Tenses: details on using past tense in conditionals and counting occurrences of actions
- Chronological records
- Chronological record maintenance details
- Reporting and changing state - #11 by otistdog
The Looking action’s activities and rules
Line break behavior; see also Nathanael’s Cookbook
WI 27.14: what’s permissible in I6 inclusions (10.1)
Oliver Reiser’s I7 cheatsheet (6G60)
@emshort’s rules flowchart (PDF) (5U92) illustrating the turn sequence
I7 Windows IDE with the NVDA screenreader
Compilation produces a Project Index, customized for your game and viewable in the IDE. In some ways, it’s the closest thing to an official reference manual, including many details not in the docs. Its Phrasebook Index section (Phrases, Lexicon, Relations, Verbs) is good to check (along with the docs’ General Index) when you half-remember something and are hunting for the right term to look up.
The literate source describes in detail how I7 parses your story; the Syntax.preform documentation (PDF) (6L02) is a slightly outdated but mercifully condensed account. Syntax.preform is also where you can see what irregular verbs and plurals I7 handles (and how).
When to use which action rulebooks?
Don’t just put everything in Instead
rules. It’s seductively quick and easy and the practice is seemingly supported by countless examples. Examples focused on something else; elements that aren’t a given example’s focus are often handled perfunctorily. As a project grows beyond example-length, it quickly becomes an incomprehensible mess if you put everything in Instead
rules. Yours won’t be the exception. Don’t be another cautionary tale. See the docs’ Guidelines on how to write rules about actions and:
- When to use which action processing rules
- The perils of INSTEAD
- Message for failed actions - #4 by Zed
- Verb confusion- trying to feed my animals - #10 by Draconis
- Understanding understand and instead
Built-in Extensions
They all use authorial modesty, thus don’t appear in the version
command output (previously, English Language was modest and the Standard Rules were not). They can be browsed within the IDE: see “Contents” in any compiled game.
9.3 had just the Standard Rules and English Language. The parts of the Inform language not related to IF have been moved to Basic Inform. One can compile without the Standard Rules: see A Guide to Kits. You’ll have just the Starting the virtual machine, Printing the name, and Printing the plural name activities and the Startup and Shutdown rulebooks. You’ll need a ‘to begin’ phrase for your main code (‘to begin’ has no special significance outside the Basic Inform-only case).
The Standard Rules are the authority on I7’s World Model and actions’ behavior. If you want to modify the built-in actions, read the Actions section. Most of the rest is also highly readable and they’re important to understanding Inform.
@otistdog 's Standard Rules Actions reference (6M62) detail their behavior and implementation; includes lookup charts for:
@mathbrush’s 77 Verbs is a useful tutorial for the default commands.
Useful threads/posts
- The first thing you need to understand about Inform is
- Most common 'mistakes' and 'crutches' for those starting out with inform 7?
- The hidden secrets of Inform 7
- Command-line Inform 7: how to use ni, inform6, and cBlorb by CLI for 9.3/6M62 (includes details on a projects’ directory/file structure)
- Performance Best Practices (there are some expensive things to avoid, but there’s no substitute for profiling to see where your game is spending its time)
- Good coding style in Inform 7
- Limits on command length
- The Bubbling Beaker awards spotlight novel, powerful, sometimes even useful techniques
- Rulebooks are a bit like switch statements... and yet different
Testing and Quality Assurance
- Checklist for authors of IF and Inform 7 IF in particular
- One tester's game polish tips for parser authors
Elsewhere
Ryan Veeder
Playing
Popular desktop applications supporting I7 games include:
- Lectrote
- Gargoyle
- Spatterlight (Mac OS)
See List of glulx/.gblorb interpreters. For more interpreters, see Glulx and Z-machine below.
Extensions
- Where to find Inform 7 Extensions
- Docs of Friends of I7 Extensions
- Counterfeit Monkey’s Extensions: many unique extensions, many others modified from their originals
Separate from the Authoring > Inform 7 here, Technical Development > Inform Extensions discusses issues with existing published extensions.
Glulx/Glk extensions ecosystem
Extension Writing Guides
Select games/examples with Source Code available
- Alex Proudfoot’s I7 Standard Examples ports, including @emshort’s Bronze (6M62)
- Hadean Lands (6G60), Zarf’s other games (various)
- @Draconis’ Scroll Thief, Scroll Thief Bitbucket repo (6G60), Enigma of the Old Manor House (6M62)
- Chin Kee Yong’s The Weight of a Soul (6M62)
- Victor Gijsbers’ Kerkerkruip (6M62)
- @Juhana’s Sparkle (6L02)
- Jack Welch’s re: Dragon (Vorple game with a custom interface) (6M62)
- Crowther and Woods’ Adventure (6M62)
- Ryan Veeder Expo for Good IF Event 1: Beautiful Source Code (6M62)
- Andrew Schultz’s games
- Aaron Reed’s Blue Lacuna
- Brian Rushton’s Grooverland
- IFDB search for I7 games with source code from 2016 on (6L38 on up)
- Many Inform games’ source code on the IF archive. Not labeled with versions – some are old, some are recent
- Cragne Manor by divers hands (6M62)
- @emshort’s Counterfeit Monkey (6M62) Especially valuable if you’re writing a large game or are concerned with performance: it has been extensively optimized; older Counterfeit Monkey source prior to optimization and reorganization
How to Organize/Structure Your Project
There’s no one answer; here are multiple answers. See games with available source code above for examples.
- Splitting the story into multiple files
- I7 Code Organization and Efficiency
- @Juhana’s Structuring I7 Code
- Ryan Veeder’s How to Write the Way I Write in I7
- Effective structuring and layout of code - Inform 7
Infrastructure
Inform 6
I7 compiles to I6 which is compiled to your choice of Glulx or Z-code (v8 only – I7’s too big for the others). The I6 Standard Library isn’t involved; I7 uses “kits”. (Previously, the I6 used by I7 was called the “I6 Template Layer”.)
The current version is I6 6.43. (I7 10.1’s is I6 6.41.)
The DM4 (Inform 6 Designer’s Manual) was last revised in 2001, when I6 6.21 was current. Glulx support came in the subsequent version, 6.30; much more has been added since. Some essential docs are:
[I6] The list of Inform 6 documentation has much more.
The I7 docs stress that you shouldn’t need to concern yourself with what lies beneath. However:
- interacting directly with the I6 layer is the best or only way to do some things (many extensions do so)
- some I7 behaviors are best understood as artifacts of I6 representations
- direct reading of the I6 code generated by the I7 compiler can be helpful when troubleshooting
Glulx
Interpreters
- Glulxe (C), the reference implementation
- Glulxe debugger (requires compilation with
VM_DEBUGGER
) - profiling with profile-analyze.py (requires compilation with
VM_PROFILING
)
- Glulxe debugger (requires compilation with
- Git (C) [ the name predates that other git ]
- Quixe (Javascript)
Glulx Reference
Glulx Utilities
- Compile glulx binary to C (glulxtoc)
- Compile C to Glulx assemply
- Blaze Alan Marshall’s mrifk Glulx reverse compiler and disassembler
Glulx assemblers
- Gren Drake’s glulx-assemble
- zzo38’s glasm
- Glazer
Glk
Glulx I/O is via the Glk API. Glulx terps require a Glk library.
The Spatterlight, Gargoyle, and Lectrote apss and the Quixe and Parchment templates all use Glk for I/O even with Z-code games. Text color support per the Glk spec can’t do everything the Z-machine can; the non-standard Gargoyle Glk extensions can.
Some implementations with the Gargoyle Glk Extensions:
- GarGlk (Gargoyle) – C++
- WindowsGlk (Windows IDE) – C++
- Async Glk (Parchment) – Typescript
- RemGlk-rs (Emglken) – Rust
- Chimara (GTK3 widget used by Linux IDE) – C
- Spatterlight’s Glk – C
And without them:
- CheapGlk (no windows, no status line, just streams of input and output; of interest largely for testing and development) – C
- GlkTerm (ncurses) – C
- GlkTermw (“wide char” GlkTerm for Unicode characters beyond Latin1) – C
- GlkOte (Quixe/Lectrote) – Javascript
- cheap-glkote (GlkOte variant used in ElseIFPlayer – Javascript
- RemGlk (I/O via JSON objects; supports multiple windows and most Glk events) – C
- CocoaGlk (Mac IDE) – C
- Miniglk (built into I7, the default when compiling to C) – C
- GlkOte-term – Javascript
The IFArchive has more Glk implementations.
Differences between Javascript & C Glk APIs
display the boxed quotation
looks bad in Glk. In apps using Glk for the Z-machine, Z-code games’ boxed text quotes will look bad, too.
Glk via network
- Remote-IF Websockets or AJAX to RemGlk
- glknode HTTP API to CheapGlk
- glulxe-httpd HTTP API to CheapGlk; support for sessions & transcripts, see langworth.com
If you want a front-end process to handle user I/O while a back-end process runs a game, the obvious choice is for the back-end to use RemGlk. (This is how Parchment works.)
Glk Reference
- The Game Author’s Guide to Glulx Inform
- Roger Firth & Adam Thornton’s Brief Glk, via Grokking Glk
- Adam Cadre’s Gull: an introduction to Glulx Inform
Z-code
There are countless Z-code interpreters, e.g.
- Frotz – C
- Bocfel (Glk-based; used by Gargoyle/Parchment/Spatterlight); offers useful debugging options
- Fizmo – C
- ZVM (Lectrote) – Javascript
- Gluzma – Glulx assembly
- Zig – I6
- JSZM – Javascript (700 lines)
Fun ones:
gluzma and zig could enable running a Z-code game within a Glulx game.
Z-code Reference
- Z-machine 1.1 standard, annotated
- The Z-Machine Standard 1.2 (draft) | Dannii’s IF Pages
- Z-machine spec errata
- Z-machine standard: unclear aspects/ambiguities
- Michael Ko’s Internal Secrets of Infocom Games
- Jeff Nyman’s Zifmia: Z-machine terp tests
Z-code Utilities
- ztools including txd, the zcode disassembler
- Allen Garvin’s ztool, python port of (most of) ztools
- Unz: unpack Z-machine file info
- reform: reverse compile Z-code to I6
- Chris Spiegel’s ZDevtools (zcode assembler/disassembler)
- ZLR debugger
Publication
The Web
Per Ch. 25: Releasing in WI, release with a website
produces a web page with links to the game file (and any other included digital assets); release with an interpreter
results in a game playable in a web browser. The templates used shape the results.
Web templates
Web templates dictate appearance. I7 includes the default Standard template and the straight-out-of-2005 Classic template. @Draconis’ Styled is another.
Interpreter Templates
I7 10.1 includes:
The included version of Parchment has a fatal flaw and won’t work. Download the file of the form parchment-for-inform7-YYYY-MM-DD.zip
from a more recent Parchment release and unzip it in your project’s Materials directory. The current version is 2025.1.14.
If you release with an interpreter
I7 defaults to Quixe if you’re compiling to Glulx or Parchment if compiling to z-code. You may specify release with a "Parchment" interpreter
when compiling to Glulx. (Quixe only works with Glulx.)
Quixe’s Glulx terp is quixe.js (“Quixe” often refers to the terp, not the template.)
Prior to 2025.1, Parchment used ZVM and quixe.js. Thereafter, it uses Git, Glulxe, and Bocfel compiled to Wasm by Emglken along with RemGlk-rs; Async Glk mediates between RemGlk-rs and the browser. (“Parchment” often refers to the large project powering iplayif.com, not the template.)
Bisquixe
@Mathbrush 's Bisquixe, a modified quixe template plus I7 extension (for 9.3/6M62 or 10.1) allows easy changes to text/formatting style during play and hyperlink support sufficient for Fake Twine.
- Web styling with Bisquixe for new Inform authors (who don't know CSS or web stuff)
- Beginner's Guide to Styling Inform Releases with Bisquixe
Vorple
Vorple is also an interpreter template/extension combo. It allows ongoing interaction between a running game and author-created Javascript in the browser, unlocking enormous potential that remains largely untapped.
Alternatives
- @Zarf’s ifsitegen.py is a command-line script that acts on a z-code, Glulx, or blorb file; results are similar to releasing with Quixe
- IPlayIF’s sitegen is online and uses Parchment: upload a game file; it creates and downloads a browser-playable game as a single HTML file
ElseIFPlayer is another web-player, but there’s no corresponding interpreter template.
Hosting
Some free ways to publish a game on the web:
If the blorb file (or .z8
or .ulx
) for your game is web-accessible via some plain URL, you can pass that URL to IPlayIF. Note the URL of the IPlayIF page you’re redirected to: if your game remains available at the original URL, anyone can use that IPlayIF URL to play your game online. (Or, the desired IPlayIF URL is https://iplayif.com/?story=
plus the URL-encoded URL of your game file.)
If you upload your game to the IF Archive then (once it’s approved) you’d have a suitable URL to pass to IPlayIF. Many Inform games’ IFDB pages’ Play online buttons do this.
Stand-alone application
Lectrote derived from @Zarf’s work to create cross-platform stand-alone apps for Hadean Lands; it’s Electron wrapped around quixe (roughly). It’s possible to create your own “bound game” with it; see trying to make standalone game w/ Lectrote .
One can also compile Inform into C that can compile into a standalone executable.
Utilities
- I7 source highlighter
- regtest – regression testing for IF running on any interpreter either built with RemGlk or using plain simple input and output streams for I/O (like dfrotz from Frotz or anything built with CheapGlk)
- @Natrium729’s I7 Text Extractor – extracts strings from I7 source (for ease of proofreading)
- Jacques Frechet’s glulx-strings online – extracts all strings from glulx, zcode, or several other formats (accepts blorbs)
- glulx-strings source – source code; includes a more limited python version
Blorb manipulation
- blorbtool – Python
- inblorb (I7 10.1) – C
- Bamboozle (TUI) – C
- IFTools – C#
- cBlorb (I7 9.3) – C
- snavig – Rust
Editor plugins
I7 in translation
- Manifesto for the translation of I7 (PDF) (6G60) by Graham Nelson
- Swedish (6G60) by Felix Larsson
- Italian (6M62) by Massimo Stella, maintained by Leonardo Boselli
- French (6L38) by Nathanaël Marion
- Spanish (10.1) by Sebastian Arg (see also centro de documentación I7)
- German (6G60) by Team GerX
How to Not Lose This Post
This post is pinned to its category. By default Discourse unpins a thread when you reach the bottom. This can be deactivated in Interface under Preferences in your Profile. Or you can bookmark it: the bookmark icon is at the bottom of the post (you may have to select a …
icon to see it). To see your bookmarks, select your profile icon in the upper right, then select the bookmark icon there. If you do lose the post, search the forum for “documentation and resources” or visit while logged out.
This ain’t over
Documentary and resourceful goodness continues in the I7 Docs and Resources Annex below!