← In development
06 / Retained-mode UI framework

Penumbra

Penumbra is a retained-mode UI framework built from first principles for Dawn, Pharos, and future Umbra tools. It provides the window, rendering, layout, interaction, and widget foundations while leaving themes and product identity to each application.

Technology
C++20 / SDL3 / UI systems
Status
Working prototype
The challenge

Developer tools should not inherit their middleware’s identity.

Immediate-mode middleware makes tools fast to prototype but imposes a recognizable visual ceiling. A first-party editor suite needs sharper text, intentional layout, deep customization, and one coherent interaction model without forcing every tool to look identical.

The approach

Own the stack, leave the aesthetic to the app.

Penumbra uses a strict downward-only stack from widgets through rendering to SDL3. Its working prototype has been expanded through real consumers, adding layout and interaction primitives, application-owned frame and lifecycle handling, backend bridges, and a Nyx application path.

Inside the project

What it does.

  1. 01

    Retained widget trees with measure, arrange, interaction, and draw passes

  2. 02

    SDL3 platform and rendering boundaries with logical-pixel DPI handling

  3. 03

    Boxes, text, input, scrolling, split panels, and editor-focused controls

  4. 04

    Application-owned root trees and widget lifecycle dispatch

  5. 05

    Working bridges for Chaos, Cosmos, Nyx, and native widget composition

Design principles

How decisions
get made.

Apps own their identity

Penumbra exposes styleable primitives without imposing a built-in visual theme.

Layers only call downward

Widgets, rendering, and platform code have explicit ownership and dependency boundaries.

Built against real tools

Dawn and Pharos expose missing framework capabilities more effectively than a synthetic widget catalogue.

See the work

Penumbra

Follow the prototype
Next projectNox