marrow turns skeletons and animation clips into skinning matrices. It is batch-first: one call animates N instances that share a skeleton, so you can drive tens of thousands of characters without tens of thousands of per-instance virtual calls.

  • Zero runtime dependencies, zero allocation: Pure C11, no libc beyond <math.h>. Every buffer is sized by a *_requirements() query that returns both size and alignment; you bring the allocator. Console- and fixed-budget-friendly.
  • Flat C ABI: extern "C", compiles as both C11 and C++, out-params + result codes, no SIMD types in public structs. Trivial to bind from any language.
  • Batch-first and data-oriented (SoA): The hot path fuses local → model → skinning and writes the canonical 3×4 palette directly, vectorized across instances (lane i = instance i).
  • Runtime SIMD dispatch: Scalar, SSE2, and AVX2 (+FMA, +F16C) kernels live in separately-flagged translation units. Backend selection is a small caller-owned, immutable POD value. Buffer sizes never depend on the chosen backend.
  • Safe loader: .mrw is a byte-defined little-endian format. The loader validates, then views. Truncated or corrupt input fails cleanly.
  • Two tiers, one core: A CPU runtime tier and a baked-texture GPU crowd tier share the same skeleton/clip formats, decompressor, sampler, and math.