Twine Changelog

What's new in Twine 2.8.1

Jan 4, 2024
  • Release notes can be found in the Twine reference. They will appear there for all versions going forward.

New in Twine 2.8.0 (Nov 27, 2023)

  • Added:
  • In App Twine only:
  • The location of the story library can be changed. It can be done either using a menu item preference or command-line switch.
  • Hardware accelerated graphics can be disabled. It can be done either using a menu item preference or command-line switch.
  • The location of story library backups can be changed. This can only be done using a command-line switch. Please read the documentation carefully before using this option.
  • Instead of using the system-wide temporary directory, Twine now uses a dedicated scratch folder and prunes old files from it automatically. The location of this folder can be changed using a command-line switch only. Please read the documentation carefully before using this option.
  • A Korean localization has been added.
  • Bugs Fixed:
  • An issue where clicking rapidly on a passage and then dragging it would cause the passage to move incorrectly has been fixed.
  • An issue where closing a passage editor while the find dialog was open caused a crash has been fixed.
  • A typo in the Finnish localization has been fixed.
  • Behind the Scenes:
  • The app now uses Vite for bundling instead of create-react-app.
  • The underyling Electron framework for the desktop app has been updated to version 26.

New in Twine 2.7.1 (Aug 27, 2023)

  • Fixed a bug where maximizing a passage editor made it disappear.

New in Twine 2.7.0 (Jul 8, 2023)

  • New Features Added:
  • Passage edit dialogs now show leading and trailing whitespace in passage names as ␣ symbols, to help tracking down accidental spaces.
  • The app version of Twine now supports customizing its UI via a user.css file. More info on how this works is in the reference.
  • The zoom controls in the story map have been moved into the top toolbar, so that the amount of space in the story map is increased.
  • Bugs Fixed:
  • JavaScript and CSS edit dialogs receive the right amount of vertical space when open in conjunction with passage editors.
  • Story Format Updates:
  • Harlowe has been updated to version 3.3.6.

New in Twine 2.6.2 (Feb 26, 2023)

  • New Features Added:
  • The "Start Story Here" checkbox in passage edit dialogs has been replaced with "Test from Here".
  • Story Format Updates:
  • Chapbook has been updated to version 1.2.3.
  • Harlowe has been updated to version 3.3.5.

New in Twine 2.6.1 (Feb 5, 2023)

  • New Features Added:
  • The Dutch translation has been updated.
  • Bugs Fixed:
  • Fixed a bug where passages would appear empty on the map when they weren't.
  • The Go To Passage dialog now receives mouse events properly.
  • Matches in the Find and Replace dialog should no longer flicker when other changes occur in a story.
  • Fixed a bug in Twee import where leading or trailing spaces in a passage name were not preserved.

New in Twine 2.6.0 (Jan 9, 2023)

  • New Features and Improvements:
  • When a second passage edit dialog is opened after one is already open, the new dialog appears on top of the existing one, forming a stack. A passage edit dialog can be brought to the front by clicking its title bar. There is a maximum of 5 passage edit dialogs in the background; opening more will cause the lowest to be closed.
  • Twine can now import and export Twee files. Twee is a plain-text format used by many other tools in the Twine community, and has a tech spec. Twine exports to Twee 3 format and can import either Twee 3 or older versions.
  • Added a Go To button to the story map toolbar, which allows moving to a passage by name.
  • If there are no conflicts when importing a file, then Twine now automatically completes the import without asking for further confirmation.
  • If a dialog is already open when it would have normally been opened (like choosing to open Preferences twice), the existing dialog will animate to draw attention to itself, instead of nothing happening.
  • Added a Ukrainian localization, and updated the Chinese, German, and Turkish localizations.
  • The Mac app is now signed, thanks to the Interactive Fiction Technology Foundation. This means that running Twine on Macs no longer should require right-clicking it and choosing Open the first time it's downloaded.
  • The relationship between Twine and IFTF has not changed. Although IFTF provides support for the Twine community, Twine itself is an entity independent of the IFTF.
  • Bugs Fixed:
  • Fixed a problem where dragging the story map and moving the cursor outside the Twine window would cause inappropriate scrolling.
  • Fixed a broken link explaining what a story format is.
  • Fixed a bug with importing stories that were missing some attributes.
  • Fixed the appearance of passage edit dialogs that had been maximized, but also collapsed.
  • Story Format Updates:
  • Harlowe has been updated to version 3.3.4.

New in Twine 2.5.1 (Aug 28, 2022)

  • Harlowe has been updated to 3.3.3.

New in Twine 2.5.0 (Aug 28, 2022)

  • New Features and Improvements:
  • Passages considered "empty" now show with a translucent background. To be considered empty, a passage must satisfy all of the criteria below:
  • Has no text, not even just whitespace
  • Has no tags
  • Is the default size (small)
  • Is not the start passage of the story
  • If the last link to an empty passage is removed, an empty passage will be deleted.
  • This behavior is somewhat provisional, and constructive feedback is appreciated. The goal of this change is to address issues where typing links could create many extraneous passages, and to generally help keep stories from being cluttered with unused passages.
  • Dialogs may now be maximized.
  • The width of dialogs can now be customized in the Preferences dialog.
  • If playing, testing, or publishing a story to file fails, an error message is now shown. Previously, it failed silently.
  • The Delete Passages button now disables if the start passage in the story is selected.
  • Portuguese and French translations have been improved (thanks @albuquezi and @Kln95130).
  • Features Removed:
  • Middle-clicking the story map no longer creates a passage. It falls back to the default behavior instead, usually allowing the user to scroll around the story map.
  • Bugs Fixed:
  • Entering an invalid regular expression in the Find and Replace text no longer crashes Twine. It now reports no matches.
  • Replacing a story during an import now correctly links passages to their parent story. This bug manifested as an inability to select passages, edit them in some cases, and other similar problems.
  • Padding on the story map has been adjusted so that dialogs no longer overlap passages on the right.
  • If the list of story tags or stories to import is too long to fit the window height, the list scrolls properly.
  • Portuguese and Chinese localizations now load correctly.
  • If an incorrect story format URL is entered when adding a new story format, an error is shown correctly. Previously, it showed placeholder text.
  • The Mac app is now ad hoc signed, so users on Apple Silicon should not see repeated permissions prompts when the app launches--only one, the first time it runs.
  • The app icon on Windows has been enlarged.

New in Twine 2.4.1 (Jul 14, 2022)

  • New Features and Improvements:
  • The German localization has been improved (thanks @JimB16).
  • Updated the version of Electron used for app Twine to the latest v17 release.
  • Bugs Fixed:
  • Fixed a bug related to updating stories' story formats. This showed up in 2.4.0 as a crash message the first time a story was edited.
  • Browser Twine now uses the Storage Manager API to determine how much space is left for Twine to use. You may see a change in the value reported from previous versions, which estimated it by trying to save increasingly large amounts of data until it failed. This should fix error messages seen in 2.4.0 like Failed to execute 'setItem' on 'Storage': Setting the value of 'twine-passages-abcdef-ghijklmn' exceeded the quota.)
  • Backups work properly in app Twine.
  • Documentation:
  • A section on how to switch to an older version of Twine has been added.
  • Small proofreading corrections (thanks @ChapelR).
  • Story Formats:
  • Harlowe is updated to 3.3.1. (changelog)

New in Twine 2.4.0 (Jul 6, 2022)

  • A lot has changed between the 2.3 series and 2.4.0 and I'd recommend reading the Reference for a thorough description of how it all works. I'll summarize here, though.
  • Even with these changes, 2.4.0 should work fine with stories created with 2.3 without any problems. If you decide you don't like 2.4.0 and want to continue using 2.3, you may run into some weirdness, as this hasn't been tested. If you use the online version, you can go back to the previous version at https://twinery.org/2.3.16.
  • Even though 2.4.0 has been a long time in the making, it's still a .0 release. I wouldn't recommend updating yet if:
  • You are in the middle of a large project. Or at the very least, please make backup copies of your work before upgrading!
  • You are using a non-English localization. Many UI changes have occurred and unfortunately, it has been hard to get help translating new text. (If you can help out, please see these directions!) So using Twine with a non-English locale setting will show a mishmash of translated and untranslated text.
  • General UI Updates:
  • There's now a toolbar that appears at the top of the screen for all actions. The toolbar's separated into tabs, similar to a menu bar, and has a back button allowing navigation between screens.
  • The system font is used instead of a custom one. This is mostly an aesthetic change, but it also helps with non-Latin text.
  • Some actions, like changing preferences or editing story formats, are available regardless of where you are in the app.
  • The desktop app now has an ARM Linux build, and the macOS app is universal, running on both Intel and Apple Silicon processors natively.
  • The desktop app has a new icon.
  • The Story List:
  • You now select a story from the list and then take an action on it using the toolbar instead of using a gear menu. Double-clicking a story will edit it.
  • Stories can now be tagged, and the story list can be filtered to show only certain tags. Just like passage tags, story tags can have colors associated with them.
  • Story previews have been updated to look hopefully nicer.
  • The Story Format List:
  • By default, only the most up-to-date version of a story format is shown in the list. You can see all installed formats using the View top toolbar tab.
  • The Story Map:
  • You can now undo and redo changes.
  • You can now edit multiple passages at one time.
  • You can rename a passage without editing it.
  • You can now delete more than one passage at a time.
  • All detail dialogs, like the find & replace text dialog, are now modeless, meaning that you can do other work in your story while they're open.
  • You can customize the font used in passage editors and disable cursor blinking.
  • Story formats now have an official way to extend the editor. (The Harlowe story format used undocumented methods to do this in the past.) Story formats can add syntax highlighting to passage editors, a toolbar of actions to passage editors, and add additional connections between passages in the map.
  • Right now, Harlowe and Chapbook have extensions but other story formats may add them in the future.
  • You can disable story format extensions if they are causing trouble or you prefer not to use them.
  • If you're a story format developer, learn how extensions work here.
  • Editing larger stories is faster.
  • Story Formats:
  • Harlowe 3.3.0 is included, and release notes are here.
  • Chapbook 1.2.2 is also included. It's the same as the last version, 1.2.1, except for the addition of editor extensions.
  • Reliability:
  • Twine has been migrated to TypeScript, a JavaScript dialect which automatically checks for certain kinds of coding errors.
  • Test coverage of Twine has improved significantly and changes now require code linting and tests to pass before being merged.

New in Twine 2.3.16 (Jan 9, 2022)

  • Features added:
  • Updated SugarCube to 2.36.1.

New in Twine 2.3.15 (Oct 22, 2021)

  • Updated Harlowe to 3.2.3.

New in Twine 2.4.0 Alpha 1 (Jul 11, 2021)

  • This is not even a beta release! There are bugs here that might trash your work. This is intended to give a preview of the changes in 2.4, and allow translators to begin work on updates localization strings. Please take a look at CONTRIBUTING.md if you are interested in helping with this.
  • If you do run this, make a copy of your 2.3 Twine folder before running this for the first time.

New in Twine 2.3.14 (May 12, 2021)

  • Features added:
  • Updated Harlowe to 3.2.2.
  • Bugs fixed:
  • Removed a conflict between JavaScript polyfills provided by core-js and Harlowe.
  • Make correlation logic from available source to installed source look at all versions instead of just latest

New in Twine 2.3.13 (Feb 15, 2021)

  • Bugs fixed:
  • Includes a corrected version of Chapbook 1.2.1 that includes testing functionality.

New in Twine 2.3.12 (Jan 25, 2021)

  • Features added:
  • Updated SugarCube to version 2.34.1.
  • Bugs fixed:
  • Removed the "Reload" menu item in desktop app versions which could cause data loss.

New in Twine 2.3.11 (Jan 18, 2021)

  • Updated Harlowe to version 3.2.1.
  • Updated Chapbook to verison 1.2.1.

New in Twine 2.3.10 (Jan 3, 2021)

  • Updated Harlowe to the latest version, 3.2.0.

New in Twine 2.3.9 (Jul 13, 2020)

  • Features added:
  • Updated Chapbook to the latest version, 1.2.0.
  • Bugs fixed:
  • Fixed a bug with story renaming in the app version.
  • Fixed a bug with story color selection in the story list.

New in Twine 2.3.5 (Apr 13, 2020)

  • Features added:
  • The built-in version of SugarCube has been upgraded to 2.30.0.
  • Added Slovenian and Japanese localizations.
  • Bugs fixed:
  • A bug where extra blank lines were added to story JavaScript and CSS when importing a story has been fixed.
  • A bug where story formats would load incorrectly in the format dialog or story format chooser has been fixed.

New in Twine 2.3.4 (Sep 23, 2019)

  • Features added:
  • Added Chapbook 1.0.0, a new story format.
  • Upgraded Harlowe to 3.1.0.
  • Upgraded Snowman to 1.4.0 and 2.0.0 respectively.
  • Upgraded SugarCube to 2.29.0.
  • Added Ukrainian localization (thanks to uk123ua).

New in Twine 2.3.3 (Jul 23, 2019)

  • Bugs fixed:
  • Proofing stories, broken in 2.3.2, is working again.
  • In previous versions, pressing control- or command-Z immediately after opening a text editor (passage, JavaScript, or stylesheet) would cause all text to be erased. This behavior no longer occurs.
  • The German localization has been improved (thanks to Kai Brueckers).
  • Features added:
  • Added a Catalan localization (thanks to Jordi Mallach).
  • Added a Norwegian localization (thanks to sinwes).

New in Twine 2.3.2 (Jun 11, 2019)

  • Bugs fixed:
  • Various issues related to playing and testing stories within Twine have been resolved. Twine now opens playable versions of stories in your default browser instead of inside Twine.
  • An error where the editor UI became unresponsive after adding a new passage has been fixed.
  • Story formats with additional build information in their version number (e.g. “1.0.0-beta1”) are now correctly handled.
  • Extraneous story saving, occurring when a passage was clicked but otherwise not moved or edited, has been removed.
  • The link to report a bug has been corrected to point to GitHub instead of the previous repository.
  • Features added:
  • Twine supports dark mode in macOS at a basic level. The window frame will change to match the system appearance, but you must still use the toggle in the story list to change theme. This may happen automatically in a future release.

New in Twine 2.3.1 (Apr 22, 2019)

  • Bugs fixed:
  • In the desktop app, file saving is done in a safer manner so that if a problem occurs, any file that would have been overwritten should stay intact.
  • The desktop app now keeps short-term backups of your story library in case a bug occurs that affects the data on disk. It saves a backup copy of your library to a Backups folder in the main Twine folder when you first start it up, and every 20 minutes while Twine is running. It only keeps 10 backups at most, deleting older ones as needed, so this is not a full-fledged backup solution (and is not intended to be). It is intended as a way to restore data in the event of a crash or bug that overwrites data saved on disk.
  • The Chinese localization that should have appeared in 2.3.0 is in this version.
  • Features added:
  • Harlowe has been updated to version 3.0.2.

New in Twine 2.3.0 (Apr 16, 2019)

  • New features:
  • The desktop app now uses Electron instead of NW.jsThis should resolve many crash issues, and also bring improved performance, as saving changes is now done on a separate processing thread than the main user interface.
  • The files in the story directory are now published as full-fledged stories, where possible.
  • Bahasa Malaysia and Russian have been added as locale choices.
  • Harlowe has been updated to 3.0.1Visit the web site for details.
  • SugarCube has been updated to 2.28.2Visit the web site for details.
  • Bugs fixed:
  • Issues with passages being placed in strange places after being dragged while Snap to Grid is turned on have been fixed.
  • If you have a test or play version of a story already open when you choose to test or play it again, the window or tab should update with the current version.
  • The welcome screen now scrolls properly when the Next button is used.

New in Twine 2.3.0 Beta 1 (Dec 17, 2018)

  • New features:
  • Now uses Electron as its desktop app shell instead of NW.js. The goal of this change is to increase stability of the desktop apps. It also should allow for a more responsive interface, as certain tasks (like saving changes) will happen in the background as opposed to locking up the main UI. Because this change involved considerable reworking of the saving and loading process, it is possible that this beta may contain bugs that would affect saved stories. Before using this beta, please take a backup of your stories, and save backups often.
  • Harlowe 3.0 is now included as a story format choice.
  • Bahasa Malaysian, Chinese, and Russian localizations have been added.
  • Bug fixes:
  • Dragging passages should be more reliable, as the algorithm for avoiding overlaps has been improved.
  • If you have a test or playable version of a story open in another browser tab or window and choose to test or play it again, the tab or window will refresh (it previously only showed the tab or window again).

New in Twine 2.2.1 (Dec 20, 2017)

  • Last modified dates on stories in the desktop app are maintained correctly.
  • Publishing stories with colored tags now works correctly.
  • Publishing stories correctly prefers an HTML version of the story, instead of a ZIP archive (used with iOS only).

New in Twine 2.2.0 (Dec 15, 2017)

  • Features:
  • Passages can now be wide, tall, or just plain large.
  • Tags can be assigned colors, which show up as a vertical stripe on a passage in the story map. Every tag doesn't need to have a color.
  • You can now press the plus and minus keys to change the zoom level of the story map.
  • A Turkish localization has been added thanks to H. Utku Maden.
  • A number of extraneous libraries have been removed, so the overall file size of the app has been decreased, and it should load faster.
  • The built-in SugarCube story format has been updated to 2.21.0.
  • The built-in Harlowe story format has been updated to 2.1.0.
  • Bugfixes:
  • When you zoom in and out, Twine does a better job of keeping the window centered where you were looking.
  • The zoom level you last set for a story is now remembered by Twine.
  • If for some reason a story format can't be loaded, you can still delete it.
  • The desktop app is more tolerant of story files that it has trouble importing at startup – it keeps going, so you at least can get to the story list.
  • If the desktop app does run into problems on startup, it shows the error message it should; previously, it would show a blank white page.

New in Twine 2.1.3 (Aug 1, 2017)

  • Bugfixes:
  • An issue causing passages to disappear, be positioned incorrectly, or otherwise become corrupted has been fixed.
  • Problems causing the search and replace dialog to not work correctly have been fixed.

New in Twine 2.1.2 (Aug 1, 2017)

  • Features:
  • Increased the display density of passages at the medium zoom level.
  • The story list can now be sorted in reverse chronological and alphabetical order (thanks Thomas Michael Edwards).
  • Mac users can now create passages in the story editor with force touch (thanks Michael Savich).
  • You can now widen the passage, JavaScript, and stylesheet editor windows.
  • Revised syntax colors in the JavaScript and stylesheet editors to be more readable.
  • Includes SugarCube 2.16.0.
  • Includes Harlowe 1.2.4 and 2.0.1.
  • Bugfixes:
  • When a new story format is added, stories that used an older version are automatically brought up-to-date. This bug would manifest as having no format initially selected in the Story Format dialog.
  • You cannot remove the default story format anymore. (Choose another one as default first.)
  • Issues with non-English localizations where stories would not save correctly, or would not save to the correct folder, have been fixed.
  • External links now do not cause a broken-link arrow to be drawn in the story editor.
  • Special characters (that have meaning in regular expressions) now are handled correctly when searching and replacing.
  • Fixed a bug where publishing a story from the story list wouldn't work.
  • Fixed a bug where clicking the modal dialog background would not save passage title changes.
  • Fixed a bug where clicking the modal dialog background would be treated as a confirmation in deletion modal dialogs.
  • It's now not possible to scroll the main window when a modal dialog is open.

New in Twine 2.1.1 (Aug 1, 2017)

  • Features:
  • Added Czech, German, Italian, and Portuguese localizations.
  • Updated SugarCube to version 2.14.0.
  • Outdated story formats are now removed automatically.
  • Bugfixes:
  • Improved numerous issues with touch-based devices and Internet Explorer 11 in the story editor.
  • Fixed issues with the quick search field in the story editor.
  • Fixed a bug where sometimes text would disappear in the desktop application.
  • Fixed a bug where the story directory sometimes would not be unlocked when quitting the desktop application.

New in Twine 2.0.11 (Mar 2, 2016)

  • Features:
  • Includes new localizations for German and Finnish.
  • Updates the included version of Harlowe to 1.2.2.
  • Updates the included version of Snowman to 1.3.0.
  • Updates the included version of SugarCube to 1.3.4.
  • Bugfixes:
  • Resolves several problems in 2.0.10 with Linux.
  • Improves link drawing of certain setter links.

New in Twine 2.0.10 (Dec 21, 2015)

  • Includes Harlowe 1.2.1, which fixes a problem with (else:) invocations.

New in Twine 2.0.9 (Dec 21, 2015)

  • Features:
  • Includes new localizations for Brazilian Portuguese, Danish, Dutch, French, and Russian.
  • Updates to CodeMirror 5.4.
  • Bugfixes:
  • A bug where dragging multiple passages would cause them to jump around after the drag completed has been fixed.
  • A visual glitch where passage, JavaScript, and stylesheet editors appeared to have two scrollbars has been fixed.
  • The quick search highlight now updates properly after editing a passage.
  • Global variables set by the editor are now cleaned up, so that they won't interfere with story previews.
  • The passage editor now uses tabs consistently to indent, as opposed to a mix of spaces and tabs.
  • A bug where gray areas would be visible after changing the zoom level of a story map has been fixed.
  • When you change the start passage for a story, link connectors will correctly update based on its new width.
  • The OS X desktop app is now usable for all users, not just the one who installs it.
  • The Windows desktop app is better at finding the user's Documents folder.
  • Desktop apps should no longer complain about running out of space.
  • Handles importing story files that have no IFID gracefully.
  • Story Formats:
  • Updates the included version of Harlowe to 1.2.
  • Updates the included version of Snowman to 1.2.
  • Updates the included version of SugarCube to 1.0.32.

New in Twine 2.0.8 (Jul 16, 2015)

  • A bug where < and > characters would be garbled in stories in the native app version has been fixed.
  • Harlowe 1.1.1 is included.

New in Twine 2.0.7 (Jul 16, 2015)

  • Features:
  • Twine is now internationalized, and includes a Spanish localization. Interested in adding a localization? Please see the relevant section on the repository.
  • Importing files has been sped up, as well as the startup time of the local app.
  • Bugfixes:
  • Fixes a bug where clicking links in a story generated from the Test and Play buttons would not work.
  • The local application now works properly on Windows 7 Enterprise.
  • Story Formats:
  • Updates the included version of Harlowe to 1.1.
  • Updates the included version of Snowman to 1.1.

New in Twine 2.0.6 (Jun 11, 2015)

  • Bugfixes:
  • Properly includes SugarCube in local app versions.
  • Fixes a bug in 2.0.5 where clicking links in testing/play versions of stories did not work.
  • Known Bugs:
  • When testing or playing a SugarCube story in an app version, sidebar links do not work. (Resolved on development branch)
  • Story Formats:
  • Updates the remote URL of SugarCube to the latest.
  • Updates the included version of SugarCube in local app versions to 1.0.23.
  • Updates the included version of Snowman to 1.0.2.

New in Twine 2.0.5 (Jun 11, 2015)

  • Bugfixes:
  • Fixed a bug where dragging a group of passages caused them to jump to odd locations after the drag.
  • Fixed a bug where passages would jump around after moving from the editor to the story list.
  • The first passage added to a story is always set as its starting point.
  • Better handling is done to recover gracefully when a story format fails to load.
  • In native app builds, the filenames for stories are stripped of any characters that might cause problems (i.e. slashes or colons).
  • New passages are now properly centered, regardless of zoom level.
  • A story with no starting point set now archives properly.
  • Features:
  • The new Twine 2 guide is now linked from the story list.
  • New visual previews of stories in the list.
  • You can now rename, test, and duplicate a story from the list instead of having to edit it first.
  • When a passage is renamed, the editor makes its best effort to change links accordingly. This doesn't yet work if the passage is mentioned in a macro.
  • Added rudimentary autocomplete when typing links in the passage editor. This only works right now for links, not macro mentions; this may change in the future.
  • Deleting a passage now prompts the user that they're sure; holding the Shift key while clicking the delete icon bypasses this warning.
  • The grid snap has been made coarser.
  • Pressing Control-Shift-Alt-(or Option)-D in a native app build will open a debugger console.

New in Twine 2.0.4 (Jun 11, 2015)

  • Bugfixes:
  • The app no longer mistakenly reports an updated version is available immediately after updating.
  • If an error occurs within the library used to save stories, a notification is now shown to the user. Previously, notifications were only shown when an error happened within the Twine app itself.
  • Features:
  • The tooltip for the story menu now shows the most recent date/time the story was saved.
  • The Story Statistics dialog is back, and now includes the IFID for a story.
  • Added experimental native app builds, available for now here only. These builds have not been thoroughly tested; please use at your own risk. These save your stories to your Documents folder, under Twine > Stories.

New in Twine 2.0.3 (Jun 11, 2015)

  • Bugfixes:
  • Trying to save a passage with a name that another one already has now shows an error message instead of losing work.
  • Newly-created passages now are numbered properly (“Untitled Passage 1”, “Untitled Passage 2”, etc.) This bug would also cause data loss.
  • Fix a bug with displaying search results when searching for text including < and >.
  • Using Enter to add tags works as many times as you like while editing a passage.
  • Publishing stories now works on Safari.
  • Fix problems with the story stylesheet and story JavaScript editor putting typed text far away from where the cursor appeared.
  • At medium zoom level, passage titles now use the entire space of the box instead of a single line.
  • Fix intermittent problems where link arrows or broken-link status of a passage would not update after editing.
  • Features:
  • If you try to play a story but haven't set a starting point yet, you are now prompted to do so.
  • Window titles have been changed slightly to better distinguish editing a story from playing or testing it.
  • A warning appears if you try to navigate away from editing a passage (i.e. while changes may not have been saved yet).
  • New animations between the story list and editor.

New in Twine 2.0.2 (Jun 11, 2015)

  • Bugfixes:
  • The storage quota bar on the story list no longer causes slowdown on Chrome.
  • A progress spinner is shown while importing from a file.
  • After an import, the story list automatically updates.
  • If a story is published to an already-existing window or tab, then a notification appears letting the user know that they should look over there for the updated output.
  • Passages are prevented from being moved offscreen.
  • Story formats now timeout on loading at 10 seconds instead of 2.
  • User-added story formats may now be deleted.
  • [[]] is no longer considered a link (previously, a passage with an empty name would be created).
  • Date sorting in the story list now works properly.
  • If publishing a story fails, then an error notification is shown to the user (previously, this would die silently).
  • Clicking a button automatically hides any tooltips for it, to prevent it from blocking any popups from view.
  • Passage connectors now take border width into account (i.e. links drawn from the start passage show properly).
  • Features:
  • Passage connector drawing during a drag has been sped up.
  • SugarCube has been added as a built-in format.
  • The browser's window title changes to match what the user is currently working on.

New in Twine 2.0.1 (Jun 11, 2015)

  • Bugfixes:
  • Story formats are now preserved during import (thanks Thomas Michael Edwards).
  • $$ and other esoteric-ish characters in passages are no longer inappropropriately transformed during the publishing process (thanks Thomas Michael Edwards).
  • A bug where passage connections would sometimes not update with zoom level changes has been fixed.
  • A cosmetic issue with popup balloons is fixed.
  • The link to the Twine forum on the welcome page is fixed.
  • Features:
  • The editor now checks for an updated version against http://twinery.org/latestversion/2.json once a day and informs users accordingly.
  • Passage connections are now drawn using SVG for improved performance.
  • Built-In Story Formats:
  • Harlowe:
  • TBD
  • Snowman:
  • Now properly uses user-created stylesheets and JavaScript.

New in Twine 1.4.2 (Jun 4, 2014)

  • Bugfixes - Development program:
  • Fatal errors:
  • Now, building games in non-English locales should no longer get an encoding error caused by the built file's timestamp. Thanks to mth for assistance and Cab for the report.
  • StoryIncludes:
  • The Story___ passages are no longer forbidden from being included via StoryIncludes.
  • The StoryIncludes passage is no longer broken on OS X.
  • Importing:
  • Fixed buggy HTML importing for passages that have > symbols in their titles.
  • It is now possible to import from HTML files that use the SugarCube custom header.
  • Fixed imported images having the wrong MIME-type if their filename extensions were in all-caps (such as “tree.JPG”).
  • Altered the MIME-type of imported fonts in ttf and otf format to “application/x-font-…” instead of “application/font-…”. Also, unrecognised files are now “application/octet-stream”. This shouldn't really change anything, but may improve browser support.
  • Story Map:
  • The position of passages created by right-clicking and selecting “New Passage Here” should be fixed.
  • Fixed passage names with full stops no longer failing to have incoming link arrows.
  • Selecting “New Passage” when a Start passage is missing no longer creates the “Start” passage, since it could be irritating for “partial .tws files” that are being used in a large StoryIncludes project.
  • Passage editor:
  • Passages with very long names no longer have the left half of their name scrolled out of the title text box when you initially edit them.
  • The passage editor now has a uniform tab width (set to 4 spaces).
  • Fixed a bug where HTML wouldn't be highlighted if its tag names or attribute names contained hyphens (e.g. )
  • Bugfixes - Game engine:
  • General:
  • Built HTML files now have a UTF-8 byte-order mark. This should cause Dropbox to correctly transmit them with UTF-8 encoding instead of ASCII. Hooray!!
  • Fixed certain page elements (such as StoryTitle and StoryAuthor) not being drawn at the start of a test play build that begins at a non-Start passage.
  • Fixed the image preloader code, which didn't detect whitespace correctly, and thus prevented preloading images in HTML tags that had a space between “src” and ”=”.
  • Syntax:
  • You should now be able to put a ] character inside the link syntax (e.g. [[|Passage name]]) and put a quoted ”>>” inside the macro syntax (e.g. > ).
  • Shorthand : variable default was causing $vars provided as arguments to mess up horridly. This should fix this.
  • Raw HTML entities (such as   or < or somesuch) are now correctly preserved, rather than being converted to their symbols during the build process.
  • Generated HTML:
  • Previously, charspans (that's the element wrapped around individual text characters for the purposes of CSS effects) had the classes “char” and a second one representing the char contents - for instance, “v” for lowercase v. But, having a single-character classname for charspans is causing some collisions with certain Firefox extensions. Now, the character is stored in a data-char attribute, so CSS can still potentially select it by, e.g. .char[data-char=v].
  • Also, charspans are no longer generated if the story's text or stylesheets do not contain the ”.char” or ”[data-char]” selectors anywhere.
  • and elements inside passages now work again. Previously, they did nothing.
  • Default CSS:
  • Fixed Sugarcane StoryMenu items having cursor:pointer even if they aren't links.
  • Nested s no longer have a CSS margin-top.
  • Responsive: Fixed the bug where a blank rectangle would remain if the bookmark link was disabled in StorySettings.
  • Macros/Functions:
  • Using Passage() instead of passage() in your code will no longer silently fail instead of producing an error message.
  • «choice», «button» and «textinput» no longer incorrectly convert Twine operators in the text of the provided link to Javascript operators (e.g. «choice [[not]]» becoming «choice [[!]]»).
  • The undocumented clone() function has been updated to hopefully allow certain native objects to be cloned more effectively.
  • A number of macro error messages are a little clearer - displaying “$” instead of state.history[0].variables.” when referring to the macro invocation.
  • Fixed a bug where certain objects were being passed by reference when used in a setter link - e.g. [[Link][$a = $obj]] caused $a and $obj to point to the same object, with changes to one altering the other.
  • Fixed a bug where object literals as shorthand «display» arguments wouldn't work at all.
  • Fixed a bug where multi-line string or object literals in «set» or «print» macros, etc., would not have Twine operators converted by Wikifier.parse() correctly.
  • History/Back Button:
  • Game history: Added a test for iOS Safari's private browsing mode, which does not disable sessionStorage but does reduce its quota to 0 - making it hard to tell if it's actually usable. This causes the “couldn't save the state” alert to not pop up if you're playing in private mode.
  • The story state serialisation functions have been rewritten to allow basic Javascript functions stored in Twine variables to be decompiled and stored. Previously, using the Sugarcane back button or a bookmark would cause function variables to lose their value. (Of course, this relies on function decompilation, so bound functions and native functions' serialisation will silently fail. And, when recompiling them, their original scope is lost.)
  • Internals/Scripts:
  • Added Array.prototype.forEach(), Object.create() and Array.isArray() polyfills to the engine, allowing IE 8-compliant scripts to use them.
  • The engine now records the previous value of window.onerror, and restores it once the message has been displayed once.
  • New features - Development program:
  • General:
  • Added StoryInit, a special passage in which to put Twine macros that you want to run before every play - including Test Plays of specific passages. This is generally a more ideal place to put your initial «set» macros instead of the Start passage. Thanks to T. M. Edwards for pioneering this feature.
  • Error checking:
  • Added a very basic passage code error-checking system. When closing a passage, Twine will now report a few possible errors: not matching an «if» macro with an «endif», using ”=” instead of “is” in the «if» macro, misspelling "http://" in a link, and putting HTML tags in a script passage. (Less obvious errors can only be identified by your browser's Javascript engine, and will, as usual, only be identified at runtime.)
  • Also, when closing a passage, Twine will now offer to create new passages for each red link in the passage text. This potentially saves you having to create them yourself.
  • Also, when closing a passage, Twine will now offer to import all images, linked from URLs, into the story, and update the [img] references to match. Importing images is recommended because it saves you the bother of hosting the image files, keeps the story from breaking if your image hosting site is down, and allows you to host the HTML file on sites such as http://philome.la, which only allow single HTML files to be uploaded.
  • All of the above checks and helpers can be run from the “Verify All Passages” menu item in the Build menu, or the “Verify Passage” item in the passage editor's Passage menu.
  • StoryIncludes:
  • Twine now tries to keep track of passages that aren't present in the file, but are included via the StoryIncludes feature (henceforth, “included passages”). Links to included passages are now mauve, and passages that link to included passages now have a mauve marker drawn on them in the Story Map.
  • Story Metadata:
  • Added a “metadata” option to the Story Menu, which lets you edit some data that is included in the final HTML file.
  • The “identity” specifies a noun to use for game interface dialog boxes (the restart confirmation, the error dialog, etc.) If left blank, then “game” will be used.
  • The “description” provides text to use for a HTML description element, which is often used by search engines etc. to provide a summary of the page. I've noticed that often Google will, at a loss to find the game content, display odd bits of the storeArea div as a page description in its search results, which is most definitely not a good look. Maybe this will fix things.
  • StorySettings:
  • Added a StorySetting which, when set, disables most of the CSS used for each built-in story format, leaving only the core positioning stuff. You can then write clearer CSS on top of this bare slate. You can also trigger this within an individual stylesheet by adding the comment “blank stylesheet” to it. (The intent of this is to allow people to copy-paste full “stylesheets” into their stories without having to manually change the StorySettings.)
  • Added a “URL hash” StorySetting which causes the bookmark link's URL hash to be present in the address bar at all times, allowing people to obtain the bookmark URL even if the sidebar is absent. (But note that the bookmark() function, described below, lets you script an alternative means of retrieving the bookmark.) Since the URL hash tends to be fairly unpleasant-looking, and a majority of Twine games don't rely too heavily on bookmarking, this option is off by default.
  • StorySettings is now edited through a proper UI dialog, instead of just a passage with name:value pairs interleaved with instructions.
  • Removed the “ObfuscateKey” StorySetting, on the basis that very few people were using it. Now, all obfuscation uses ROT13. (HTML files made in previous versions can still be imported regardless of obfuscation setting.)
  • Preferences:
  • Flat Design mode is available in the preferences.
  • Added a preference option for connector arrows being visible or not.
  • Menus:
  • Changed the “View Last Build” menu option into “Rebuild and View”, which builds the story before showing it.
  • Added a Help menu to the passage editor, linking to a few wiki articles concerning passages.
  • Importing:
  • .twee files may now have a “preface” - lines of text preceding the first declared passage - which is now ignored by the Twee Import feature.
  • Story Formats:
  • Custom story formats can now supply a Python file, “header.py”, which lets various parts of the Twine development program be customised to match the features of the story format. See the base header.py class, which your header.py file should subclass, for details.
  • New features - Game engine:
  • Syntax:
  • You can now use the inline syntax as a shorthand for the HTML tag.
  • @@.robot;This is a robot-class span@@ is equivalent to This is a robot-class span.
  • You can also use it alongside style attributes: @@.robot;text-decoration:underline;This is a robot-class span with an underline@@
  • One bothersome fact about Twine up to now is that there's no real “bridge” between the basic Twine link's functionality and raw HTML. There was no convenient way to make a raw link trigger a passage change. So, I've added a “data-passage” HTML attribute that you can put on HTML , , and tags.
  • Some text is equivalent to [[Some text|Distant woods]], but allows you to add extra HTML attributes to the link, like “style”.
  • is equivalent to [img[Trees]] - thus, you can now refer to imported images in HTML. (If you wish to make an image that links to a passage, put the inside an element.)
  • is how you can make an image map area link to a passage.
  • You can also attach data-passage to any other kind of tag to make it serve as a link, too: This looks like ordinary text.
  • To simulate setter-links, you can also add a “data-setter” property, too. Collect teeth. Note that it does nothing without a data-passage attribute as well.
  • It should now be possible to supply variables to the image syntax, as an image passage name or URL - for instance, [img[$pictureName]].
  • Removed the quote-by-line syntax, on the basis that a good number of people don't really want indenting that often, and would rather have greater-than signs as bullet points. The rest can rely on the indented block syntax (< < < ) or HTML tags.
  • Generated HTML:
  • Passage links no longer have ID attributes that reveal the name of the passage they go to, allowing anyone to “cheat” by right clicking them and selecting “Inspect Element”. This has been the case for every previous version of Twine, but not anymore!
  • Jonah: rewind links now have the class “toolbar-rewind” instead of “toolbar-rewind to here”.
  • Default CSS:
  • Mobile Sugarcane layout: I've added a somewhat rudimentary media query to Sugarcane that converts the sidebar to a vertical header, using a minimum of alterations, when viewed on a 640px-width display. Hopefully this won't break custom CSS too much.
  • Having added the above, Sugarcane's sidebar now has position: fixed again.
  • Jonah: added bottom padding to #passages, so that the present passage isn't always uncomfortably flush with the bottom of the window.
  • Tweaked some of Responsive's CSS to, for instance, make links in StoryAuthor or StorySubtitle correctly coloured.
  • Stylesheets:
  • CSS @import declarations are now hoisted to the top of the element, thus causing them to work regardless of which stylesheet passage they're included in. So, if you've had problems with them, this may be the answer.
  • Error reporting:
  • Altered the “interrupt” error message to print the Javascript stack trace if it's available (currently only in Chrome). If you see such a message, do present a picture of it to Leon if you can.
  • Macros/Functions:
  • either() may now accept a single array as a sole argument, and will pick a value from within that array. This allows you to a bunch of either() arguments in an array variable, and call either() with it in many places: «set $a to [“Red”,”Blue”,”Green”]» «print either($a) + ” and ” + either($a)»
  • visitedTag() may now accept a string of space-delimited tags, as an alternative to several strings or an array.
  • Added random(), a function seen in Twine 2 and SugarCube. Given two numbers (such as random(3,12)) it returns a random integer between them, inclusive. While I generally recommend continuing to use either() for choosing between a small set of numbers, I recommend random() for long ranges, as an alternative to the cumbersome Math.random().
  • Added a rot13() function that returns the given string in ROT13 encoding.
  • Added a bookmark() function, which provides the bookmark hash for the current passage, the same as that used by the built-in “bookmark” links.
  • Internals/Scripts:
  • Fixed a bug where Jonah would crash when restarting a story.
  • To save a little startup time, image passages are no longer obfuscated if the “obfuscate” option is set.
  • Changed all the element onclick references to addEventListener()/attachEvent() calls.

New in Twine 1.4.1 (Jan 15, 2014)

  • Bugfixes:
  • Development program:
  • Potentially fixed the Windows VC++ runtime problem. If you haven't installed the VC++ 9 redistributable, the Twine installer should now correctly contain it.
  • Fixed «endnobr» consuming the three characters that come after it.
  • Fixed external link syntax highlighting.
  • Fixed syntax highlighting for shorthand «print» macros.
  • Fixed unmatched «endif» and «endsilently» macros not being syntax-highlighted red.
  • Removed the “Delete Passage” menu item in the Story menu, due to an identical entry being in the Edit menu.
  • External links and variable links are no longer considered broken links in the IDE.
  • Fixed annotation passages being drawn too dark in smooth drawing mode.
  • Fixed the monospace font using the normal font's size instead of its own.
  • The StorySettings passage is no longer converted to all-lowercase at build time. This should make HTML exporting/importing more symmetrical.
  • Improved speed of HTML importing.
  • Fixed an error when trying to replace a passage with one from animported file.
  • Fixed importing from HTML sometimes failing to read passages correctly.
  • Now, the “no Start passage” warning is suppressed if a StoryIncludes passage is present.
  • Game engine:
  • Fixed passages with names containing quote marks being unrecognised by links.
  • Fixed HTML tables in passages not being constructed correctly.
  • Altered Sugarcane's browser state-saving to avoid a crash in Firefox caused by having lots of variables in your story.
  • Fixed TiddlyWiki emdashes not being rendered correctly.
  • Fixed the «nobr» macro inserting zero-width space characters into contained macro tags, thus breaking them.
  • Fixed bug preventing custom macros from being usable in StoryMenu etc.
  • Fixed the [img] syntax used in CSS stylesheets inserting a terminating semicolon, preventing further attributes from being used on the same line.
  • Added “vertical-align:bottom” to images to compensate for a line-height difference between XHTML Transitional and HTML5. Why is there a line-height difference? The person who can answer that is not on this Earth, but in Heaven.
  • Fixed the «nobr» macro not working if any text follows it.
  • Fixed «choice». Now, clicking a «choice» disables all .choice links in the passage, not just itself. This returns it to 1.3.5 behaviour.
  • Fixed variables used as array indexes not being parsed correctly.
  • Restored the left positioning of the Sugarcane sidebar.
  • Added support for “javascript:” and “data:” URIs in external links.
  • You can now use external links in the simple link syntax, such as [[http://example.net]].
  • Possibly broken pretty-links (as in, links with a separate link text and destination) are now no longer assumed to be external URIs unless they contain a protocol (like “http:”), or the symbols . / \ or #. This should make link debugging a bit easier.
  • Fixed the shorthand «display» macro tag's title sometimes being incorrectly parsed as its first argument.
  • Shorthand «display»: Attempting to access a parameter() that wasn't supplied will no longer throw an error, on the newly considered basis that it would make “variadic passages” (passages that can take multiple optional variables) difficult.
  • Fixed a bug where backslashes would be incorrectly converted to arbitrary letters if passage obfuscation was being used.
  • «back» now works better when Undo is off in Sugarcane. Previously it would mess up the variable state in cases when link variables were in use.
  • «back» and «return» now work when restoring a Jonah state via bookmark.
  • «back» also now works when clicked in a past Jonah passage - previously it would act as if it was in the present passage.
  • «back» now works in the StoryMenu, StoryAuthor, StoryTitle and StorySubtitle passages.
  • «choice» now produces an error message if it's used in the StoryMenu, StoryAuthor, StoryTitle and StorySubtitle passage.
  • Fixed Jonah scrolling in IE 8.
  • Now, only the StoryTitle passage's text content will be used for the window title, instead of its raw code.
  • Now, if a story has no StoryTitle, or the StoryTitle has no text content, it will default to the name of the .tws file used to build it, instead of just “Untitled Story”.
  • Fixed a bug where putting “Lookup:” in the StorySettings could potentially crash the game. * Added a sanity check in case a script overrides History.prototype.display() but doesn't pass enough arguments (since in 1.4 it takes 4 arguments instead of 3).
  • Fixed HTML structures in passages not being rendered correctly.
  • Additions:
  • Development program:
  • IDE tag colours now vary between shades of orange based on the hash of the tags, to help differentiate dissimilarly tagged passages from a distance.
  • Added a Preferences option for showing the faint connector arrows for image and stylesheet passages.
  • Passages displayed via the shorthand «display» syntax now result in connector arrows being drawn.
  • Game engine:
  • The StoryMenu now auto-updates when you change passages!! The code is re-executed and re-rendered into the element. This means you could, say, «print» a variable inside it, and it would update automatically. (This change also applies to StoryAuthor, StoryTitle and StorySubtitle).
  • Added the tags() function, which takes one or more strings and returns an array of the tags of the given passage (or the current passage if no name is supplied).
  • Added passage(), which simply holds the name of the current passage (If a passage is being «display»ed by another, passage() is the name of the “topmost” passage.)
  • Added turns(), which provides the number of turns that have elapsed in the current game.
  • Added visitedTag(), which returns the number of times passages with the given tag have been visited. Provide multiple tags to only search for passages that contain both.
  • Added 'header' and 'footer' elements to Jonah's .passage elements, to provide a bit more symmetry with Sugarcane's DOM layout.
  • The CSS selector ”:link” in stylesheets is now converted to [class*=Link] at runtime. This is to provide backwards-compatibility for people who used “a:link” to refer to Twine links (which is no longer usable as internal links no longer have href attributes). It's a mean sight of a hack, but so be it - I shan't be adding back the “javascript:void(0)” href no matter what you say.
  • Added the “visitedLink” class, which is applied to passage links that link to already visited passages. ”:visited” is converted to ”.visitedLink” much like the above. This provides a surprising amount of power - you can give .visitedLink “display:none”, for instance, to make links to all visited passages disappear automatically.
  • Re-implemented «textinput». It creates an text element which, when a element is pressed, sets the variable to its string contents. It may also have an additional parameter, a link expressed in link syntax, which is used to create a next to it. Examples: , .
  • The previous 1.3.6 «textinput» behaviour of triggering the passage change via pressing the Enter key has been removed for now.
  • Added «radio». Its arguments are a variable, and a number of strings for each option. When a is pressed, the label of the selected radio button is put into the variable. Example: . If you have multiple «radio» macros that refer to the same variable, they're treated as part of the same set.
  • Added «checkbox». It's similar to «radio», having identical syntax - but it sets the variable to an array value containing all of the checked boxes' labels as strings. Example: .
  • Added «button», a macro that takes a link as its argument and creates a element. Use it for passages which use «radio» or «checkbox», or a «textinput» set. Example:

New in Twine 1.4 (Jan 15, 2014)

  • Game engine:
  • Syntax
  • You can now mix HTML tags and passage syntax in your story, without needing the syntax. (It still remains for backwards-compatibility).
  • You can now use variables in place of a passage name in the link syntax - [[Exit|$placeName]] now creates a link to the passage whose name is in the $placeName variable. You can also do [[Back|previous()]] to replicate the «back» macro.
  • Also, you can write [[link text|passage name][$var = value]] to make a passage or external link that changes a variable when it's followed! The code section is treated as if it were arguments to a «set» macro. This syntax addition should work with «choice» macros (but not the [img] syntax). You can set multiple variables by separating them with a semicolon.
  • As a shorthand for , the TiddlyWiki inline style syntax is available. Type @@, then list CSS style attributes separated and terminated with semicolons, then put the passage text (including any other formatting and macros) ending with another @@. Example: @@font-size:2em; text-decoration: underline; Hello there!@@
  • Ending a line with \ will cause that line break to be removed from the rendered text. This can be useful when dealing with long chains of «if» macros.
  • Macros:
  • «remember» now uses HTML5 Local Storage, which means it can now work even in an offline HTML file. Also, it can remember multiple variables given in a compound statement (like «remember $a = 1, $b = 2»).
  • Added «forget», which undoes the effects of «remember».
  • «choice» can now accept arguments phrased using the link syntax, e.g: «choice [[a trapdoor?|falling]]». This saves the trouble of having to account for its inconsistent argument order.
  • «nobr» and «endnobr» remove all the line breaks in the text between them. They should be used instead of «silently» to enclose groups of macros.
  • The «else if» macro, which can also be written as «elseif», allows you to essentially have multiple «if» macros chained together, without needing to nest each of them within the «else» / «endif» tag pair of the other.
  • You can also use variables in place of a passage name in «display». For instance, «display $name» is now valid.
  • Shorthand macros:
  • You can now write a shorthand form of «print $variable» like so: «$variable». Note that this only works for printing just variables - not functions or anything else.
  • You can now write a shorthand form of «display “Place”» like so: «Place». Note that this only works for passages whose names do NOT contain spaces. Also, it can only be done with specific named passages - not variables or anything else.
  • You can supply additional arguments to the shorthand «display» macro - in effect, you can “call” passages as if they were macros. (Note: you cannot supply arguments to the longhand «display» because they will be interpreted as part of the passage name - for instance, «display Cellar 2» will try to display “Cellar 2” instead of “Cellar” with an argument of 2.)
  • Macro syntax/functions:
  • You may now use “to” in macros instead of ”=”, and “is” instead of “eq”. I think we can all agree it's too easy to confuse ”=” with “eq”, so you can instead write «set $darts to 4» for more readable code.
  • Strings containing 'and', 'or', '$' and other Twine operator symbols can be used inside macros without them changing into Javascript symbols.
  • Now you can put greater-than signs inside macro tags, such as «set $arrow to ”–>”»
  • All new variables are now 0 by default, regardless of whether you've «set» them or not.
  • Added either(), a function that randomly picks one of the things given to it.
  • Added visited(), a function that returns the number of times you've visited the given passage.
  • Added previous(), a function that returns the name of the previous passage visited.
  • If this passage is being included by a shorthand «display», the parameter() function returns one of the space-separated terms in the macro invocation, parsed to a value. The function's argument is a zero-based index - parameter() or parameter(0) returns the first parameter, parameter(1) the second, and so forth.
  • Macro coding:
  • setTransitionCSS() replaces the contents of the #transitionCSS element with the passed string. This allows you to completely override the default transition CSS without it cascading down. I'm offering this as a JS function because many transitions will also require some extra JS, and being able to provide the complete transition code in just a script is desirable.
  • prerender and postrender are new objects whose function properties are executed every time the passage is rendered. The functions added to them take one argument: the resultant .passage .content element. Their 'this' value is the Passage object being rendered.
  • Passage tags:
  • An alternative Tag CSS approach! Now, taking a stylesheet passage and adding an extra tag to it (in addition to “stylesheet”) will cause that stylesheet to only be applied for passages with that given tag. (This, I feel, is a bit tidier than the old Tag CSS method - the [data-tags] selector need not be repeated dozens of times in a stylesheet, and applying only to the 'body' or '.passage' selectors. Although, it is slightly less flexible w/r/t tag hierarchies - the :not[data-tags] selector can't really be replicated.)
  • Twine now uses CSS transitions for passages appearing and disappearing. Giving a stylesheet passage the tag “transition” will cause that stylesheet to replace the default “fade-in” transition CSS, letting you define your own transition without having to override the other one's properties.
  • The special “nobr” passage tag removes line breaks from the whole passage.
  • StorySettings:
  • The StorySettings passage enables a number of special story options to be set.
  • Undo: enables the player to “undo moves”. In Sugarcane, this means being able to use the Back button in the browser. In Jonah, this means being able to use the “Rewind to here” link, and being able to click links in previous passages.
  • Bookmark: enables the player to use the “Bookmark” link in Sugarcane and Jonah. On by default.
  • Obfuscate: obfuscates the story's HTML source to prevent people from spoiling themselves by reading it. Off by default.
  • jQuery: set this on if you are using custom scripts that rely on the jQuery library. Otherwise, leave off. Note: Twine 1.4 relinquishes control of the “$” variable, so jQuery can now use it without $.noConflict().
  • Modernizr: set this on if you are using custom scripts that rely on the Modernizr library. Otherwise, leave off.
  • Jonah:
  • All passages are now added to the bottom, regardless of where you click the link.
  • Clicking a link that leads to a previously displayed passage will display a new version of the passage at the bottom, instead of scrolling up to the old version.
  • Clicking a link in a past passage in Jonah now rewinds the game state to that passage before following the link. This gives the author a greater level of control over the game state - it's no longer possible to re-use old links from earlier in the story that no longer make sense in the current context. (Note: Switching off the “Undo” StorySetting disables all links in past passages.)
  • «back» is now usable in Jonah. When used in Jonah, a «back» link removes the contained passage, plus any prior passages (as given by the “steps” argument or a passage name argument).
  • Sugarcane:
  • Removed the “Share” menu.
  • The “Rewind” menu is only visible if any passage has been tagged with 'bookmark'.
  • Added a “Bookmark” menu item, which produces a link to the current passage.
  • HTML5 History is now used to control the browser's Back and Forward buttons, and the «back» and «return» macros, in Sugarcane. This means that several bugs related to these are now fixed, and they should now work alongside random macros, player-input macros, and other such things.
  • «choice» is now usable in Sugarcane. It now creates a link that can only be clicked once in the whole story.
  • The sidebar now has position:absolute instead of position:fixed.
  • CSS / HTML:
  • Added a tag to alert the reader that Javascript is off.
  • Made it so that raw HTML links in stories are styled as if they were proper externalLinks, in case the author unwittingly used the former in ignorance of the latter (a not uncommon occurence).
  • The passage content element, formerly classed “body” in Jonah and “content” in Sugarcane, now has a class of “body content” to match legacy CSS for both.
  • Development program:
  • Visual
  • Special passages (Start, StoryAuthor, stylesheets, etc.) have different-coloured title bars. I've tried to stick with earthy hues in keeping with the colour scheme of the Twine icon, with redder hues used for stylesheet and script passages.
  • Passage tags are displayed in a peach ribbon along the bottom of the passage box.
  • Annotation passages are non-playable passages tagged with “annotation” that hold text to display on the story map, to annotate, comment or document the source code of the game. They have a different colour and size to normal passages.
  • Connection lines representing «display» macros are drawn with a bluer tint.
  • The position of newly created passages is much less arbitrary - passages will be placed closer to the expected area.
  • Altered the Greeking of zoomed-out passages to reflect the actual passage text length.
  • Selected passages now have their link arrows thickened to visually offset them.
  • Passage tooltips now display a preview of the passage's text (up to 840 characters).
  • Tagged stylesheets have arrows linking them and any passages with the same tag.
  • Importing/Exporting:
  • Added “Import From Compiled HTML” option, letting the author recover passages from built games.
  • Importing .twee source code no longer discards all the passage tags in the imported passages.
  • The “Proofing Copy” export option renders a few more markup styles better.
  • Building:
  • The “Test Play” menu item builds the game to a temp file, letting you run the story without having to have saved it to a specific filename first.
  • You can also right-click a passage and select “Test Play From Here” to start playing from that particular passage.
  • The “StoryIncludes” passage allows the passages inside other .tws or .twee files to be imported into this passage during building. If your game is particularly huge, you can divide it into a bunch of smaller .tws/.twee files, then add the filenames of these partial .tws/.twee files to one “main” file's StoryIncludes passage. All the passages in those files will then be copied into the main story at build time.
  • Added “Auto Build”, a menu option that is only available when used with a StoryIncludes passage. If this is set, then when any one of those smaller .tws/.twee files is modified, the story is automatically rebuilt and can be tested in-browser. This requires both files to be open at the same time, though.
  • Passage editing:
  • Passage titles must now be unique. The passage title input will turn red to indicate non-uniqueness.
  • Passage titles may no longer contain the | and ] symbols, due to such names being difficult to link.
  • Vastly improved the passage syntax highlighter.
  • Added very basic stylesheet CSS syntax highlighting.
  • Images and fonts:
  • You can now add image files to the story file. These are stored as 'image passages' which can be included in passages using the image syntax: [img[imageName]] displays the image. Images are also embedded in the final HTML file, and don't need to be hosted elsewhere. Supported image file extensions are GIF, PNG, JPEG, SVG and WebP.
  • You can now embed font files, which can then be used in stylesheets, or, if you don't know CSS, the element. Fonts are simply imported as stylesheet passages containing the font file in base64 encoding. Supported font file extensions are TTF, WOFF, OTF and SVG.