START HERE

A Rust-powered 2D + 3D game engine with a native visual editor, the Decay gameplay language, and responsive Weave UI.

Sindri Engine is a from-the-foundation rebuild of the original Sindri. It is built around one runtime model, one scene format, one asset pipeline, and one renderer targeting native desktops and WebGPU browsers. Games are meant to be authored through the editor, Decay, and Weave; Rust is the implementation language underneath rather than a requirement for ordinary gameplay work.

Status: pre-alpha and under active development. Public APIs, Decay, Weave, editor workflows, and serialized formats may change while the engine is proven through real games.

The authoring model

Sindri is deliberately more than a Rust framework. Its primary authoring stack is developed together:

                 Sindri Editor
                      |
              live World / Scene
               /             \
          Decay               Weave
        gameplay                UI
               \             /
                 Sindri Engine
                      |
                     Rust

The goal is that somebody can build and ship a Sindri game without needing to understand the Rust implementation underneath.

What Sindri is trying to be

Sindri is not trying to win a feature-count contest with mature engines. The goal is a coherent engine and authoring environment that is pleasant to build games with and difficult to accidentally lie about.

Games prove the engine

Sindri is developed vertically: runtime capability, editor authoring, Decay/Weave access, and a real project evolve together where a feature applies.

The exact proof status for each capability lives in docs/parity.md, and the detailed evidence lives in docs/capabilities.md.

Decay

Decay is Sindri's Rust-inspired, statically typed gameplay language. The language implementation lives in its own workspace and is engine-agnostic; sindri-decay is the one-way binding layer that exposes Sindri's world and host APIs.

script Player {
    @export
    var speed: number = 6.0;

    fn update(dt: number) {
        let movement = Input.axis("ArrowLeft", "ArrowRight");
        this.transform.position.x += movement * speed * dt;
    }
}

Decay now goes well beyond isolated callbacks and stringly host calls. Current language and Sindri integration include:

A misspelled host member, wrong event payload, invalid script relationship, or incompatible type should be caught as a Decay diagnostic rather than becoming a mysterious runtime fallback.

Decay intentionally does not inherit Rust's ownership, borrowing, lifetimes, unsafe, or systems-programming machinery. Rust inspires the syntax, static typing, and tooling quality; Decay remains focused on gameplay.

See decay/LANGUAGE.md, docs/scripting.md, and docs/decay-direction.md.

Weave

Weave is Sindri's responsive UI/presentation system. It exists so game interfaces do not have to become piles of viewport-specific coordinates or gameplay code manually rearranging rectangles.

Weave presentation rules resolve into ordinary Sindri UI data, allowing one authored interface to recompose for different viewport shapes while remaining part of the same scene/runtime model. The system is developed alongside Decay and the editor rather than as a separate UI stack bolted on afterward.

The responsive showcase and current language/limitations are documented in docs/weave.md.

What works today

Sindri is pre-alpha, but the working surface is already broad. Highlights include:

Engine and runtime

Editor

The native editor works on the same scene/world model as the runtime. It supports scene/project browsing, hierarchy authoring, transforms and component editing, asset selection, sprite-sheet slicing and animation preview, Decay @export fields, undo/redo, Scene and Game views, camera navigation and selection, Play/Pause/Stop against the real engine lifecycle, console output, preferences/layout persistence, and asset/script hot reload.

This summary is intentionally not exhaustive. docs/capabilities.md is the evidence-based inventory; docs/parity.md records Engine / Editor / Decay / proof status and the important gaps against a conventional game-engine baseline.

Architecture

Sindri keeps engine concerns in focused Rust crates while Decay remains its own workspace.

                         Sindri Editor
                              |
                       live World / Scene
                      /       |        \
                 Assets    Rendering   Decay host
                    |          |           |
              sindri-assets  sindri-render  sindri-decay
                               |           |
                           sindri-gpu   decay-runtime
                               |           |
                              wgpu      decay-ir
                               |           |
                       Native / Web    decay-semantic
                                           |
                                      decay-syntax

The important boundary is intentional:

decay/*                 knows the language, not Sindri
crates/sindri-decay     knows both halves
sindri engine crates    do not depend on Decay

That keeps the language embeddable and prevents Sindri implementation details from leaking into Decay core. The renderer-independent engine core likewise has no dependency on a window, GPU, browser, editor, physics engine, scripting runtime, or async executor.

Native and web

The web is a first-class runtime target rather than a separate edition. Native and browser hosts share the same engine concepts, scene extraction, assets, GPU abstraction, renderer, Decay gameplay model, and Weave presentation policy.

Static WebAssembly/WebGPU exports are exercised through repository projects and browser smoke tests. A browser needs WebGPU support.

Important gaps

Sindri is still pre-alpha. Among the meaningful gaps and incomplete areas are:

For the current outside-in audit rather than an aspirational feature list, see docs/parity.md.

Try the editor

The workspace currently requires Rust 1.95.

cargo editor                      # the welcome window, optimised
cargo editor games/platformer     # straight into a project

cargo editor is an alias for an optimised, incrementally built profile: the editor plays a game about as fast as a release build does. Working on the editor itself, cargo run --package sindri-editor builds faster after an edit and still optimises every dependency.

The repository includes games, feature examples, fixtures, deterministic captures, and regression tests that exercise the same implementations used by the editor and runtime.

Development

Engine/editor workspace:

cargo fmt --all --check
cargo clippy --workspace --all-targets --all-features
cargo test --workspace --all-features
cargo check --workspace --all-features --target wasm32-unknown-unknown

Decay is intentionally a separate Cargo workspace:

cd decay
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace

For changed Decay scripts, use the typed project-aware preflight rather than treating syntax alone as proof:

cargo run --quiet --package decay-lsp -- --check path/to/script-or-project

Repository guidance and the complete required checks live in AGENTS.md.

Documentation

Start here:

Subsystem contracts live under docs/ beside the code they describe.

Why Sindri?

Sindri's central bet is that a Rust engine does not have to make Rust the everyday game-authoring experience.

The editor owns the world. Decay owns gameplay. Weave owns responsive presentation. Rust provides the engine underneath. Those surfaces are developed together and proved through actual games rather than treated as independent checkboxes.

The project has a simple rule: working code beats plausible architecture. A capability is not complete because an API exists or an editor control is visible; it is complete when the relevant authoring surface can use it and a real project proves it.

Contributing

Read CONTRIBUTING.md for checks, conventions, and commit style, and CODE_OF_CONDUCT.md for participation guidelines. The dependency policy is documented in docs/dependency-policy.md.

Support Sindri

Sindri is an independent, open-source game engine developed in my spare time. If you'd like to support its continued development, you can buy me a coffee.

Contributions, feedback, and GitHub stars are also appreciated.

License

Dual-licensed under either the Apache License 2.0 or the MIT license, at your option.

Unless you state otherwise, any contribution intentionally submitted for inclusion in Sindri is dual-licensed as above, with no additional terms or conditions.