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 https://www.musicwords.net/if/I7_Handbook_3.pdf
- 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.
- 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:
A draft I7 reference manual (10.1)
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.
Extensions
- Where to find Inform 7 Extensions
- Docs of Friends of I7 Extensions
- Counterfeit Monkey’s Extensions: beyond many unique extensions, 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
Glulx/Glk extensions ecosystem
Extension Writing Guides
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.)
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. You can 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 is accessible via archive.org.
Infrastructure
I6 compiles to your choice of glulx or Z-code (v8 only – I7 games can’t fit in prior versions)
Glulx
Glulx interpreter apps include one or more of:
- glulxe (C) – reference implementation; glulxe debugger available
- git (C) – predates the other git
- quixe (Javascript)
Others:
- Zag (Java)
- Emacs-glulx (Elisp)
Glulx Inform Technical Reference
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 doesn’t offer the revelant text color control to match the Z-machine, but 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, and Parchment use Glk for their Z-machine I/O as well as Glulx, so 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
- Glulx Inform Technical Reference
- The Game Author’s Guide to Glulx Inform
- Roger Firth and 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; see Bocfel’s man page for its useful command-line flags)
- ifvms.js (Javascript, used by Parchment and Lectrote)
- gluzma (Glulx assembly)
- zig (I6)
- jszm (700 lines of javascript)
- for fun:
Z-machine References
- 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
Tools and Projects
@Zarf 's
- 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; options for I7 to HTML or I7 to rtf
- 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 Frotz’s dfrotz variant or anything built with CheapGlk); Nils Fagerburg wrote a regtest bash completion script
- profile-analyze.py – parse profiling data from glulxe (when compiled with the VM_PROFILING flag)
- Atom syntax highlighting
Others
- @Dannii’s Parchment, an I7 web template
- powers iplayif.com: for any game directly downloadable from the web, you can create a URL making it playable in a browser
- can build a single-html-page version of a game
- @Mathbrush 's Bisquixe I7 Template for easier styling ; Beginner’s Guide to Styling Inform Releases with Bisquixe
- Jacques Frechet’s glulx-strings extracts all strings from zcode or glulx (even in blorbs); glulx-strings web app
- @Natrium729’s I7 Text Extractor – extracts strings from I7 source (for ease of proofreading)
- Blaze Alan Marshall’s mrifk Glulx reverse compiler and disassembler
- ztools: the Infocom toolkit includes txd, a zcode disassembler
- Allen Garvin’s ztool, python port of (most of) ztools
- glulx to C decompiler (glulxtoc)
- @Juhana’s IF recorder is a Parchment plugin to save transcripts
- Chris Spiegel’s zdevtools (zcode assembler/disassembler)
- Compile C to Glulx
- reform: reverse compile Z-code to I6
- cBlorb, used by 9.3/6M62; 10.1 uses inblorb
- Unz: unpack Z-machine file info
- Glulx assemblers
- Gren Drake’s glulx-assemble
- zzo38’s glasm
Legacy
- Ron Newcomb’s I7 parser in I7 (6G60) The parser has changed since this was current, but its documentation (at the bottom) is the best documentation of the I7 parser extant
- Ron Newcomb’s Naga (Zip) strips away nearly all of the Standard Library (6G60)
- Textfyre used a modified Glulx with I/O abstractions different 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)
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 (6M62) by Sebastian Arg (see also centro de documentaciĂłn I7)
- German (6G60) by Team GerX
Hosting
- You can upload your game to the IF Archive; once accepted, pass its URL to IPlayIF.com, the resulting URL will be to a playable-online copy of your game. (See, e.g., many games on IFDB)
- Borogove.io hosts games online for free, either uploaded or built with borogove.app
- Playfic is similar but uses 6G60
- if you release along with an interpreter you can make your game playable on the web, provided that the website would deliver them as regular web pages and not just downloads (Google Drive wouldn’t work). A (free) itch.io account would work; games on itch.io can be private or shared just with playtesters.
Miscellany
- IFwiki’s rec.arts.int-fiction threads on I7
- @mathbrush’s 77 Verbs serves as a trainer in default available commands.
- An I7 quine by @Juhana
- John Timmons’ Inform Snippets, Inform Manual (PDF) (c. 5U92-6F95)
- inform7tips microblog
- Archived I7 website sitemap: many links above are to web.archive.org copies of pages no longer on the I7 website
Ryan Veeder
Jeff Nyman
- The Hitchhiker’s Guide to I7: All About Rules (c. 5U92)
- The Hitchhiker’s Guide to I7: 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 6G60 code
- @emshort’s Working notes on updating extensions for I7 6L02
- Compilation problems with 6L02
- Ron Newcomb’s I7 Substitutions, Substituted
- Code that uses Plurality by Emily Short
- 6L02 I6 code replacement
IF Resource Links has much more of interest to IF authors in general, not specific to I7
Language Comparisons
History
Toward I6: New Tricks for an old Z-machine
Toward I7
- SPAG Interview: Graham Nelson and Emily Short on I7
- 50 Years of Text Games 2008: Violet
- Natural Language, Semantic Analysis and Interactive Fiction (PDF)
Toward I7 v10
- Assessing Inform, 2018
- Opening Inform, 2019
- 2nd Annual Address by Man Who Still Hasn’t Done What He Said He was Going to Do, 2020
- The Futures of Inform, 2022
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.
The documentary and resourceful goodness continues in the I7 Documentation and Resources Annex one post below!