A simple, powerful, and flexible tool for creating non-linear interactive story games in the browser.

Use this web-based editor to author, collaborate,  test, and publish your games.  The tool is free and open source.

Games made with the Elm Narrative Engine

Getting Started

Run the editor above.  You will be prompted to sign in or "get started."  If this is the first time you are using this tool, just click "get started," which will set up a temporary guest account for you and create a tutorial project that walks you through how to use the tool.  Just click on that project and you'll see the editor interface.  Click the "Preview" tab to play the interactive tutorial.

Feel free to ask for help in the community forums below, and if you make anything cool with this tool, I'd love to see it!


This editor includes many features to make it easy to write your own non-linear interactive story games, powered by the open source Elm Narrative Engine.

Editor Features

This editor lets you work on projects without writing any source code, and includes the following features:

  • Auto-save to the cloud on every change - you can work on it from any computer when you sign in
  • Real-time collaboration with others - add collaborators to your project, and see their updates in real-time
  • Live preview - a simple theme with debugging features to test out your story as you are working on it, including real-time updates as you make changes so you don't have to reload
  • Helpful authoring tools like auto-completion and syntax validation

Engine Features

The Elm Narrative Engine is unique when compared to other options like Twine, Ink/ChoiceScript, or Inform 7.

  • A flexible world model - build your story world any way you like
  • A powerful rule-matching engine - build up "rule-books" to describe how your story unfolds as the player interacts with it to get complex non-linear stories that go beyond branching trees
  •  Customizable views  - query the model to populate any kind of UI and interaction system you want, including embedding the narrative engine in another game engine
  • A simple and expressive authoring syntax

Sample syntax

Here is an example of how you would create a few entities with unique properties.  Note how you can design any properties that make sense in your game.


Here are a couple rules that would match against the entities above.  Note that the engine includes dynamic text markup as well.

# Entering dark places rule
ON: *.location.dark
"It's too dark to go in there!"
# Entering the cave with a light source rule
IF: *.item.illumination>5.current_location=PLAYER
DO: PLAYER.current_location=CAVE.fear+2
"You enter, {PLAYER.fear>4? your heart pounding | bravely}.


The Elm Narrative Engine can do a lot.  Check out the community forum and the dev log for useful information, and don't hesitate to ask questions. 

To really go to the next level, you'll want to write your own game and views that import your story data that you write using this editor.   The easiest way to get started is to clone the interactive story starter repo.

You'll have to know the Elm language.  You can view the full documentation for the engine API.  I also have the original dev blog that goes into more technical detail and has references to example code.

Project status

This project is an open source labor of love that I have been working on since 2016.  It has gone through 6 major releases so far, and is likely at a stable state.  I have used it in many of my own games, and continue to do so.

The visual editor is the newest peripheral addition and is currently in an early release state.  Some features I have planned to add include:

  • Export/publish functionality
  • Customization of preview theme
  • Custom additional columns to add extra data to entities (works well for ECS pattern)
  • Delete projects
  • Overall UI improvements

Other work I have planned for the future include:

  • Javascript wrapper for the engine for people who want to use the engine in a custom game but do not want to use the Elm language
  • Dedicated documentation and examples site

Feel free to let me know if any of these are a priority or if you want other features.


Ask on the community forum.  You can also create an issue on the github page.

Development log