Tiny enough
for an MCU.
A lightweight modular C++ 2D engine. Render to an LCD, run on a Windows desktop with SDL3, or skip rendering entirely and use it as a headless component framework for tools, services, and data loggers. The renderer is just another optional module.
A C++ prefab editor for embedded targets.
Edit prefabs visually with a multi-select hierarchy, reflection driven inspector, asset browser, and a build panel that flashes firmware straight to your board.
Tour the editor →auto* player = new DekiObject("Player"); prefab.AddObject(player); auto* sprite = player->AddComponent<SpriteComponent>(); sprite->sprite.guid = "player.dtex"; // AssetRef, resolved on Awake sprite->tint_color = {255, 255, 255, 255}; auto* anim = player->AddComponent<AnimationComponent>(); anim->PlayAnimation("idle");
Everything you need.
Nothing you don't.
Components with reflection
DekiObject hierarchy with DekiComponent (data) and DekiBehaviour (Awake / Start / Update). Properties tagged with DEKI_EXPORT drive the inspector, MessagePack serialization, and asset auto-resolution.
Visual editor
Dear ImGui + SDL3 + OpenGL prefab editor with multi-select hierarchy, inspector, asset browser, console, profiler, and full undo / redo via a command pattern that merges continuous edits.
Hot reload
Edit a C++ component, focus the editor, and HotReloadService rebuilds the module and plugin DLLs and reloads them in place. No editor restart, no scene reload.
Software renderer
A single QuadBlit pipeline outputs RGB565, RGB565A8, RGB888, and ARGB8888. Pick the format per target. Dirty rectangle tracking keeps partial display updates cheap on battery-powered boards.
Embedded + desktop
Windows desktop via SDL3 and ESP32 via ESP-IDF + LovyanGFX + FreeRTOS. Platform setup lives in dedicated modules so your application code is unchanged across targets. An STM32 integration is in place as a starting point.
Modules as DLLs
Every module ships as its own standalone shared library, never baked into the engine core. Skip the modules you do not need: run with no rendering, no input, no audio. Just the lifecycle.
Asset pipeline
Custom binary formats: .dtex textures (2DTX header) and .prefab MessagePack scenes. GUID-based lookup, and AssetRef<T> properties resolve to live pointers during the lifecycle Awake pass.
Tweens & easings
The deki-tween module ships 31 easing functions across Sine, Quad, Cubic, Quart, Quint, Expo, Circ, Back, Elastic, and Bounce families, usable as a TweenComponent or programmatically via TweenManager.
In-editor profiler
A custom profiler driven by MSVC /Gh and /GH function-entry hooks. Hierarchy, flat, and flame-graph views, memory stats, and frame capture to PNG sequences. No external dependency.
One codebase.
Tiny boards to big screens.
Platform setup lives in dedicated modules. Swap the integration module to retarget; your application logic does not change. Display and input modules are optional: omit them for headless services and data-only deployments.
ESP32
Primary embedded target. Integration is against ESP-IDF itself, so
any ESP32 variant the SDK supports is in scope. The
deki-esp32-integration and
deki-lovyangfx-integration modules cover SD, memory,
display, and touch; the full editor pipeline runs through to
hardware.
Windows desktop
SDL3-based window, input, and filesystem via
deki-sdl3-integration + deki-desktop-integration.
Used by the editor and any desktop preview of a project.
STM32
Starter integration. The plugin shape is in place but only a TimeProvider is wired up today. APIs land first on ESP32 and follow on STM32. Expect rough edges and missing pieces.
float. Soft-float runs everything, just much
slower.
Sensors in the scene tree.
Provider interfaces (IDekiRTC, IDekiGPS,
IDekiIMU, IDekiAudio) live in the engine.
Chip-specific components implement them and slot into a prefab like
any other component, configured in the inspector.
IDekiGPS: lat, lon, altitude, speed, fix quality.Ready to build?
Read the editor walkthrough, browse the module catalog, or jump into the source on GitHub. Open-source under Apache 2.0.