Skip to content


In programming terminology, a variable is a container for a value that can change. In Twine, a variable is a way of storing and acting on data of some sort. Anything from a number to a series of characters can be stored in a variable. Unlike other code or text in a Passage, variables most commonly start with either the dollar sign ($) or the underscore (_) in the Harlowe and SugarCube story formats. (In Chapbook, variables are part of a 'vars section'.)

Story Variables (Harlowe and SugarCube)#

Once created, story variables in Twine can be accessed from any passage at any time. They are globally accessible to all functionality everywhere.



Variables are translated into their values when used by themselves in a Passage. To display their value, they can simply be included as part of any other text.


The value of the variable is $numberVariable.

Temporary Variables (Harlowe and SugarCube)#

It can often be useful to work with values in a more controlled manner. For this purpose, temporary variables can be used. They are locally accessible. They only exist while the current passage is shown. They start with an underscore (_).



Temporary variables can also be used to display their values with other text like Story Variables.


The value of the variable is _numberVariable.

Differences in Chapbook#

Chapbook handles variables differently. Instead of variables needing to start with the dollar sign $ or an underscore, _, Chapbook also allows variable names to start with upper or lowercase letters as well.


strength: 18
$dexterity: 7
_constitution: 14

Differences in Snowman#

Snowman uses JavaScript variables. It provides three global variables: window.story (for working with the story), window.passage (for working with the current passage), and s (as a way to access values across passages).


s.strength = 14;