ink/README.md
2026-04-21 14:40:40 -06:00

73 lines
3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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_, _Heavens Vault_, and _Overboard!_.
This project aims provides a modern, highperformance 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 stackbased virtual machine designed for predictable performance
- Zeroallocation execution paths where possible
### Ease of Integration
Ink should be trivial to embed in any engine or toolchain. This implementation is designed to be:
- **Languageagnostic** — usable from C, C++, Rust, Zig, C#.
- **Engineagnostic** — simple to integrate into Unity, Unreal, Godot, or custom game engines.
- **Buildsystem 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 commandline 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!
<p align="center">
<a href="https://www.buymeacoffee.com/haxolotl">
<img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" height="50" />
</a>
</p>