Back

Help

Exporting

The main goal of this app is to provide you a more comfortable writing experience for Twine stories. However, you can also export to markdown or raw json, if you would like to use the text in another application or game engine.

Click the Export button in the editor toolbar to download your story. There are four options:

Twine 2 / Twee 3 .twee

Exports the full story as a Twee 3 file in Harlowe format. Import it into Twine 2 to build and publish a playable game. Variable chips become live Harlowe variable references, and player choices with variable effects use Harlowe's link macro.

Markdown .md

Exports the full story tree as a single Markdown file. Each branch section becomes a heading, and player choices become hyperlinks between sections.

Raw JSON .json

Exports the raw story data as JSON. Useful for debugging, custom tooling, or creating your own export pipeline.

Export current branch .md

Exports only the branch path you are currently reading as a single linear Markdown document.

How Branches Work

The ethos behind Typewriter is that you can write an interactive story in a more linear format, focusing on one complete branch at a time, or jumping between different branches as makes sense for your writing style.

To create a branch, place the cursor on the paragraph that you want the branch created after, then click the "Branch" button in the top bar. The new branch will be created after the paragraph where the cursor is.

You can see more information about branches in the sidebar, under the branch info panel. You can also right click a branch name in the editor to edit, rename, or delete the branch.

You can also merge branches back together. Right click on a branch in the editor, and then select "Merge into..." You will then select the destination node in the story map.

To see an overview of your whole story, use the story minimap in the right sidebar.

Using Variables

You can also use variables that will be functional when you export into Twine.

Defining variables

In the Variables tab in the side panel, define your variables and choose a type: string, number, or boolean (true/false).

Referencing a variable in text

Type $ anywhere in the editor to open the variable autocomplete. Select a variable to insert a variable chip into your text. When exported, the chip becomes a live Harlowe variable reference that interpolates the current value.

Setting a variable on a player choice

Open the Branch Info panel and find the branch you want. Under each player choice there is a Variable Effects section. Click Add Effect, choose a variable, and enter the value or expression to set when the player picks that choice.

The value field accepts raw Harlowe expressions:

Variable typeExample valueWhat it does
booleantrueSets the variable to true
booleaninvertToggles the variable to its opposite
number5Sets to a number
number$score + 10Increments by 10
string"Alice"Sets to a string
string$name + " and Henry"Appends a string

How this exports to Twine

When you export to .twee (Harlowe format):

  • A StoryInit [startup] passage sets all variables to their defaults before the story begins.
  • Variable chips in text export as $variableName — Harlowe interpolates them automatically.
  • Branch choices with no effects export as standard [[Choice->Passage]] links.
  • Branch choices with effects use Harlowe's link macro so variables are set at the moment the player clicks.

Find and Replace

Use Cmd+H (macOS) or Ctrl+H (Windows/Linux) to open Find & Replace. You can search for any text across all passages and replace it with either plain text or a variable chip.

FAQ

Who is this for?

Writers and game developers who want a clean place to write branching stories before exporting them to a game engine like Twine or Ren'Py. Typewriter is a writing tool, not a deployment platform.

Where is my data stored?

Your data is stored in your browser's IndexedDB — no cloud storage, no external database, no cookies. Your data fully belongs to you. Make sure to back up your stories regularly!

Is there any AI in this?

The app itself has no AI features. Claude Code was used to help build it, but your writing is entirely your own.

How do I report a bug?

Open an issue on the GitHub project.