Linux x86-64
Built and tested
45 test programs pass (2026-11-09). Three consecutive full test runs, identical results, no flakes, also under ASan and UBSan where noted, on X11 and Wayland for the windowed tests.
Test resultsCinder 0.1.0 runs on Mojo 1.2.0 over a single C11 shim around wgpu-native, SDL3, Jolt, miniaudio, cgltf, KTX-Software, meshoptimizer, Dear ImGui and Tracy. It has a clustered forward+ renderer, an archetype ECS, physics, skeletal animation, 3D audio, tools and a playable sample game, all verified on Linux x86-64.
Apache-2.0 · engine commit 47c9352 · docs imported 2026-11-09

Straight from the engine's deliverable report and changelog. Nothing here is claimed beyond what those record.
Built and tested
45 test programs pass (2026-11-09). Three consecutive full test runs, identical results, no flakes, also under ASan and UBSan where noted, on X11 and Wayland for the windowed tests.
Test resultsNot built yet
A declared target with the Metal surface path written, but it has not been built or run: no Apple Silicon machine or runner was available. Every phase gate is half open until it is.
BlockersMeasured on a software rasteriser only
The only GPU available was Mesa lavapipe, which renders on the CPU. Budgets are recorded there as regression baselines, not met on reference hardware.
How it is measuredMojo above, C below, one flat C11 ABI between them. Every C callback writes fixed-size events into lock-free rings that Mojo drains once per frame on the main thread, so Mojo never runs on a C thread. Bindings are generated and checked field by field against the C compiler.
sample/ and your gamea Game run by the Appcinder/app · cinder/toolsruntime, fixed-step loop, headless mode, debug overlayrender physics anim audio input assets scenethe subsystemscinder/ecs · cinder/gfx · cinder/platformarchetype ECS, typed wgpu layer, SDL3cinder/coremath, jobs, handles, arenas, log, profilecinder/ffigenerated bindings, layout-testedlibcinder_nativethe C11 shim and vendored libraries| Library | Role | Pin |
|---|---|---|
| Mojo | the engine language | 1.2.0 (build 2016d0cd) |
| wgpu-native | WebGPU over Vulkan (Metal declared), shaders in WGSL | v29.0.1.1 (webgpu-headers 673658b) |
| SDL3 | windows, input, gamepads, surfaces | release-3.4.20 |
| Jolt Physics | rigid bodies and CharacterVirtual, through joltc | 2bbcf73 / v5.6.0 |
| cgltf | glTF 2.0 import | v1.15 |
| KTX-Software | KTX2 textures, BasisU ETC1S/UASTC, BC7 transcode | see report |
| meshoptimizer | mesh optimisation and LODs | see report |
| miniaudio | buses, streams, 3D audio | 0.11.26 |
| Dear ImGui | debug overlay, through Dear Bindings | v1.93.0-docking / v0.27 |
| Tracy | profiling zones, started on demand | see report |
Each has a guide (ownership, setup, threading rules, pitfalls) and an API reference generated from its docstrings: 1306 symbols in all.
cinder/corelogging with sinks, assertions, arena and generational handle pools, rings, SIMD vector/matrix/quaternion math, work-stealing job system with per-frame graphs, time, filesystem, PNG images, Tracy profiler zones, heap cells with stable addresses.
cinder/platformSDL3 windows, event translation for keyboard, mouse, wheel, window and gamepad, surface creation for X11, Wayland and Metal, ImGui event forwarding.
cinder/gfxtyped wgpu layer with pooled generational handles and leak accounting, WGSL shader manager with path:line:col diagnostics and hot reload with last-good fallback, pipelines, command recording, swapchain with resize and loss recovery, debug draw.
cinder/renderframe graph (ordering, culling, transient aliasing, external resources, DOT dump), clustered forward+ lighting, four cascaded shadow maps and a spot/point shadow atlas, GPU-baked image-based lighting, GTAO, physically based bloom, AgX and ACES tone mapping, exposure, 4x MSAA, FXAA, GPU skinning and morph targets, instancing, meshoptimizer LODs, debug views; zero heap allocations per steady-state frame.
cinder/assetsglTF 2.0 import (files, GLB, data URIs, KHR_texture_transform, KHR_materials_emissive_strength, skins, animations), cooked mesh/material/clip/skeleton formats, incremental content-hash cooker and cinder-cook CLI, KTX2 textures through libktx (ETC1S/UASTC, BC7 transcode), AssetServer with async loads, refcounts and hot reload.
cinder/ecsarchetype world with tightly packed columns, typed queries with with/without filters and cached query specs, change ticks, command buffers, parent/local/world transforms with propagation, access-declared schedules running stages in parallel on the job system; measured within 10% of flecs (ADR-0011).
cinder/scenediffable text format with exact floats and a binary format, a component registry with versioned migrations, the ECS to render-scene bridge, glTF spawning into the world with collision triangle extraction.
cinder/physicsJolt world with bit layers, box/sphere/capsule/cylinder/convex hull/mesh/scaled shapes, static/kinematic/dynamic bodies, sensors, continuous collision, queued contact and activation events, ray and shape casts, CharacterController over CharacterVirtual (slopes, steps, moving platforms, pushing), ECS sync with interpolation, deterministic replay.
cinder/animskeletons from glTF and .cskel, step/linear/cubic sampling, phase-synchronised 1D and 2D blend trees, crossfades, events, root motion, one job per animator.
cinder/audiominiaudio buses, decoded and streamed sounds, one-shots, 3D attenuation, ECS sources and a camera-following listener, headless engine for tests.
cinder/inputaction/axis maps over keyboard, mouse and gamepad, dead zones, runtime rebinding, exact text save/load.
cinder/appthe App runtime and Game trait, fixed-step loop with interpolated rendering, windowed and --headless modes with frame readback, shared CLI options, per-phase timing and allocation accounting.
cinder/toolsImGui debug overlay with frame-time graph, entity inspector editing through the scene registry, asset browser, render-graph view and log console; Tracy client with manual lifetime.
A third-person collect-them-all built only on public engine APIs: a skeletal character on the character controller with an idle, walk and run blend tree, arena and Sponza levels, 32 orbiting shadowed point lights plus a sun and IBL, 500+ dynamic crates, 3D effects and music on buses, a pause menu with saved settings and rebindable keys, save and load, and an autopilot that tests and benchmarks drive headless.
tools/in_container.sh pixi run sample # windowed: WASD/Space, Esc for the menu
tools/in_container.sh pixi run sample -- --level sponza # the Khronos atrium
tools/in_container.sh pixi run sample-headless # offscreen autopilot runAll screenshots are real engine output, rendered headless on Mesa lavapipe at 800×500.
16 Khronos glTF models pass golden-image tests (SSIM >= 0.985), under 4x MSAA, AgX, bloom, GTAO, cascaded sun shadows and a procedural sky IBL. These are the committed Linux references, each reviewed against Khronos's own render.Render validation
The tutorial builds a red ball you push around a lit ledge to knock six crates off the edge. Every snippet is real: the finished code lives inexamples/first_game/ and a test compiles it and runs it headless.
var config = AppConfig(String("First game"), 1280, 720, False)
config.audio = False
var rest = parse_app_args(args, config)
var app = App(config^)
var game = FirstGame()
while app.run_frame(game):
frames += 1
if max_frames >= 0 and frames >= max_frames:
break
game.shutdown(app)
_ = game^
_ = app^The whole entry point loop: parse engine options, build the App, run frames, then end the game before the app.
Reference hardware (an RTX 3060-class Linux machine and an Apple M2) was not available. Every number below comes from Mesa lavapipe rendering 1080p on the CPU inside Docker, and serves as a regression baseline with a 10% gate, not as a statement about the GPU budgets.
| Budget | Measured (lavapipe host) | Status |
|---|---|---|
| Sample p99 ≤ 16.6 ms at 1080p high | 294.6 ms median, 356.9 ms p99 (CPU rasterised) | Unmeasured on reference hardware |
| Stress scene ≥ 60 fps (50k instances, 2,000 bodies, 256 lights) | 721.3 ms median, 785.0 ms p99 (CPU rasterised) | Unmeasured on reference hardware |
| Physics step ≤ 4 ms, 2,000 bodies | 0.73 ms median, 2.34 ms p99 | Met on this CPU |
| Cold start ≤ 2 s | stress 0.97 s, sample arena 1.55 s; Sponza above 2 s | Met for arena and stress; Sponza not met |
| Zero allocations per steady-state frame | 0 Mojo allocations over 60 frames | Met, asserted by a test |
| Mojo ECS within 10% of flecs | ratios 0.91, 1.00, 0.98 over three runs | Met; the Mojo ECS is kept |
Mojo moved fast between 1.0 and 1.2, so models misremember it. Cinder's docs ship in forms an agent can load directly, plus a brief that tells it what the engine's own notes learned the hard way.
An AGENTS.md / CLAUDE.md with build commands, the container workflow, layering rules, the zero-allocation rule and Mojo 1.2.0 pitfalls.
An index of every page with summaries, and the full text in one file for long-context models.
Every page as raw Markdown at its path plus .md; pages, headings and every API symbol as JSON.
Read-only search, page and symbol tools over Streamable HTTP.