Narrata is a universal narrative engine built in Rust.
Narrata provides a language-independent runtime and data model for building interactive narratives, dialogue systems, visual novels, quests, cutscenes, branching stories, and other narrative-driven experiences.
At its core, Narrata represents narrative as executable state. Characters, events, conditions, choices, variables, transitions, and world state are modeled explicitly and executed by a deterministic runtime rather than being tied to a specific game engine or programming language.
The engine is designed to separate narrative logic from presentation and host-engine behavior. The same narrative can therefore be authored once and embedded into different environments, including Unity, Bevy, custom game engines, web applications, and desktop software.
Narrata is implemented in Rust and exposes portable interfaces for languages and runtimes such as C, C++, C#, JavaScript, WebAssembly, and others.
Rather than requiring every project to build its own dialogue system, branching logic, quest state, save-state handling, and narrative execution layer, Narrata aims to provide a shared foundation for interactive storytelling.
Its goal is broader than visual novels. Narrata is designed for any system where narrative emerges from evolving state, events, conditions, choices, and consequences.
One narrative model. Any engine.
Product goals, numbered decisions, architecture, target contracts, the REZICS integration and research are indexed in docs/README.md. Work runs as Goals listed in GOAL.md; completed Stage 1–5 plans live in archive/.
Commands run through Task (task --list); tools and checks are listed in
the toolchain page.
The new node profile runs content, decisions and parameterized subgraphs without a dialogue VM or mandatory SceneState. Three independently authored content packages form the included story.
rustup target add wasm32-unknown-unknown
npm --prefix examples/gamebook-web ci
npm --prefix examples/gamebook-web run prepare:runtime
npm --prefix examples/gamebook-web run devOpen http://127.0.0.1:4173/ to read, inspect the graph, explore branches and save/restore a journey.
See the Web reader, the three content packages,
and ADR 0011 for format boundaries and current limits.
Run task check:r1 for the new Rust/Wasm/browser gate. Existing Stage 1–5 formats remain supported.
The deterministic Flow/Statechart runtime, migration system, local time-travel store, and portable protocol bindings are implemented as a Rust 1.98 workspace. Run the complete local gate with:
task check:g5Validate the checked-in canonical Program vector or replay both conformance stories:
cargo run -p narrata-cli -- program validate fixtures/codec/program-v0.cbor.hex
cargo run -p narrata-cli -- conformance fixtures/conformanceInspect or apply an explicit Program migration with:
cargo run -p narrata-cli -- migrate inspect old-program.hex new-program.hex --descriptor migration.json
cargo run -p narrata-cli -- migrate dry-run saves.db --source old-program.hex --target new-program.hex --descriptor migration.json --commit commit:...narrata-store now also provides capability negotiation, commit-before-dispatch, a monotonic Effect
ledger, recorded query recovery, rewind barriers, compensation links, declarative Scene reconcile,
and atomically published Compound Saves. narrata-store-sqlite persists the same checked model.
See Stage 5 for frozen-save compatibility,
migration, C/C#/Wasm/TypeScript and debugger contracts; see
Stage 4 for the implemented Statechart subset and
Stage 3 before connecting commands or host
snapshots. Narrata does not promise generic exactly-once delivery: a host must supply a stable
idempotency key, transactional API, or explicit unknown-outcome resolution.
Except where otherwise noted, REZICS is licensed under the
GNU Affero General Public License v3.0 only (AGPL-3.0-only).
Copyright © 2026 Rezics Inc.
Third-party components remain under their respective terms; see Third-party notices. The AGPL grants copyright permissions only and does not grant trademark rights in the REZICS name, logos, or other brand identifiers.