Functional ECS
Composition over inheritance. Factory functions return records of methods that close over local state. No this, no classes.
Deterministic
Integer-tick time, seeded mulberry32 RNG, sorted iteration. Same seed plus same actions equals byte-identical replays.
Pixel-perfect
Two-stage rendering on a logical canvas. Five camera modes — letterbox, fit, extend, expand, stretch — and one-pixel scaling.
Headless-testable
bun test against harness(). No DOM, no canvas, no browser. Replay JSON files double as integration fixtures.
Action-first input
Keyboard, mouse, gamepad unified through bindings. Replays portable across rebindings — actions are the recording, not keys.
Result-typed
@f0rbit/corpus Result<T, E> at every fallible boundary. Zero throws in engine code. The renderer edge wraps PIXI in try_catch.