Sindri is a 2d game engine, editor workspace, and local AI-assisted tooling stack written in Rust. The AI lives inside the workspace as a peer — every action lands as a reviewable proposal, so you stay in control.
Batched sprites, shapes, tilemaps, particles, text, and lighting on top of wgpu. Offscreen rendering and screenshots included.
wgpuRigid bodies, colliders, triggers, and collision callbacks wired into the world and exposed to scripts.
rapier2dEntity-attached scripts with lifecycle callbacks and deferred world mutation. Save the file, keep playing.
lua 5.4 · mluaAI-assisted entity and scene actions through Ollama. Runs on your machine — no external API required.
ollama · local-firstWorld + EntityId, immutable and mutable queries, built-in gameplay components, and a fluent EntityBuilder.
world · entitybuilderScenes save and load through the editor, with undo/redo commands and editor/runtime parity tracking.
.sndr scenesCamera zoom, bounds, world/screen conversion, typed grids, and A* pathfinding out of the box.
camera2d · a*Audio through rodio; frame-accurate input with action mapping for keyboard and beyond.
rodioThe assistant is a peer collaborator with full agency over the project — it can stage scenes, scripts, and components. But nothing touches your project until you accept it. No cloud, no API key: everything runs locally through Ollama.
Make the drone follow the beacon and play a chime when it gets close.
you · cmd-kThe goal is not just to render sprites. The goal is to make gameplay iteration, scripting, tooling, and editor workflows feel cohesive. Rust is the right layer for the parts you write once and lean on forever; Lua is the right layer for the gameplay you rewrite twenty times a day.
crates/ sindri/ engine core sindri-server/ local engine/editor http server sindri-ai/ ollama client + ai action types editor/ tauri 2 + react editor examples/ curated examples, not subsystem spam docs/ engine documentation
Lua 5.4 through mlua, with lifecycle callbacks, deferred world mutation, collision and trigger callbacks, and physics, camera, animation, and tilemap helpers. Scripts hot-reload while the game runs.
$ cargo run -p hello_sindri $ cargo run -p scripted_asteroids
Sindri Pixel is the companion sprite and pixel-art editor — a local-first Tauri app that shares the engine's workspace, keyboard muscle memory, and AI-as-peer philosophy. Draw sprites, stack layers, animate frames, then hand them straight to your Sindri scenes.
Stack layers with per-layer visibility and opacity, then composite down when a sprite is ready.
A timeline of frames with per-frame duration — scrub, set the loop, and preview the animation live.
Mirror strokes vertically, horizontally, or both, and preview seamless tiling as you draw.
Build and reuse color palettes; the eyedropper and swatches keep your ramp one click away.
Cmd-K jumps to any tool, layer, or action — the same muscle memory as the engine workspace.
A built-in tutorial mode walks through drawing and animating — from following along to authoring your own.
Sindri Pixel carries the engine's peer model into the canvas. The AI stages changes as reviewable proposals — ghosts and diffs first — and nothing repaints your sprite until you accept it. Local, through the same workspace, no external API.
Give the drone a 2-frame idle bob and a warmer palette ramp.
you · cmd-k