Changelog
All notable changes to Cinder. The format follows Keep a Changelog; versions follow semantic
versioning. Dates are the day the phase gate passed on Linux x86-64 (REPORT.md has the runs).
0.1.0 - 2026-11-09 #
First release: a complete Linux x86-64 engine with a playable sample. macOS arm64 is a declared
target but has not been built or run (no machine or runner was available; see REPORT.md,
Blockers).
Added #
- Build and toolchain. pixi environment pinning Mojo 1.2.0, CMake/Ninja and Python; one C11
shim
libcinder_nativeover pinned submodules (wgpu-native v29.0.1.1, SDL release-3.4.20, Jolt Physics v5.6.0 via joltc, cgltf v1.15, stb, KTX-Software v4.4.2, meshoptimizer v1.3, MikkTSpace, miniaudio 0.11.26, Dear ImGui v1.93.0-docking via Dear Bindings v0.27, Tracy v0.15.0, flecs v4.2.0 for the ECS benchmark; exact commits inREPORT.md); generated Mojo bindings with a layout test covering every struct offset and enum constant; ASan/UBSan shim build and test runner; Docker toolchain container. - Core (
cinder/core): logging 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. - Platform (
cinder/platform): SDL3 windows, event translation for keyboard, mouse, wheel, window and gamepad, surface creation for X11, Wayland and Metal, ImGui event forwarding. - Gfx (
cinder/gfx): typed wgpu layer with pooled generational handles and leak accounting, WGSL shader manager withpath:line:coldiagnostics and hot reload with last-good fallback, pipelines, command recording, swapchain with resize and loss recovery, debug draw. - Renderer (
cinder/render): frame 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. - Assets (
cinder/assets): glTF 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 andcinder-cookCLI, KTX2 textures through libktx (ETC1S/UASTC, BC7 transcode),AssetServerwith async loads, refcounts and hot reload. - ECS (
cinder/ecs): archetype 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). - Scene (
cinder/scene): diffable 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. - Physics (
cinder/physics): Jolt 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,CharacterControllerover CharacterVirtual (slopes, steps, moving platforms, pushing), ECS sync with interpolation, deterministic replay. - Animation (
cinder/anim): skeletons from glTF and.cskel, step/linear/cubic sampling, phase-synchronised 1D and 2D blend trees, crossfades, events, root motion, one job per animator. - Audio (
cinder/audio): miniaudio buses, decoded and streamed sounds, one-shots, 3D attenuation, ECS sources and a camera-following listener, headless engine for tests. - Input (
cinder/input): action/axis maps over keyboard, mouse and gamepad, dead zones, runtime rebinding, exact text save/load. - App (
cinder/app): theAppruntime andGametrait, fixed-step loop with interpolated rendering, windowed and--headlessmodes with frame readback, shared CLI options, per-phase timing and allocation accounting. - Tools (
cinder/tools): ImGui 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. - Sample game (
sample/): third-person collect-them-all with a skeletal character on the character controller, arena and Sponza levels, 32 orbiting shadowed lights, 500+ crates, 3D audio and music, pause menu with saved settings and rebindable keys, save/load, autopilot. CC0 assets fetched with pinned hashes. - Tutorial game (
examples/first_game): the code built indocs/TUTORIAL.md, run headless by its own test. - Benchmarks (
bench/): stress scene (50k instances, 2,000 bodies, 256 lights), sample game, ECS vs flecs; JSON results, adapter-scoped baselines and a 10% regression gate (tools/bench_check.py); allocation counter library and the zero-allocation test. - Documentation: README quick start,
docs/ARCHITECTURE.md,docs/THREADING.md,docs/TOOLCHAIN.md,docs/MOJO_NOTES.md,docs/RENDER_VALIDATION.md,docs/BENCHMARKS.md,docs/TUTORIAL.md, a guide per subsystem indocs/guides/, the generated API reference indocs/api/, fourteen ADRs,docs/STATUS.mdandREPORT.md.
Quality gates #
- Every public symbol has a docstring (
pixi run api-docs-check, part ofpixi run test) and every code name quoted in the guides exists (pixi run docs-check). - A pre-release review of every public function fixed about 60 defects across all subsystems,
each with a test (
REPORT.md, section 5).
Known limitations #
-
Only the first directional light is used.
-
Not built or run on macOS; golden images exist for lavapipe only; the section 8 budgets are recorded on lavapipe, not met on reference hardware (none available).
-
The sample's Sponza level loads source glTF textures and starts in more than two seconds.
-
KTX-Software's vendored allocator mismatch is tolerated under ASan (
alloc_dealloc_mismatch=0); seeREPORT.md. -
Built-in components are not
SceneComponents, so the inspector edits game-registered types only.