- Inform 7 v10 language and IDE documentation
- Inform 7 v10 compiler and tools docs
- Inform 7 v10 bug tracker
- Inform Evolution: proposals for future development
- v10 discussion thread
- WI 27.14: Longer extracts of Inform 6 code details changes to what I6 is permitted in inclusions
- Linux IDE installation notes
v10 renders some specifics on this page out of date; it will be updated as soon as is feasible.
9.3/6M62 language and IDE docs, included in the IDE (integrated development environment).
Excellent : start here.
- Allison Parrish’s Inform 7 Concepts and Strategies (6M62)
- Carolyn VanEseltine’s Welcome to Adventure: A Quick-Start Guide to Inform (6L38)
The official packages mentioned below are available at: I7 Downloads.
Use the package on the I7 site; don’t try using the one from the App store (despite the assurance that “the current version of Inform is always available from the Mac App Store.”) There are known issues with slowness on machines with TouchBars and the cursor disappearing in Dark Mode. An unofficial MacOS IDE release addresses these. Testing examples in Extension Projects doesn’t work.
Use the package on the I7 site (said to work with any version of Windows from XP SP 3 on). Or there’s a current beta release of a new Windows version that allows compiling for 6L02 and 6L38 as well as 6M62. It’s 64-bit-only, and has been tested only on Windows 10, but may work with older versions. Be warned that there have been multiple reports of security/antivirus programs causing problems with it: Avast, AVG, Windows Defender.
LinuxThe 6M62 IDE package have uses GTK2; for a long time, GTK3 has been the norm, making the IDE hard to build on a modern Linux.
The official download page also offers a CLI-only version for Linux, which comes with “the cheesy Perl interface”. Or consult How to use ni, inform6, and cBlorb by CLI for info on using those commands directly. Some projects to help are Vimform7, the Inform 7 extension for VS code, Spaceformacs, and inf7.
Versions of ni prior to 6M62 are incompatible with Linux kernels >= 4.11 (from 2017). To build for 6L38 or older an old Linux in a VM or Windows Inform in WINE are the options (or for 6G60 use playfic.com online).
The official packages include components that have more recent versions. Some updates:
- Inform 6 6.41; Inform 6 6.41 for Windows (zip archive)
- Glulx Entry Points and Glulx Text Effects by Emily Short
- the Quixe, Parchment, and Vorple templates
In general, references written regarding 6L02 or 6L38 remain relevant for 6M62. Version 6L02 had many backwards-incompatible changes: code written for 6G60 or earlier is unlikely to compile in 6L02 or later. This document usually notes the version as of which something was current. The Change Log has exhaustive details:
- The Change Log (comprehensive)
- Change Logs per release
- Change log in Mantis (the former bug tracker)
Ron Newcomb’s Inform 7 Programmer’s Manual (6G60). While overall written for an audience of experienced programmers, don’t miss:
Backstage Activities includes a great outline of how
carry out lookingworks
- Times, Turns, and Tenses details on counting occurrences of actions, and using past tense in conditionals
@aaronius’ book, Creating Interactive Fiction with Inform 7. It was for 6E72; Creating Interactive Fiction with I7’s errata provide updates for 6G60. Creating Interactive Fiction’s publisher lists the physical book as available to order and B&N sells an epub of Creating Interactive Fiction for the Nook. (There was never a legitimate PDF version for sale; if you see such, it’s… not legitimate.)
Jason Boyd’s Inform 7 Introductory Guide (6M62)
- Oliver Reiser’s I7 cheatsheet (6G60)
- @emshort’s rules flowchart (PDF) (5U92) illustrating the turn sequence
- Otis the Dog’s Standard Rules Actions reference (6M62)
- Which action rulebook to use: Is there a special syntax for dropping something in a conditional? - #12 by Dizzydonut, Rule is compiling but is ignored (Solved) - #4 by HanonO, What Rulebook? - #11 by Juhana, The perils of INSTEAD, Message for failed actions - #4 by Zed, Verb confusion- trying to feed my animals - #10 by Draconis
- Scope and visibility; Scope and visibility II
- Spatial and other relations between objects and Spatial relations addendum
- Action / Grammar Token reference
- Articles in thing-definition and improper/proper, singular/plural names
- Chronological records (“was”, “has been”, “had been” in conditions); chronological record maintenance details, Reporting and changing state - #11 by otistdog
- Nathanael’s Cookbook includes a useful reference to I7 line break behavior.
Compilation produces a Project Index browsable in the IDE which offers an enormous amount of detail about I7, including things not in the docs. It’s the closest thing to a reference manual. Its Phrasebook Index section (Phrases, Lexicon, Relations, Verbs) is good to check (along with the docs’ General Index) when you half-remember something you’ve heard of and need to find the right term to look up.
The actual syntax the I7 compiler uses to parse I7 code can be found in Languages/English/Syntax.preform in your installation’s Internal directory. The Backus-Naur Form syntax provided isn’t accurate. See the Syntax.preform documentation PDF (6L02). Syntax.preform also lets you see what irregular verbs and plurals Inform 7 handles and how.
Counterfeit Monkey’s Extensions: beyond the many unique extensions, many other extensions included here are modified from their original versions.
Separate from the Authoring > Inform 7 category here, there is a Technical Development > Inform Extensions category chiefly discussing issues with existing published extensions
Extension Writing Guides:
I7 includes the Standard Rules with every game. They’re well-commented and the authority on the I7 World Model and I7’s defaults (they used to be labeled Appendix A of the documentation). They can be browsed in the IDE. (See “Contents” within any compiled game.)
Note the warning in Writing in Inform 27.14: things in the SR that look modifiable may not really be; they could be interdependent with something hard-coded in the compiler. And beware that all of the past three versions’ Standard Rules (6L02, 6L38, 6M62) are marked Version 3/120430, but each is different. (Likewise, 6E59 through 6G60’s Standard Rules are all marked Version 2/090402 but each is different.)
- Chin Kee Yong’s The Weight of a Soul (6M62)
- Victor Gijsbers’ Kerkerkruip (6M62)
- Alex Proudfoot’s ports of The I7 Standard Examples, including @emshort’s Bronze (6M62)
- Andrew Plotkin’s games
- @Draconis’ Scroll Thief, Scroll Thief Bitbucket repo (6L38), Enigma of the Old Manor House (6M62)
- @Juhana’s Sparkle (6L02)
- Jack Welch’s re: Dragon, a Vorple I7 game with a non-standard interface (6M62)
- Crowther and Woods’ Adventure (6M62)
- Ryan Veeder Expo for Good IF Event 1: Beautiful Source Code (6M62)
- Andrew Schultz’ games
- Aaron Reed’s Blue Lacuna
- Brian Rushton’s Grooverland
- IFDB search for I7 games with source code from 2016 on (6L38 and 6M62)
- 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 worth examining if you’re writing a large game or concerned with performance: it’s one of the larger I7 games and has been extensively optimized. Don’t deprive yourself of the pleasure of playing it without spoilers first, though. Older Counterfeit Monkey source prior to optimization and reorganization.
I7 compiles to Inform 6 before that gets compiled to Glulx or z-code. The Inform 6 Standard Library isn’t involved; I7 uses the I6 Template Layer that every Inform installation has under Internal/I6T. These used to be labeled Appendix B of the documentation: their comments often document things that aren’t documented elsewhere.
There are places where the best or only way to do something is by interacting directly with the I6 layer (many extensions do so) and other places where I7 behaviors can be better understood by understanding how they’re an artifact of I6 representations or where reading your project’s auto.inf, the I6 code that I7 generated, is useful to investigate problems.
- @emshort’s Translation of Inform 6 Entry Points into Inform 7 (4X60)
- Much more at The List of Inform 6 Documentation
- 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 project’s files and directory structure)
- Checklist for authors of IF and Inform 7 IF in particular
- Performance Best Practices (there are a couple of 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
- If you’re encountering memory limits in compilation, see Memory Limit and Storage Variable Limit settings or try Inform 6 6.36 or higher, which does away with these limits.
There’s no one answer; here are multiple answers (see games with available source code for examples.)
- Splitting the story into multiple files
- I7 Code Organization and Efficiency
- Juhana Leinonen’s Structuring I7 Code
- Ryan Veeder’s How to Write the Way I Write in I7
- Effective structuring and layout of code
- Using the I7 Windows IDE with NVDA (a screenreader)
There are known bugs in 9.3/6M62. The Inform 7 bug tracker allows you to search for them, and there may be commentary on them, but for any fixes you would have to upgrade.
The 6M62 Patches by Friends of I7 extension provides fixes for a few known issues.
The version of Inform 6 that ships with 9.3/6M62 is 6.33N. The current version is 6.41. If you have updated to the current version, bugs against it can also be reported at the Inform 7 bug tracker
There isn’t a way to search for known issues in cBlorb or to report them. (It was succeeded in v10 by inblorb.)
The old Inform 7 suggestion forum is accessible by the Wayback Machine.
- glulxe, the reference implementation (C)
- git (C) (It existed by that name before the version control system existed.)
- Zag (Java)
- Emacs-glulx (Elisp)
- glulxe-httpd (runs a cheapglk-glulxe server-side, making a game playable on the web without distributing its game file)
- glknode HTTP API to a cheapglk-glulxe
There are many Glulx interpreter applications built for particular systems that include Glulxe, Git, or Quixe. These interpreters make their I/O calls to the Glk API and must be accompanied by a Glk library to actually be useful (Emacs-glulx and Zag’s Glk implementations are built-in). Some implentations:
- cheapglk (no window, no status line, just streams of input and output; of interest largely for testing and development)
- glkterm (uses the curses library, widely available in any UNIX-like environment)
- glktermw (glkterm with “wide char” support, i.e., it can handle Unicode non-Latin-1 characters)
- remglk (doesn’t directly receive user input or display output to the user; it receives and emits JSON objects, allowing use by other applications potentially across a network)
- CocoaGlk (used by the I7 Mac IDE)
Glk per its spec doesn’t offer the text color control that would be necessary to match the Z-machine. The non-standard Gargoyle Glk extensions can do so. Implementations including them:
- garglk (the Gargoyle multi-system interpreter uses its own)
- WindowsGlk (used by the I7 Windows IDE)
- Async Glk @Dannii’s Typescript implementation, used by Parchment
- Chimara GTK3 widget, used by the Linux IDE
- the Glk implementation in Spatterlight
- Roger Firth and Adam Thornton’s Brief Glk, via Grokking Glk
- @Zarf’s The Game Author’s Guide to Glulx Inform and Glulx Inform Technical Reference
- Adam Cadre’s Gull: an introduction to Glulx Inform
Z-code interpreters: countless, including:
- the venerable Frotz
- Bocfel: uses Glk; offers a lot of interesting comand-line flags – Bocfel’s man page
- fun ones: Z-machine in hardware, Z-machine on a pen, Folly: Z-machine on an e-reader with handwritten input
- The Z-machine standard
- Michael Ko’s Internal Secrets of Infocom Games
- Jeff Nyman’s Zifmia: Z-machine terp tests
- blorbtool.py – manipulate blorbs
- ifsitegen.py – go from a zcode file, glulx file (.ulx), or blorb to a playable website; processes images from blorbs better than I7 itself
- I7 source highlighter with I7 to HTML and Inform 7 to rtf options
- regtest – regression testing for IF running on any interpreter that uses simple input and output streams for I/O, like Frotz’ dfrotz variant or anything built with CheapGlk, or with anything using RemGlk; Nils Fagerburg wrote a regtest bash completion script
- profile-analyze.py – parse profiling data from glulxe (when it’s compiled with the VM_PROFILING flag)
- Jacques Frechet’s glulx-strings extracts all strings from zcode or glulx (including when in blorbs)
- @Natrium729’s I7 Text Extractor – extracts strings from Inform 7 source (for ease of proofreading)
- Blaze Alan Marshall’s mrifk Glulx reverse compiler and disassembler
- ztools: the Infocom toolkit, including txd, a zcode disassembler
- Allen Garvin’s ztool, a python port of (most of) ztools
- @Dannii’s glulx to C decompiler (glulxtoc)
- @Juhana’s IF recorder is a Parchment plugin to save transcripts
- Gren Drake’s glulx-assemble (a glulx assembler)
- zzo38’s glasm (a glulx assembler)
- Chris Spiegel’s zdevtools (zcode assembler/disassembler)
- Compile C to Glulx
- reform: reverse compile Z-code to I6
- Charles Cox’ glk-node REST API to a cheapglk terp
- Ian Langworth’s glulxe-httpd: REST API to cheapglk terp, supporting sessions and transcripts, in action at langworth.com
Notable ones for older versions:
- Ron Newcomb’s I7 port of the I7 parser (6G60) There have been changes to the parser since this was current, but the documentation section at the bottom constitutes the best documentation of the I7 parser extant.
- Ron Newcomb’s Naga (zip archive) which strips away nearly all of the Standard Library (6G60)
- Textfyre used a modified version of Glulx with different I/O abstractions from GLK
- Erik Temple’s Glimmr graphics framework; Glimmr Github repo; Glimmr archive including demos (6G60)
- Guncho, the multiplayer I7 April Fool’s Day joke that wasn’t
- Brady Garvin’s i7grip Glulx debugger (6G60)
- 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 (6M62) by Sebastian Arg (see also centro de documentación Inform 7)
- German (6G60) by Team GerX
Borogove.io hosts games online for free, either uploaded or built with borogove.app. Playfic is similar but uses 6G60. If you upload a story file anywhere on the web, it can be played online via an iplayif.com URL. Or, if you release along with an interpreter you’ll get a collection of files with which your game can be played anywhere on the web you can freely upload arbitrary files (c.f. ifsitegen).
- The Hitchhiker’s Guide to Inform 7: All About Rules (c. 5U92)
- The Hitchhiker’s Guide to Inform 7: Relations (c. 5U92)
- The Well-Versed Informer (PDF) (5Z71)
- The Well-Versed Informer: Foundations (PDF) (5Z71)
- The Well-Versed Informer: Descriptions and Locale (PDF) (5Z71)
- Introduction to I7 (c. 6L02)
- The Rules of I7 (c. 6L02)
- The Actions of I7 (c. 6L02)
Updating Code written for 6G60
inform7tips: fresh I7 tidbits Monday-Friday.
IF Resource Links has much more of interest to IF authors in general, not specific to I7.
This topic is pinned to this category, but by default Discourse unpins a thread when you reach the bottom (that 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 forums for “documentation and resources” or visit while logged out.