Inform 7 documentation and resources

How to Not Lose This Post

Inform 7 10.1.2 and IDEs for Mac, Windows, and Linux have been released. The v10 release notes detail changes and bugfixes.

v10 renders a lot of specifics on this page out of date; it will be updated as soon as is feasible.

Documentation for 9.3/6M62

9.3/6M62 language and IDE docs, included in the IDE (“integrated development environment”, a term for the kind of tool that the main Inform 7 application is.)

Tutorials

These are excellent – start here.

Installation

Juhana Leinonen’s Borogove is a free web app to edit and run I7 online (any of v10, 6M62, or 6G60), perfect for experimentation without installing anything; Borogove’s snippets feature allows sharing code examples.

The official packages mentioned below are available at: I7 Downloads.

MacOS

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. Both the official and unofficial versions allow compiling for 6L02 and 6L38 as well as 6M62. 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 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.

Linux The versions of Linux for which there's an official IDE package have long since ceased to be supported; it's GTK2-based and hard to build in a modern GTK3 env.

Unofficial rpm/deb IDE packages

GTK 3 dev version

There is a new (as of 2022-03-16) beta release of the Inform 7 IDE for Gnome.

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:

Versions

In general, references written regarding 6L02 or 6L38 remain relevant for 6M62.

Each release had at least minor changes to the language; 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:

Updating Code written for 6G60

Licensing

How to Organize/Structure Your Project

There’s no one answer; here are multiple answers (see games with available source code for examples.)

IDE Accessibility

Status

Graham Nelson's past talks on the future of Inform 7 (2018-2020)
  • The Futures of Inform at Narrascope 2022
  • 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.

    Jason Boyd’s Inform 7 Introductory Guide (6M62)

    Inform 7 for Programmers (PDF) by Ron Newcomb (6G60). Note that the web version of I7 for Programmers is older, for 5U92.

    Aaron Reed’s 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 hasn’t been a legitimate PDF version; if you see someone offering such for sale, it’s… not legitimate.) Aaron plans to update Creating Interactive Fiction at some point.

    John Timmons’ Inform Snippets and Inform Manual (PDF) (c. 5U92-6F95)

    References

    Compilation produces a Project Index browsable in the IDE which offers an enormous amount of detail about I7, including info you won’t find in the docs. It’s the closest thing to a reference manual.

    The Project Index’s Phrasebook Index section (Phrases, Lexicon, Relations, Verbs) is good to check (along with the documentation’s 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.

    Extensions

    See Where to find Inform 7 Extensions for the principal sources.

    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

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

    Some Useful IntFiction Posts and Threads

    Bugs

    Mantis, the bug tracker mentioned in the documentation, is no longer available and there is no news about when a replacement may be operational. In the meanwhile, bug reports on the I7 IDEs could be made at:

    There are known bugs in 6M62 (and documentation bugs in the docs). The 6M62 Patches by Friends of I7 extension provides fixes for a few known issues. The unofficial I7 Bug tracker provides a place to search for them or share your own bug report. As an unofficial bug tracker, it’s just for information’s sake.

    Inform 6 bugs can be reported at the Inform 6 github repo (but you would likely be advised to upgrade to the current version, 6.35; the IDE packages include 6.33N.) There isn’t a way to search for known issues in cBlorb or to report them.

    The old Inform 7 suggestion forum and some Mantis bugs are accessible via the Wayback Machine. The highest numbered bug mentioned in 6M62’s change log is 0001800; 0002217 from 2019-11-26 appears to be the latest bug the Wayback Machine has a reference to.

    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 interpreters include:

    • glulxe, the reference implementation (C)
    • git (C) (It existed by that name before the version control system existed.)
    • quixe (Javascript)
    • Zag (Java)
    • Emacs-glulx (Elisp)

    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 significant implementations:

    • 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)
    • glkote (the Javascript implementation used by Quixe)
    • garglk (the Gargoyle multi-system interpreter uses its own)
    • CocoaGlk (used by the I7 Mac IDE)
    • WindowsGlk (used by the I7 Windows IDE)
    • Async Glk Dannii Willis’ Typescript implementation, used by Parchment

    References:

    There are countless implementations of Z-code interpreters, including:

    Tools and Projects

    By Andrew Plotkin:

    Others:

    Notable ones for older versions:

    I7 in translation

    Hosting

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

    Miscellany

    Ryan Veeder’s Basic Autosaving, Advanced Autosaving, Additional Autosaving Techniques

    Jeff Nyman:

    Emily Short:

    Brian Rushton’s 77 Verbs serves as a trainer in default available commands.

    An Inform 7 quine by Juhana Leinonen

    inform7tips on twitter offers items of interest to I7 users.

    Many links in this post are to Wayback Machine copies of information no longer on the Inform 7 website. Here’s an archived I7 website sitemap.

    Language Comparisons

    IF Resource Links has much more of interest to IF authors in general, not specific to I7.

    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.

    Bookmark interface

    428x64

    13 Likes

    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 https://intfiction.org/t/extension-census-2010/854/7. 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.)

    Someone has to manually add the link. For example in this entry,

    ifdb.tads.org/viewgame?id=44vx0pl3rrfi533s

    the link is in the upper right.

    I think anyone can add the link on IFDB so this would be a good project for someone with a little time on their hands.