Umbra Engine

Umbra is a lightweight game engine built from the ground up for modern 2D and 3D development. It is both a working runtime and a long-term exploration of how focused tools can grow into a coherent engine ecosystem.
- Technology
- C++20 / Raylib / CMake
- Status
- Active development
Latest development streamWorking on Custom Game Engine (C++)
Follow Umbra as engine systems move from architecture into working games, with the decisions and debugging captured live.
How do you grow an engine without growing a monolith?
Game engines often become monoliths whose tools, runtime, and platform code cannot be separated. Umbra instead asks how an engine can grow through real games while keeping each boundary explicit and each useful subsystem capable of standing on its own.
Let real games define the engine.
Games set the requirements. The first Snake milestone established the application loop, dependency injection, state and scene management, entities, 2D rendering, collision, input, and debugging. Mature pieces are extracted into independent libraries rather than rewritten in isolation.
What it does.
- 01
Application lifecycle with clear configuration and initialization hooks
- 02
Interface-led Raylib abstraction for windows, rendering, and input
- 03
Persistent and transient scenes with stack-based overlays
- 04
Type-safe dependency injection with factory, instance, and singleton lifetimes
- 05
An ecosystem of standalone logging, testing, JSON, language, and editor tools
How decisions
get made.
Modular by default
Every module is designed to be useful without requiring the entire engine.
Driven by games
Capabilities are added when a real game creates the requirement, not in anticipation of hypothetical needs.
Interfaces at boundaries
Platform and third-party implementations sit behind replaceable contracts.
