Inform 7 documentation and resources

How to Not Lose This Post

Note: Answers to many questions you may have might be found in the Reference section’s links; they provide a lot of info not in the docs.

Inform 7 10.1.2 (current, 2022-08-31)

Official Inform website

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.

Inform 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.

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.

Further 9.3/6M62-specific details are below.

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!

Manuals/Books


Reference

Writing with Inform read-through, with commentary (9.3/6M62)

Deep dives by @drpeterbatesuk

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

The Looking action’s activities and rules

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 the practice is seemingly supported by countless examples. Examples focused on something else; elements that aren’t a given example’s focus are often handled perfunctorily. As a project grows beyond example-length, it quickly becomes an incomprehensible mess if you put everything in Instead rules. Yours won’t be the exception. Don’t be another cautionary tale. See the docs’ Guidelines on how to write rules about actions and:

Built-in Extensions

They all use authorial modesty, thus don’t appear in the version command output (previously, English Language was modest and 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 the Inform language not related to IF have been moved to Basic Inform. One can compile without the Standard Rules: see A Guide to Kits. You’ll have just the Starting the virtual machine, Printing the name, and Printing the plural name activities and the Startup and Shutdown rulebooks. You’ll need a ‘to begin’ phrase 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. If you want to modify the built-in actions, read the Actions section. Most of the rest is also highly readable and they’re important to understanding Inform.

@otistdog 's Standard Rules Actions reference (6M62) detail their behavior and implementation; includes lookup charts for:

@mathbrush’s 77 Verbs is a useful tutorial for the default commands.

Useful threads/posts

Testing and Quality Assurance

Elsewhere

Ryan Veeder

@emshort


Playing

Popular desktop applications supporting I7 games include:

See List of glulx/.gblorb interpreters. For more interpreters, see Glulx and Z-machine below.


Extensions

Separate from the Authoring > Inform 7 here, Technical Development > Inform Extensions discusses issues with existing published extensions.

Glulx/Glk extensions ecosystem

Extension Writing Guides


Select games/examples with Source Code available


How to Organize/Structure Your Project

There’s no one answer; here are multiple answers. See games with available source code above for examples.


Infrastructure

Inform 6

I7 compiles to I6 which is compiled to your choice of Glulx or Z-code (v8 only – I7’s too big for the others). The I6 Standard Library isn’t involved; I7 uses “kits”. (Previously, the I6 used by I7 was called the “I6 Template Layer”.)

The current version is I6 6.43. (I7 10.1’s is I6 6.41.)

The DM4 (Inform 6 Designer’s Manual) was last revised in 2001, when I6 6.21 was current. Glulx support came in the subsequent version, 6.30; much more has been added since. Some essential docs are:

[I6] The list of Inform 6 documentation has much more.

The I7 docs stress that you shouldn’t need to concern yourself with what lies beneath. However:

  • interacting directly with the I6 layer is the best or only way to do some things (many extensions do so)
  • some I7 behaviors are best understood as artifacts of I6 representations
  • direct reading of the I6 code generated by the I7 compiler can be helpful when troubleshooting

Glulx

Interpreters

Glulx Reference

Glulx Utilities

Glulx assemblers

Glk

Glulx I/O is via the Glk API. Glulx terps require a Glk library.

The Spatterlight, Gargoyle, and Lectrote apss and the Quixe and Parchment templates all use Glk for I/O even with Z-code games. Text color support per the Glk spec can’t do everything the Z-machine can; the non-standard Gargoyle Glk extensions can.

Some implementations with the Gargoyle Glk Extensions:

And without them:

  • CheapGlk (no windows, no status line, just streams of input and output; of interest largely for testing and development) – C
  • GlkTerm (ncurses) – C
    • GlkTermw (“wide char” GlkTerm for Unicode characters beyond Latin1) – C
  • GlkOte (Quixe/Lectrote) – Javascript
  • cheap-glkote (GlkOte variant used in ElseIFPlayer – Javascript
  • RemGlk (I/O via JSON objects; supports multiple windows and most Glk events) – C
  • CocoaGlk (Mac IDE) – C
  • Miniglk (built into I7, the default when compiling to C) – C
  • GlkOte-term – Javascript

The IFArchive has more Glk implementations.

Differences between Javascript & C Glk APIs

display the boxed quotation looks bad in Glk. In apps using Glk for the Z-machine, Z-code games’ boxed text quotes will look bad, too.

Glk via network

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. (This is how Parchment works.)

Glk Reference

Z-code

There are countless Z-code interpreters, e.g.

Fun ones:

gluzma and zig could enable running a Z-code game within a Glulx game.

Z-code Reference

Z-code Utilities


Publication

The Web

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. 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. @DraconisStyled is another.

Interpreter Templates

I7 10.1 includes:

The included version of Parchment has a fatal flaw and won’t work. Download the file of the form parchment-for-inform7-YYYY-MM-DD.zip from a more recent Parchment release and unzip it in your project’s Materials directory. The current version is 2025.1.14.

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 only works with 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 along with RemGlk-rs; Async Glk mediates between RemGlk-rs and the browser. (“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.

Vorple

Vorple is also an 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 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 derived from @Zarf’s work to create cross-platform stand-alone apps for Hadean Lands; it’s Electron wrapped around quixe (roughly). It’s possible to create your own “bound game” with it; see trying to make standalone game w/ Lectrote .

One can also compile Inform into C that can compile into a standalone executable.


Utilities

Blorb manipulation

Editor plugins


I7 in translation


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.

Bookmark interface

428x64


This ain’t over

Documentary and resourceful goodness continues in the I7 Docs and Resources Annex below!

20 Likes

I7 9.3/6M62 (released 2015-12-24)

9.3/6M62 language and IDE docs (included in the IDEs)

For official packages mentioned below: I7 9.3 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

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.,

Licensing

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

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.

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. Some things in the SR may look modifiable but they’re really interdependent with something hard-coded in the compiler. Beware that 9.X’s 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.)

Bugs

9.3 is no longer maintained; 10.1 fixes several bugs in 9.3.

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.43. Bugs in (the current) I6 can be reported at the Inform 7 bug tracker

The old I7 suggestion forum, via archive.org.


Beyond Inform

(invaluable resources not specific to Inform)

Language Comparisons


History

Toward I6: New Tricks for an old Z-machine

  1. Digging the Trenches
  2. Hacking Deeper, or Follies of Graham Nelson’s Youth
  3. A Renaissance Is Nigh

Toward I7

Toward I7 v10


Legacy Projects


Miscellany

Jeff Nyman

@emshort

Updating 6G60 code

Rockin; thank you :slight_smile:

Could this be made sticky?

Done

Would be nice to have an I6 sticky as well, preferably A B O V E the I7 sticky so that there is no doubt as to which language is the original and which the knockoff.

1 Like

I would especially push for the link below (which is actually mostly in Inform 7). It’s Appendix A – i.e. the Standard Rules commented and explained literate programming style. To my mind, it’s a vital part of the I7 documentation.

For what it’s worth, I haven’t updated the syntax document for the last build, and don’t expect to do so going forward, because the indexing has improved enough that it should now provide a comprehensive reference for that kind of thing (and it’s automatically cross-linked with the documentation). But if people find the old document useful to browse anyway, that’s fine – just be warned it’s largely been supplanted.

Excellent!

Also, this link to Appendix B, the underlying I6 template layer–just as vital in my opinion as the documentation of the Standard Rules.

inform7.com/sources/src/i6templa … index.html

–Erik

Thanks for the comments folks, I’ve updated the OP.

I third this suggestion. I also recommend that, if the author will be updating the first post, the title be updated, too, so we also know when this was last updated.

Good suggestion, done.

Yay, glad I could contribute in some small way!

I know that one thing I’m only just discovering is how to use the skein and transcripts from it. Is there any website that guides us through that?

I also had no idea how to use the IDE’s features for looking through all standard actions. I’d think if someone could make a youtube video or selection of screenshots to guide a person through, that’d be hugely helpful. I suspect once people know this sort of thing is there, that’s a lot less work.

Finally, one of the big roadblocks I’ve had is knowing which extensions to use. So many times, I’ve been wondering if I should bother programming X and not knowing whether there was an extension Y that would take care of it. I think any one person’s documentation generally catches some good ones, but is there something more general? I know I’d find it useful to be able to see programming examples or evaluations. Beyond the extension authors’ own, which I don’t want to belittle. But it’s more the “wow, other people can use this”

Is anyone aware of these? Does anyone want to create such a page? Are these questions out of the scope of the topic? I hope I haven’t hijacked the thread, but really, I’m glad someone took the time to tie this up, and I thought I’d ask a few more questions while I was at it.

One final thing–let us know whether it might be better to PM/email you with small changes, or if we should just post here.

Posting in the thread works for me. At some point it’ll make more sense to put this somewhere that’s generally editable, like ifwiki, and I’ll probably just post a redirect link in the OP.

Your questions about extensions definitely are relevant, and in fact Aaron Reed proposed something very similar, see this topic Extension Census 2010 - #7 by George. I don’t know if he’s gone further than that.

This is a very low-tech way to address this, but I usually go to the Extensions page, click “All Extensions by Category” (or any of the other aggregate links), and do a quick in-page search for keywords related to the problem I want to solve, like “liquid” or “inventory” or whatever.

Regarding better extensions visibility: I think everyone agrees it would be great to have this integrated into the IFDB, or give more sharing and community features to the official site, but it’s as usual a question of volunteer-hours available. We’ve tried to kick-start this a couple times but it involves major work and coordination of effort between several people, and it just hasn’t come together yet.

In the meantime, it would be awesome if someone started a third party site promoting extensions somehow-- I’m afraid it’s not going to be able to be me at the moment, although I’d certainly be open to contributing if a group effort arises.

This has worked well for me. I think it is good and will work for others, too. However, it’s those moments where someone points something out and I say “of course the extension was there, and of course it did this” that work really well.

Sounds like a good idea for a spinoff topic. I would like to be part of this effort, because I think my biggest growths as a coder have occurred when I realized that, yes, you could do this-or-that easily.

Though obviously this’d require a lot of white paper, I have some ideas. However, I also have no idea how to go about building a website, or how to possibly integrate a website into something bigger. Simply giving statistics on how many games use which extensions, and maybe a blurb on how they use it, could be effective. Granted, the quality of the games may not reflect the quality of the extensions, but there’s a lot of “how’d they do this” that gets dispelled pretty in a game, regardless of quality, that you don’t see in an example.

I also have no clue how much/little extension authors tolerate/appreciate having an extra example made that uses their extensions. But in my experience, I generally have to use an extension in a dumb game before I’m brave enough to use it in something real.

Two more I7 reference documents (slightly oldish):
Emily Short’s 2007 draft of an I7 syntax reference at http://www.inform-fiction.org/I7Downloads/Documents/I7_syntax.txt.
And a document giving the grammar for I7 in Backus-Naur notation at http://www.inform-fiction.org/I7Downloads/Documents/I7-Grammar.pdf. (Not sure about its up-to-datedness.)

I’d love to read some of Emily Short’s code after seeing in another post that it’s “spectacularly clean.” Organization is an area in which I’m really interested in developing a good practice.

Where’s the source code at this link? For example, here’s the entry for Bronze:

ifdb.tads.org/viewgame?id=9p8kh3im2j9h2881

I’m sure it’s just me, but I can’t find a link on this page for the source code.

Thanks!

All of Emily’s released source is linked from here. (It would be sensible if the IFDB pages also had links to it, though.)