Cross-platform C++20 GUI framework featuring MVVM architecture, reactive capabilities, and scalable, accelerated GPU rendering.
Brisk
Brisk is a modern, cross-platform C++ GUI framework designed to build responsive, high-performance applications with flexibility and ease.
Initially developed for a graphics-intensive proprietary project with a complex and dynamic GUI.
[!Note]
The Brisk library is currently under active development. Breaking changes may occur, and the documentation might not always be up to date. Contributions are always welcome!
Recommended reading:
➡️ Brisk Design and Feature Overview ⬅️
Documentation on docs.brisklib.com
Our other projects
Key Features
- Declarative GUI: Enables the creation of complex GUIs in C++ using a flexible declarative syntax.
- Stateful & Stateless Widgets: Supports both modes, with powerful binding for efficient state management.
- Stylesheets: Offers declarative styles to easily modify the application's look and feel.
- Hardware-Accelerated Graphics: Backends include D3D11, D3D12, Vulkan, OpenGL, Metal, and WebGPU.
- Color Processing: Supports various color spaces and linear color blending for physically accurate rendering.
- Font support: OpenType support, advanced shaping for non-European languages, ligatures, rich text formatting, SVG fonts, emojis, and rendering for RTL and bidirectional text.
- Modular Architecture: Core, Graphics, Window, GUI, Network, and Widgets modules for versatile application development.
Code Example
Component example
…
Screenshots
Modules
Core
- Compression & Basic Cryptography: Provides data compression and basic cryptographic functions, including hashing algorithms.
- Dynamic Library Loading: Loads and interacts with
.dll or .so files dynamically.
- String Manipulation: Handles UTF-8, UTF-16, and UTF-32, with text manipulation utilities.
- Stream I/O: Input/output operations for handling data streams.
- Localization Support: Basic localization and internationalization features for multilingual applications.
- Logging: Built-in logging framework for application diagnostics.
- Reflection: Supports reflection.
- Serialization: Serializes/deserializes data to/from JSON.
- App-Global Settings: Manages global application settings.
- Threading: Provides task queues for multi-threaded applications.
- Binding: Supports value binding, capable of handling multi-threaded environments.
Graphics
- Color & Colorspaces: Supports working with colors, including various colorspaces.
- Geometry: Provides 2D geometry types like
Rect, Point, Size, and 2D matrices for transformations.
- Canvas & Path: Supports drawing with paths and Bézier curves.
- SVG Rasterization: Renders SVG images into raster formats.
- Image Processing: Supports image encoding, decoding, resizing, and manipulation.
- Font Handling: Manages fonts, including loading, rendering, caching, and text layout. Supports advanced text shaping (using HarfBuzz) and SVG fonts (emojis).
Window
- Clipboard: Provides clipboard access for copy/paste functionality.
- OS Dialogs: Native dialogs for file open/save, folder selection, and message boxes.
- Display Information: Retrieves and manages display/monitor information from the OS.
- Buffered rendering : Brisk supports both buffered rendering, which enables partial repaints, and direct rendering to the window backbuffer.
GUI
- Widgets: Includes a wide variety of widgets with CSS-style flex layout.
- Style Sheets: Styles your widgets using a stylesheet system that supports property inheritance.
Viewport-relative units are supported (
vh, vw, vmin, `vmax)
- Binding Support: Data-binding between UI elements and application data. Supports transforming values using a function on-the-fly and compound values (e.g., sums of other values).
- Stateful and Stateless Modes: Choose between stateful widgets for persistent state or stateless widgets for easily rebuilding widget subtrees.
- Drag-and-Drop: Supports drag-and-drop within the GUI, with the option to attach a C++ object to represent the dragged data.
Widgets
- Widgets: Includes buttons, lists, comboboxes, toggle switches, radio buttons, progress bars, sliders, scroll boxes, checkboxes, popup buttons, tabs, tables, spin boxes, dialogs, and more. All public properties are styleable and bindable.
- Layouts: Supports CSS flexbox-style layouts.
- Text Editors: Provides text editing widgets with LTR and RTL text support.
- WebGPU: Ability to render 3D content to the window using the WebGPU API (backed by Google's Dawn), with full support for composition with the UI.
Requirements ⚙️
- C++20 Compiler: Brisk requires a C++20-compatible compiler such as MSVC 2022, Clang, XCode, or GCC.
- Dependency Management: Uses vcpkg to manage dependencies across platforms, simplifying the build process. Alternatively, you can download prebuilt binaries.
Platform Support
|
Windows |
macOS |
Linux |
| Core Functionality |
Beta |
Beta |
Beta |
| Graphics |
Beta |
Beta |
Beta |
| Window System |
Beta |
Beta |
Beta |
| Widgets |
Beta |
Beta |
Beta |
| Application Support |
Alpha |
Alpha |
N/A |
OS Support
|
Minimum version |
| Windows |
Windows 10, Windows Server 2016 |
| macOS |
macOS 11 Big Sur |
| Linux |
n/a |
Graphics Backend Support
|
Backends |
| Windows |
D3D11 and WebGPU (D3D12/Vulkan) |
| macOS |
WebGPU (Metal) |
| Linux |
WebGPU (OpenGL/Vulkan) |
Example Projects
The examples directory contains projects that showcase how to use the Brisk library.
For a minimal example, check out the brisk-helloworld repository.
Example Project Binary Size:
| OS |
Static Build, Release (Full Unicode Support) |
| Windows x64 |
10.1 MB (D3D11) |
| Linux x64 |
18.2 MB (WebGPU: Vulkan/OpenGL), stripped |
| macOS x64 |
16.5 MB (WebGPU: Metal), stripped |
These sizes do not include embedded resources (such as fonts).
Development
Brisk is in active development, and we welcome contributions and feedback from the community to improve and expand the toolkit.
The main branch contains the latest features and generally passes all built-in tests ✅. Other branches are reserved for feature development and may be force-pushed.
License
Brisk is licensed under the GPL v2.0 or later. However, for those who wish to use Brisk in proprietary or closed-source applications, a commercial license is also available. For more details on commercial licensing, please contact us at [email protected].