Poof v1.3.0 Release Notes

Poof v1.3.0 has arrived. In addition to dozens of small changes and improvements, the big news here is passage references and an updated Twee encoder.

A passage reference is, as you may imagine, when one of your passages references another passage through a link, include/display, or goto. Poof will parse SugarCube and Harlowe stories for a certain subset of common macros used to transition passages as well as for markup links (e.g., [[links like this]]). The macros parsed are not exhaustive–for example, SugarCube’s <<textbox>> macro can send users to new passages, but is not parsed by poof because there has to be a cutoff somewhere. JavaScript functions and methods that transition passages are also not parsed. Additionally, poof can only parse string literals. So, <<link 'Next' 'some passage'>><</link>> will work, but <<link 'Next' $somePassage>><</link>> will not.

Here’s a list of things poof will try to parse for valid passage references in each format:

All Formats

  • Markup links of any kind, including arrow markup links ([[passage<-text]]).
  • Setter links. Even though these are only supported by default by SugarCube, poof will try to parse setter links when it sees them regardless of the format.


  • (link-goto:)
  • (click-goto:)
  • (link-reveal-goto:)
  • (goto:)
  • (include:)


  • <<link>>
  • <<button>>
  • <<goto>>
  • <<include>>
  • <<display>>

Poof will display passage references to and from each passage as links you can click to zoom to those passages, allowing you to essentially play along with your game while editing. This is my solution to requests for a “play order” sorting method.

Note that parsing for passage references is somewhat slow. You cna shut this feature off if you’d prefer faster load times to having it via poof.config.

The second change here is the Twee encoder. Poof now exports to classic Twee, the Twee2 version of Twee (previously unsupported) and the new Twee3 spec. This last spec is still a draft and is widely unsupported, so the default is still set to Twee classic for now. You can change the Twee encoder in the poof.config special passage.

The smaller changes included in this update are:

  • a starting passage tool to quickly zoom you to the starting passage,
  • updates to SugarCube globals for the linter,
  • a bunch of other internal and code-side improvements.

In future releases:

Eventually Twee3 will be the default Twee encoder. SugarCube is also undergoing fairly major changes in v2.29.0, so I’ll be updating poof’s SugarCube support a lot. This will mostly be maintenance though.

Note on Twine v2.3.2:

Twine v2.3.2 currently has a bug in how it handles proofing formats, see this issue. This means if you want to use poof, you need to use an older version of Twine 2 until this gets sorted out.