Note: References and Useful threads/posts below provide a lot of info not in the docs
Inform 7 10.1 (current release)
I7 10.1.2 and IDEs for Mac, Windows, and Linux. The 10.1 release notes detail changes and bugfixes.
- Docs for Inform 7 10.1 and IDE (integrated development environment)
- 10.1 compiler and tools docs/literate source
- 10.1 bug tracker
- Inform Evolution: proposals for development
- 10.1 announcement thread
- WI 27.14: what’s permissible in I6 inclusions
- Linux IDE installation notes
10.1 made some info below out of date. The next release will be 11.0. No schedule has been announced.
9.3/6M62 (previous, released 2015-12-24)
- I7 9.3/6M62 language and IDE docs, built into IDEs
- I7 docs read-through and commentary (invaluable)
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
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.
For official packages mentioned below: I7 Downloads.
MacOS
Use I7 site’s package, not the App Store’s.
Known issues:
An unofficial MacOS IDE release addresses these (but testing examples in Extension Projects doesn’t work)
Windows
Use the package on the I7 site (said to work with any version of Windows from XP SP 3 on). There’s a current 64-bit-only beta release of a new Windows version that allows compiling for any of 6L02, 6L38, 6M62 that 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.
Linux
The 6M62 IDE uses GTK2, not modern GTK3, making it hard to build in modern Linux.
Unofficial rpm/deb IDE packages
- gnome-inform7-builds
- Dependencies for gnome-inform7 package
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.
Linux kernels < 4.11 (c. 2017) are incompatible with versions of ni
prior to 6M62. To use 6L38 or older try an old Linux in a VM or Windows Inform in WINE. For 6G60, try playfic.com or borogove.app.
The official packages include components with more recent versions, e.g.,
- Inform 6 6.42, I6 6.42 for Windows (ZIP)
- Glulx Entry Points, Glulx Text Effects
- Templates: Quixe; Parchment; Vorple
Versions
Most 6L02 or 6L38 info remains relevant in 6M62. 6L02 had many backwards-incompatible changes: code written for 6G60 or earlier likely won’t compile in 6L02 or later. This post usually notes for what version a given thing was current.
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)
References
@drpeterbatesuk 's Deep Dives:
- 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
@otistdog 's Standard Rules Actions reference (6M62) includes tables for:
I7 reference manual (10.1); Inform7/10 Reference Manual
Which action rulebook should you put your rule in? (tl;dr: don’t use Instead
rules as a catch-all even if the docs’ examples do)
- 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
Times, Turns, and Tenses: details on counting occurrences of actions, and using past tense in conditionals
- 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
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 viewable in the IDE with lots of details about I7, including many 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 basis for how the I7 compiler parses I7 code is in your installation’s Internal/Languages/English/Syntax.preform. The docs’ Backus-Naur Form syntax is incorrect. See the Syntax.preform documentation PDF (6L02). Syntax.preform shows what irregular verbs and plurals I7 handles (and how), too.
Playing
Popular desktop applications supporting I7 games include:
- Lectrote
- Gargoyle
- Spatterlight (Mac OS)
See List of glulx/.gblorb interpreters
The Glulx and Z-machine sections below mention many other interpreters for use within a text console.
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 category here, there is a Technical Development > Inform Extensions category chiefly discussing issues with existing published extensions
Glulx/Glk extensions ecosystem
Extension Writing Guides
Publication
Some competitions, including the IF Comp, require that submissions hadn’t previously been publicly available. If you plan to submit to a Comp, consult its policies and plan accordingly to share your game with testers in an appropriate way.
The Web
Templates
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. Some particular template shapes the results, just look and feel with a website template; interpreter templates have larger implications. I7 includes:
- @Zarf 's quixe, the default for
release with an interpreter
- @Dannii’s Parchment powers iplayif.com
- @Juhana’s IF recorder is a Parchment plugin to save transcripts
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
- hyperlinks, even allowing Fake Twine
See:
- 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 another 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 a play-in-browser version as a single HTML file
Hosting
Some free ways to publish a game:
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. It redirects you to a page that launches your game. Note this page’s URL: so long as the URL you originally passed IPlayIF continues to work, this IPlayIF result is a viable way for people to play your game. It won’t work with Google Drive or anything requiring authentication to download the 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 work this way.
A stand-alone application
Lectrote derived from Zarf’s work to create cross-platform stand-alone apps for Hadean Lands; roughly speaking, it’s Electron wrapped around quixe. It’s possible (but not necessarily easy) to create your own “bound game” with it; see trying to make standalone game w/ Lectrote
Standard Rules
I7 includes the Standard Rules in every game. They’re the authority on I7’s World Model and defaults and can be browsed within the IDE: see “Contents” for any compiled game. They used to be called Appendix A of the docs.
Per WI 27.14, some things in the SR may look modifiable but they’re really interdependent with something hard-coded in the compiler. Beware that the past three versions’ Standard Rules (6L02, 6L38, 6M62) are all marked Version 3/120430 but each is different. (Likewise, 6E59 through 6G60’s Standard Rules are each different but all marked Version 2/090402.)
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
Inform 6
I7 compiles to I6 before that gets compiled to Glulx or z-code. The I6 Standard Library isn’t involved; I7 uses the I6 Template Layer that Inform installations have under Internal/I6T
. Once called Appendix B of the docs, the template layer’s comments document some things not documented elsewhere.
- I6 Designer’s Manual (DM4) / Reference Addendum
- I6 Technical Manual
- Translation of I6 Entry Points into I7 (4X60)
- Much more at [I6] The list of Inform 6 documentation
Why learn I6 and the template layer?
- interacting directly with the I6 layer (as many extensions do) is the best or only way to do some things
- some I7 behaviors are best understood as artifacts of I6 representations
- directly reading auto.inf (the I6 code generated by the I7 compiler) can be invaluable for troubleshooting
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
- If you encounter memory limits in compilation, see Memory Limit and Storage Variable Limit settings or try I6 6.36 or higher, which does away with these limits
- Limits on command length
- Bubbling Beaker awards: novel and powerful techniques
- Rulebooks are a bit like switch statements... and yet different ; Subroutine-ish things
- Inform7/10 Reference Manual
- QA
Licensing
How to Organize/Structure Your Project
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’s Structuring I7 Code
- Ryan Veeder’s How to Write the Way I Write in I7
- Effective structuring and layout of code - Inform 7
Bugs
9.3 is no longer maintained; 10.1 fixes several bugs in 9.3. Search for known bugs and their status or report bugs on the I7 bug tracker. If you’re not sure whether you’ve found a bug, post code that shows the issue to the I7 category and ask.
6M62 Patches by Friends of I7 provides fixes for some known issues in 9.3/6M62.
The I6 that shipped with 9.3/6M62 was 6.33N. The current version is 6.42. Bugs in (the current) I6 can be reported at the Inform 7 bug tracker
The old I7 suggestion forum, via archive.org.
Infrastructure
I6 compiles to your choice of glulx or Z-code (v8 only – I7’s too big for prior versions)
Glulx
Interpreters
- glulxe (C), the reference implementation
- glulxe debugger
- supports profiling (when compiled with a specific flag), relevant output to be analyzed with profile-analyze.py
- git (C) [ name predates that other git ]
- quixe (Javascript)
Other old and unsupported interpreters
- Zag (Java)
- Emacs-glulx (Elisp)
Glulx Refs
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
Glk
Glulx I/O is via the Glk API; glulx terps must be built with a Glk library (built-in for Emacs-glulx/Zag)
- cheapglk (no window, no status line, just streams of input and output; of interest largely for testing and development)
- glkterm (curses library, widely available for anything UNIX-ish)
- glktermw (“wide char” glkterm for Unicode characters beyond Latin1)
- GlkOte (Javascript implementation used by Quixe and Lectrote)
- cheap-glkote, a Glkote variant underlying the ElseIFPlayer
- remglk receives/emits JSON objects on stdin/stdout; can represent multiple windows and most Glk events)
- CocoaGlk (used by the Mac IDE)
Per its spec, Glk lacks revelant text color support to match the Z-machine; the non-standard Gargoyle Glk extensions can do so. Implementations including them:
- garglk (the Gargoyle multi-system interpreter)
- WindowsGlk (Windows IDE)
- Async Glk Typescript implementation used by Parchment / iplayif.com
- Chimara GTK3 widget (Linux IDE)
- Spatterlight’s Glk from Spatterlight
More Glk implementations in IFArchive
Differences between javascript & C Glk APIs
The results of display the boxed quotation
look bad in Glk. Spatterlight, Gargoyle, Lectrote, Parchment use all Glk for both Z-machine and Glulx I/O; with these apps, Z-machine games inherit boxed text quotes looking bad.
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
Glk References
- 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-machine
There are countless Z-machine interpreters, e.g.
- Frotz
- Bocfel (Glk-based; used by Gargoyle; Bocfel’s options are useful to authors debugging games
- fizmo
- ifvms.js (Javascript, used by Parchment and Lectrote)
- gluzma (Glulx assembly)
- zig (I6)
- jszm (700 lines of javascript)
- for fun:
Reference
- The Z-Machine Standard 1.2 (draft) | Dannii’s IF Pages
- Z-machine 1.1 standard, annotated
- 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
Utilities
- ztools: the Infocom toolkit 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)
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)
- Nils Fagerburg wrote a regtest bash completion script
- Atom syntax highlighting
- @Natrium729’s I7 Text Extractor – extracts strings from I7 source (for ease of proofreading)
- Jacques Frechet’s glulx-strings – online app that extracts all strings from glulx, zcode, or several other formats (accepts blorbs)
- glulx-strings – source code; includes a more limited python version
Blorb manipulation
- blorbtool.py and blorbtool via web
- IFTools C#
- cBlorb, used by 9.3/6M62; 10.1 uses inblorb
- Bamboozle – TUI blorb utility
IF Resource Links has much more of interest to IF authors in general, not specific to I7
Language Comparisons
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
Glorious documentary and resourceful goodness continues in the I7 Documentation and Resources Annex one post below!