Important: References and Useful threads/posts, below provide a lot of info not to be found 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: Longer extracts of I6 code (permitted I6 in inclusions)
- Linux IDE installation notes
10.1 renders some specifics on this page 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, included in its IDE
- I7 docs read-through, with commentary (invaluable)
Tutorials
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)
- 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.
Official packages mentioned below available at I7 Downloads.
MacOS
Use the package on the I7 site; don't use the App store's. There are known issues with [slowness on machines with TouchBars](https://intfiction.org/t/49086/26) and [the cursor disappearing in Dark Mode](https://intfiction.org/t/inform-on-mac-no-cursor/44491/2). An [unofficial MacOS IDE release](https://github.com/angstsmurf/Inform/releases/tag/v.1.68.unofficial) addresses these. 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). Or there's a current [beta release of a new Windows version](https://github.com/DavidKinder/Windows-Inform7/releases/latest) 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](https://intfiction.org/t/46657/3), [AVG](https://intfiction.org/t/52338/2), [Windows Defender](https://intfiction.org/t/10165).Linux
The 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. ## Unofficial rpm/deb IDE packages - [gnome-inform7-builds](https://github.com/interactivefiction/gnome-inform7-builds/tree/master) - [Dependencies for gnome-inform7 package](https://intfiction.org/t/43329/74) 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](https://intfiction.org/t/50108) for info on using those commands directly. Some projects to help are [Vimform7](https://intfiction.org/t/45638), the [Inform 7 extension for VS code](https://intfiction.org/t/47175), [Spaceformacs](https://intfiction.org/t/46440), and [inf7](https://intfiction.org/t//50931).Linux kernels >= 4.11 (c. 2017) are incompatible with ni prior to 6M62.
For 6L38 or older use an old Linux in a VM or Windows Inform in WINE (or use 6G60 online at playfic.com or borogove.app).
The official packages include components that have more recent versions. Some updates:
- Inform 6 6.42;
I6 6.42 for Windows (zip) - Glulx Entry Points and Glulx Text Effects by Emily Short
- templates
Versions
Most things written about 6L02 or 6L38 remain relevant for 6M62. 6L02 had many backwards-incompatible changes: code written for 6G60 or earlier is unlikely to compile in 6L02 or later. This post usually notes the version as of which something was current.
- Version history, with change logs
- Change log in Mantis (the former bug tracker)
Manuals/Books
- The Inform 7 Handbook by Jim Aikin (6L38); the I7 Handbook in PDF/ODT; an at-cost print-on-demand Inform 7 Handbook is available; I7 Handbook for 10.1 draft.
- Ron Newcomb’s Inform 7 Programmer’s Manual (6G60). Overall written for an audience of experienced programmers, but with sections that will be useful to any I7 author: some are linked in References below. (Previously titled “Inform 7 for Programmers”)
- @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)
References
- @otistdog 's Standard Rules Actions reference (6M62). Includes tables of:
- Scope and visibility & Scope and visibility II
- Spatial and other relations between objects & Spatial relations addendum
- Action / Grammar Token reference
- Action Patterns
- The Looking action’s activities and rules
- Which action rulebook should your rule go into?
- Definite/indefinite articles & improper/proper, singular/plural names in thing creation
- Times, Turns, and Tenses: details on counting occurrences of actions, and using past tense in conditionals
- Line break behavior; see also Nathanael’s Cookbook
- How backdrops work
- Oliver Reiser’s I7 cheatsheet (6G60)
- @emshort’s rules flowchart (PDF) (5U92) illustrating the turn sequence
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 actual syntax the I7 compiler uses to parse I7 code is 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.
Extensions
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
Glulx/Glk extensions ecosystem
Extension Writing Guides:
Standard Rules
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.)
Games/examples with available Source Code
- Alex Proudfoot’s ports of The I7 Standard Examples, including @emshort’s Bronze (6M62)
- Hadean Lands (6G60),Andrew Plotkin’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, 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 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 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. Older Counterfeit Monkey source prior to optimization and reorganization.
Inform 6
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, once 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, as many extensions do, other places where I7 behaviors can be best understood as artifacts of I6 representations. Sometimes, reading your project’s auto.inf (the I6 code that I7 generated) is useful to investigate problems.
- 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
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 project’s files and directory 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
- QA: Checklist for authors of IF and Inform 7 IF in particular • One tester's game polish tips for parser authors
- 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
- 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
- Using the I7 Windows IDE with the NVDA screenreader
Licensing
How to Organize/Structure Your Project
There’s no one answer, so 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 - Inform 7
Bugs
9.3 is no longer maintained, but 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.
The 6M62 Patches by Friends of I7 extension provides fixes for some known issues in 9.3/6M62.
The Inform 6 that shipped with 9.3/6M62 was 6.33N. The current version is 6.41. Bugs in (the current) Inform 6 can be reported at the Inform 7 bug tracker
The old Inform 7 suggestion forum is accessible via Wayback Machine.
Infrastructure
Inform 6 compiles to your choice of glulx or the Z-machine (v8 only – I7 games don’t fit in the other versions).
Glulx
Glulx interpreter apps include one (or more) of:
- glulxe (C), reference implementation, glulxe debugger available
- git (C) (predates the source control system by the same name)
- 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 (Emacs-glulx/Zags’ are built-in).
- 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 is the 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 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)
- WindowsGlk (Windows IDE)
- Async Glk Typescript implementation used by Parchment / iplayif.com
- Chimara GTK3 widget (Linux IDE)
- Spatterlight’s Glk implementation
- Others in IFArchive
Differences between javascript & C Glk APIs
The results of display the boxed quotation
look bad with Glk. Spatterlight, Gargoyle, Lectrote, and Parchment use Glk not just for Glulx but also for Z-machine I/O, so Z-machine games inherit boxed text quotes looking bad in those apps.
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 Inform 6
- 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 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 compiled with the VM_PROFILING flag)
- Atom syntax highlighting
Others
- @Dannii’s Parchment is an I7 web template; the project also:
- 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 Inform 7 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
- 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
- cBlorb (used by 9.3/6M62; 10.1 uses inblorb)
- Unz: unpack Z-machine file info
Legacy
- 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 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 Inform 7)
- 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 the resulting file directory would make your game playable if you uploaded it anywhere on the web, provided that the website would deliver them as regular web pages and not just downloads. Google drive, for instance, wouldn’t work for this. 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 Inform 7
Ryan Veeder’s
Jeff Nyman:
- 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)
@mathbrush’s 77 Verbs serves as a trainer in default available commands.
"Updating
John Timmons’ Inform Snippets and Inform Manual (PDF) (c. 5U92-6F95)
inform7tips: fresh I7 tidbits Monday-Friday.
Archived I7 website sitemap: many links above are to archive.org copies of pages no longer on the Inform 7 website.
Language Comparisons
IF Resource Links has much more of interest to IF authors in general, not specific to I7.
History
Toward I6: New Tricks for an old Z-machine
Toward I7
- The SPAG Interview: Graham Nelson and Emily Short on Inform 7
- 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 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.