73 lines
3 KiB
Markdown
73 lines
3 KiB
Markdown
# 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!
|
||
|
||
<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>
|
||
|