#dialog #markup #game #ink #dialogue


Limited implementation of the Ink markup language

21 unstable releases (3 breaking)

✓ Uses Rust 2018 edition

0.12.3 Aug 13, 2019
0.12.2 Aug 10, 2019
0.11.7 Aug 4, 2019
0.11.3 Jul 30, 2019
0.9.3 Jul 12, 2019

#46 in Game development

Download history 56/week @ 2019-07-09 55/week @ 2019-07-16 64/week @ 2019-07-23 106/week @ 2019-07-30 129/week @ 2019-08-06 57/week @ 2019-08-13 154/week @ 2019-08-20 66/week @ 2019-08-27 96/week @ 2019-09-03 47/week @ 2019-09-10 160/week @ 2019-09-17 71/week @ 2019-09-24 50/week @ 2019-10-01

137 downloads per month


12K SLoC


Limited Rust implementation of the Ink markup/scripting language for game dialog.

Ink is a creation of Inkle. For more information about the language, see their website.

Using Ink you can easily write a story or create a dialog tree.

*   Branching is very simple[]: <>
    just start your line with an asterix or plus marker.
    Want nested choices? Add more markers!
    * *     A branching choice contains all information below it
            of the same level or higher.
            * * *       [I see.]
    * *     Pretty cool, huh?
    - -     Use gather points like this to return all nested choices <>
            to a single path.
    * *     [Cool!] -> fin

*   You can organize the story using knots <>
    and divert (move) to them, like this:
    -> next_knot

=== next_knot ===
Simple and fun.
-> fin

=== fin ===
Ink is very powerful and has a lot more features than shown here. <>
Do note that `inkling` only implements a subset of all its features. <>
Hopefully more in the future!
-> END


Currently and likely for the foreseeable future the feature set is very limited compared to Inkle's own implementation. Available features are:

  • Knots, stitches, glue and diverts, ie. basic story structure
  • Choices, of sticky and non-sticky kinds, plus fallback choices
  • Nesting choices and gather points
  • Line text alternative sequences (sequences, cycle, once-only) and conditions
  • Conditionals for displaying text and choices to user
  • Tagging of lines and choices
  • Variables in choices, conditions and text
  • Optional: De/serialization of finished stories through serde

Likely candidates for further development:

  • Variable modification in scripts
  • Includes of other files

Difficult features for which I doubt my skill level to implement:

  • Advanced flow control: tunnels and threads
  • Verifying that all story branches are complete


See the documentation or provided example for a minimum viable story processor. Enable serde de/serialization by activating the serde_support feature. This feature derives Deserialize and Serialize for all required structs.


Writing this has mostly been for fun and to create a simple game, hence the lack of features. Contributions are welcome!