Iridescence Embedded Graphic Framework
A Complete Embedded Graphics Framework in Modern C++
Iridescence is a full-stack embedded graphics framework written in C++. It is far more than a low-level drawing library — it is a structured, extensible UI platform designed for serious embedded systems.
At its core, Iridescence provides:
- A high-performance renderer
- A robust view manager
- A comprehensive library of reusable UI components
The framework includes a rich set of built-in views such as:
- Text labels
- Editable text fields
- Buttons
- Image views
- Switches
- Sliders
- Selectors
- Lists
- Context menus
- Dialog views
- On-screen keyboard
- And more
Fully Programmatic UI Architecture
All graphical user interfaces in Iridescence are defined entirely in C++ code. There is no external GUI designer or code generator.
This design philosophy provides:
- Complete control over layout and behavior
- Deterministic structure without hidden tooling layers
- Reduced system complexity
- Minimal moving parts
- A smaller conceptual surface area to learn
For embedded systems — where determinism, debuggability, and maintainability matter — programmatic UI definition eliminates the friction introduced by external design pipelines.
Modular by Design
The framework is composed of independent, loosely coupled modules:
- Renderer – Responsible for drawing and hardware abstraction
- View Manager – Handles view hierarchy, layout, events, and lifecycle
- Common View Library – A comprehensive set of reusable UI components
Creating custom views is straightforward: derive from an existing view class and extend it with additional behavior. The inheritance model is clean and predictable, making the system highly extensible without sacrificing clarity.
Built for Real Embedded Development
Iridescence includes powerful features that streamline development:
- C++ closures for expressive event handling
- LiveData — a safe and deterministic mechanism for passing data to the graphics thread
- A complete, ready-to-use build system
- Elimination of thousands of lines of boilerplate setup code
You can move directly to building your application logic instead of spending time wiring infrastructure.
Engineered for Control and Simplicity
Iridescence is designed for developers who want:
- Strong architectural control
- Predictable behavior
- Clean C++ abstractions
- A UI framework that integrates naturally into embedded firmware

Object based and written in C++, Iridescence is easy to learn and easy to work with. You don't have to know any programming languages other than C++. The code is efficient and writing your own application is a breeze.

The code is modular and extensible. Just add new views by deriving them from existing ones. Provide your own code to draw the view on the screen and intercept user input.

Iridescence accepts input from a touchscreen or other pointing devices. It also offers an on-screen-keyboard. Tap, long tap, vertical and horizontal scrolling support is integrated. You can use edit fields to accept input from the user or display lists and context menus from which the user can choose. You can develop your own custom dialog views or use the standard ones we provide: confirmations, notifications, progress and text input dialog views.

The renderer we developed supports anti-aliased and non anti-aliased drawing and filling of lines, rectangles, rounded rectangles, polygons, circles, ellipses, arcs, ellipse arcs. Both integer and floating point coordinates and sizes are supported. You can use multiple clipping masks while drawing (rectangular, circular or elliptical). Blending and filling operations are supported as well.

Supports anti-aliased bitmap fonts. Your application can include as many as you need as resources. We provide tools to generate the bitmap fonts used by the graphic library starting from any TrueType font.

Iridescence contains a trove of common graphical widgets you can use: text labels, edit fields, image views, buttons, switches, sliders, check boxes, selectors, progress bars, context menus, lists, drop lists, dialog views, gauges and so on. Container views like lists and drop lists can hold other views. You can interact with all the widgets. If you want a custom view you can very easily create it.

Views can be placed at fixed coordinates on the screen or you can use the auto-layout features we included. Auto-layout will allow Iridescence size and align your views based on certain constraints you specify. This way your layout can scale automatically based on content it displays or screen size it runs on.

Iridescence supports any real time operating system. We tested it extensively with FreeRTOS and will also provide the required integration layer.

Iridescence was designed to utilize the hardware acceleration available on the STM32 micro-controllers. We prefer the STM32H7 series. We also provide the hardware JPEG decoder driver.
The STM32 port of Iridescence and embedded demos are provided with watermarking and cannot be used for any commercial project without licensing from Thornwave Labs Inc.

Include beautiful images in your graphical user interface thanks to the Iridescence PNG decoder and the STM32 hardware JPEG decoder.

Iridescence is ported to run on Linux using the SDL2 library. Get started developing without needing custom hardware. This also makes sharing the user interface you created very easily. Having multiple team members involved in developing and testing the user interface has never been easier.
We offer examples too. The PC port is free to use, no licensing required.

Go ahead and try our embedded graphics framework! You'll find it very easy to get started with and develop your own embedded graphical user interfaces. If you need help, we are here. Contact us and we can develop the application for you. Either way, you won't need an army to write a complex graphical user interface.
