Note: Answers to many questions you may have might be found in the Reference section’s links; they include a lot of info not in the docs.
Inform 7 10.1.2 (current, 2022-08-31)
- Docs for I7 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 I7 github repo (its README has links to the project’s 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.
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.
Building I7 from source (no IDE)
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.
Documentation and Resources for 9.3/6M62
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 (9.3/6M62)
- 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). It’s written for experienced programmers but parts are useful to any author; some of these 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 Writing with Inform audiobook
Reference
Writing with Inform read-through and 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
The "Rewrite The Parser in Inform 7" Project (6G60). Many details have changed since this was written, but Ron Newcomb’s Original Parser extension’s documentation remains an invaluable resource.
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 seemingly supported by countless examples in the docs, but these examples are focused on topics other than best practices for implementing actions: elements that aren’t a given example’s focus are often handled perfunctorily. If you put everything in Instead rules, your project will become an incomprehensible mess as it grows beyond example length. Don’t be the next 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’s output (previously, English Language was modest; 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 Inform not related to IF have been moved to Basic Inform. One can compile without the Standard Rules: see A Guide to Kits. Of the familiar activities and rulebooks, just the Starting the virtual machine, Printing the name, and Printing the plural name activities and Startup and Shutdown rulebooks remain. A to begin phrase is required 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. They’re (mostly) highly readable and highly relevant to understanding Inform. Familiarity with the Actions section is key to understanding how to modify the built-in actions without heartbreak. @otistdog 's Standard Rules Actions reference (9.3/6M62) detail their behavior and implementation.
Encountering a conflict while implementing a command that already exists often trips up beginners. The docs don’t detail them. Actions > Commands in the Project Index does and the Actions reference above has charts of actions by command and commands by action.
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 (has details on 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: novel, powerful, occasionally even useful techniques
- Rulebooks are a bit like switch statements... and yet different and Subroutine-ish things
- Side-effects from printing texts
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 terps (interpreters), see Glulx and Z-machine below.
Extensions
The Windows IDE supports easy installation of extensions from the offical Inform Public Library. It’s broken in the Mac OS and Linux IDEs for 10.1.2, but one can still install extensions manually: see Where to find Inform 7 Extensions.
The Friends of I7 Extensions is the most comprehensive source (the Public Library is based on its contents c. 10.1.2’s release).
- Docs for the Friends of I7 Extensions
- Counterfeit Monkey’s Extensions: many unique extensions, many others modified from their originals
- Glulx/Glk extensions ecosystem
Beyond this topic, Authoring > Inform 7, Technical Development > Inform Extensions is for discussion of (existing, published) extensions.
Extension Writing Guides
Select games/examples with Source Code available
- @zarf’s Advent Window
- Games from 2022– tagged I7 source available on IFDB are mostly 10.1.
9.3/6M62
- Alex Proudfoot’s I7 Standard Examples ports, including @emshort’s Bronze
- @mathbrush 's Never Gives Up Her Dead
- Chin Kee Yong’s The Weight of a Soul
- Victor Gijsbers’ Kerkerkruip
- Ryan Veeder Expo for Good IF Event 1: Beautiful Source Code
- Cragne Manor by divers hands
- @emshort’s Counterfeit Monkey: especially valuable as an example of optimization in service of a large game; older Counterfeit Monkey source prior to optimization and reorganization
Earlier
- Slouching Towards Bedlam (6L02)
- @Juhana’s Sparkle (6L02)
- @Draconis’ Scroll Thief, Scroll Thief Bitbucket repo (6G60)
- @zarf’s Hadean Lands (6G60)
- @aaronius’ Blue Lacuna (5Z71)
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 standard library is built upon I6 in “kits”, previously called the “I6 Template Layer”). (The I6 standard library isn’t involved.)
The current version is I6 6.44. (I7 10.1’s I6 is 6.41.)
The Inform 6 Designer’s Manual (DM4) was last revised in 2001, for I6 6.21. Glulx support came in the next release, 6.30; much more has been added since. Some essential docs are:
[I6] The list of Inform 6 documentation has much more.
The docs stress that you shouldn’t need to concern yourself with what lies beneath, but…
- interaction with the I6 layer is the only way to do some things (many extensions rely on it)
- some I7 behaviors are best understood as artifacts of I6 representations
- directly reading the I6 the I7 compiler generates can be vitally 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, such as:
- CheapGlk (no windows, no status line, just an input stream and an output stream; of interest largely for testing and development) – C (for support of UTF-8 I/O beyond Latin1, invoke the terp with the
-ucommand-line flag) - GlkTerm – C (for use in a terminal; supports a status line and multiple windows); GlkTermw (supports characters beyond Latin1)
- GlkOte (Quixe/Lectrote) – Javascript, for use in a browser
- cheap-glkote – Javascript (GlkOte variant used in ElseIFPlayer)
- RemGlk (I/O via JSON objects; supports multiple windows and most Glk events) – C
- CocoaGlk (Mac IDE) – C
- Miniglk – default when compiling to C, built into I7
- GlkOte-term – Javascript
The Spatterlight, Gargoyle, and Lectrote apps and the Quixe and Parchment templates all use Glk for I/O even with Z-code. Glk can’t match all of the Z-machine’s text color options… without the (non-standard) Gargoyle Glk extensions. The implementations above don’t support them; these do:
- 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
display the boxed quotation looks bad in Glk. In apps using Glk for the Z-machine, Z-code games’ boxed quotations will look bad, too.
More Glk implementations on the IF Archive
Differences between Javascript & C Glk APIs
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 (as Parchment does).
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 (Gargoyle/Parchment/Spatterlight; Glk-based; Bocfel has useful debugging options)
- Fizmo – C
- ZVM (Lectrote) – Javascript
- Gluzma – Glulx assembly
- Zig – I6
- JSZM – Javascript (700 lines)
Fun ones:
One could run a Z-code game within a Glulx game with Zig or Gluzma.
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
- Tara McGrew’s Z-machine version comparison chart
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
Before releasing, you may want to add a cover image.
The Web
Per WI Ch. 25: Releasing, 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
10.1 includes:
…but the included version of Parchment is broken. Get the latest Parchment (ZIP) (version 2025.1.14) and unzip it in your project’s Materials directory.
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 is just for 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. Async Glk is the front end; RemGlk-rs intermediates between it and the terp. “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 an interpreter template/extension combo; it allows ongoing interaction between a running game and author-created Javascript in the browser, unlocking enormous potential. Jack Welch’s re: Dragon (source available) demonstrates an extensively customized UI.
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 is Electron wrapped around Quixe, roughly. It derived from @Zarf creating cross-platform stand-alone apps for Hadean Lands and can be the basis for a “bound game”; 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 (includes a Python version)
Blorb manipulation
- blorbtool – Python ; blorbtool online
- inblorb (I7 10.1) – C
- Bamboozle (TUI) – C
- IFTools – C#
- cBlorb (I7 9.3) – C
- snavig – Rust
Editor plugins
- vscode-inform7
- inform7-mode for Emacs and another inform7-mode
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 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 turned off 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.

