A lightweight C++ UI library that renders HTML/CSS-like documents for games and applications, with full control over rendering and input.
RmlUi is a C++ user interface library that renders HTML and CSS-like documents to create dynamic interfaces for games and applications. It solves the need for a performant, customizable UI solution that integrates directly into C++ projects without relying on a full web browser engine. Developers can style and layout interfaces using familiar web standards while maintaining full control over rendering and input.
C++ developers building games, real-time applications, or tools who need a lightweight, embeddable UI library with HTML/CSS-like styling and data binding capabilities.
RmlUi offers a unique blend of web standards compliance and native C++ performance, allowing developers to create rich interfaces without the overhead of a browser engine. Its extensible architecture and full control over the render loop make it ideal for integration into existing game engines and applications.
RmlUi - The HTML/CSS User Interface library evolved
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Generates vertices, indices, and draw commands for custom rendering, avoiding heavyweight browser engines and keeping performance high for real-time applications like games.
Allows plugging in custom renderers, font engines, and file systems, with optional Lua scripting support, making it adaptable to existing C++ projects.
Synchronizes application data with UI elements using a model-view-controller pattern, enabling dynamic interfaces without manual updates, as shown in the hello_world example.
Runs on multiple platforms including Windows, Linux, macOS, Android, iOS, and consoles like Switch, with backends for common renderers like OpenGL and Vulkan.
Does not aim for full CSS/HTML compliance to prioritize lightness, which means missing some web features and requiring adjustments for developers expecting browser-like behavior.
Requires implementing render and system interfaces or integrating backends, which can be time-consuming, especially for custom engines without pre-built support.
Defines no internal styles, forcing developers to write all RCSS from scratch for basic elements like inputs, as noted in the example where rml.rcss must be included for proper layout.
Some renderers, such as Vulkan, lack support for advanced features like clip masks and filters, limiting functionality depending on the chosen graphics API.