Back to Projects

Dolkara Editor

A desktop-native level editor for designing retro-style 2D games that run on microcontrollers.

Tech Stack

JavascriptReactTauriRustZustandViteCanvas API

Overview

Dolkara Editor is a full-featured game authoring tool designed for creating retro-style 2D games that run directly on microcontrollers like the ESP32. It provides a complete workflow from pixel art creation to scene design, all within the strict constraints of embedded hardware.

The editor is built with React and packaged as a native desktop app using Tauri, giving you the performance of a native application with the flexibility of web technologies.

Key Features

  • Pixel-perfect tile editor — Draw tiles on an 8×8 grid using a 16-colour scene palette
  • Visual tilemap painter — Design levels up to 64×64 tiles with grid snapping and layer support
  • Enemy designer — Create enemies with stats, movesets, looping patrol paths, and animation sequences
  • Scene management — Configure spawn points, exits, and scene-to-scene navigation
  • Hardware-aware constraints — Built-in limits that match your target microcontroller’s capabilities
  • Export pipeline — Generates JSON metadata ready for compilation to C++ via PlatformIO

Technical Highlights

Hardware-Driven Design

Every feature in the editor respects the physical constraints of the target hardware:

ConstraintLimitWhy It Matters
Palette colours16 per scene4-bit indexed colour (2 pixels per byte)
Tile size8×8 pixels32 bytes per tile at 4bpp
Max tilemap64×64 tiles4 KB memory budget per layer
Entities per scene32RAM allocation for game objects

These limits aren’t hardcoded — they’re defined in a central configuration file, making it easy to support different microcontroller profiles in the future.

Graphics Pipeline

The editor works in sRGB for accurate colour editing, then converts to RGB565 during export for the target device. Pixel data is packed at 4 bits per pixel, with two pixels sharing each byte for memory efficiency.

Architecture

Dolkara Editor
  ↓  metadata.json + scene_*.json
Backend Service
  ↓  Generate .cpp / .h files
PlatformIO
  ↓  Compile → binary
ESP32 Flash

Challenges & Learnings

Balancing flexibility with constraints — The biggest design challenge was creating an editor that feels powerful and creative while constantly enforcing hardware limits. Every feature needed guardrails that prevent users from exceeding memory budgets without feeling restrictive.

State management at scale — With tiles, entities, animations, and scene data all interconnected, keeping state consistent required careful architecture. Zustand’s slice pattern helped keep the store modular and maintainable.

Canvas performance — Rendering large tilemaps smoothly required implementing viewport culling and batched draw calls. Only visible tiles get rendered each frame, keeping the editor responsive even with complex scenes.

Roadmap

Currently working on:

  • Migrating to typescript and Next.js
  • Undo/redo system
  • Zoom and pan controls
  • Particle effects
  • Audio system integration

Future plans include a playtest mode (run the game inside the editor), multiple device profiles, and a marketplace for sharing assets and levels.

Enjoyed exploring my projects?

I'm always interested in building new things, collaborating, or discussing ideas.

Feel free to contact me using or