01overview 2D · C++ · MCU + Desktop

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.

lang
C++17
modules
23
render
RGB565+
license
Apache 2.0
image · hero
560 × 380
drop product shot / device photo
02visual editor

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 →
image · editor
720 × 440
drop editor screenshot
prefab.cpp // build a scene with the deki api
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");
03core engine

Everything you need.
Nothing you don't.

F.01

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.

F.02

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.

F.03

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.

F.04

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.

F.05

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.

F.06

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.

F.07

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.

F.08

Tweens &amp; 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.

F.09

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.

04platforms

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.

• shipping

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.

• shipping

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.

• experimental

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.

! NOTE A hardware FPU is strongly recommended on embedded targets. Math hot paths (transforms, tweens, particle modifiers, rendering) lean on native float. Soft-float runs everything, just much slower.
05hardware as components

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.

S.01
DS3231
I²C · 0x68
Real-time clock with battery backup, read and write wall-clock time from any behaviour.
S.02
u-blox NEO-6M
UART · NMEA
NMEA 0183 over UART. Fixes surfaced through IDekiGPS: lat, lon, altitude, speed, fix quality.
S.03
LSM6DS3
I²C
6-axis accelerometer + gyroscope with on-chip hardware pedometer counter.
S.04
MAX98357
I²S · class-D
Class-D mono amplifier output. Drop in a PCM source, get audible.
06next

Ready to build?

Read the editor walkthrough, browse the module catalog, or jump into the source on GitHub. Open-source under Apache 2.0.