# Ink Ink is a narrative scripting language developed by [Inkle](https://www.inklestudios.com/), designed to allow writers and game designers to express branching narrative in a natural way. It has powered many of Inkle's titles such as _80 Days_, _Heaven’s Vault_, and _Overboard!_. This project aims provides a modern, high‑performance implementation of Ink aimed at game engines and custom tooling pipelines, imposing minimal runtime overhead, and even usable in constrained environments. > 📝 **Experimental** This project is in an early, unstable state. Breaking changes are expected. Only use in production if you're super rad. ## Installation ### Build From Source This project tracks the latest release of the Zig compiler (0.16.x), and requires LLVM 21.x to generate its code. ``` git clone https://codeberg.org/haxolotl/ink cd ink zig build -Doptimize=ReleaseSafe ``` ## Project Goals ### Performance The canonical Ink implementation is written in C#, and integrates well for Unity. Unfortunately, it is not optimized for software developed in unmanaged languages, such as C or C++, giving rise to competing runtimes such as JBenda's wonderful [inkcpp](https://github.com/JBenda/inkcpp). Our goal is to build the **fastest, most efficient Ink compiler and runtime**, with: - A compact, pre-compiled binary format - A stack‑based virtual machine designed for predictable performance - Zero‑allocation execution paths where possible ### Ease of Integration Ink should be trivial to embed in any engine or toolchain. This implementation is designed to be: - **Language‑agnostic** — usable from C, C++, Rust, Zig, C#. - **Engine‑agnostic** — simple to integrate into Unity, Unreal, Godot, or custom game engines. - **Build‑system friendly** — self-contained within its generated library file, without any dependencies. ### Developer Tooling Writers and developers deserve tooling that naturally fits into their workflow. This implementation aims to support: - Better error messages and reporting - Fast command‑line compilation - Binary introspection and runtime tracing - AST and IR introspection - Integration hooks for editor extensions and custom pipelines (coming soon!) ## What is supported? This implementation currently only supports the minimum language features to be a usable compiler and runtime for most projects. The following features are not currently supported, but planned for the near future: - Tags - Tunnels - Lists - Sequences ## When will there be a stable release? Our benchmark for when the first stable release can be tagged is the ability to compile and run [The Intercept](https://github.com/inkle/the-intercept), a sample of a real-world Ink story created by Inkle. ## Support If you like this project and want to support its continued development, consider buying me a coffee. This code ain't gonna write itself!