About Brisk team

We are a team that has been creating projects for developers since 2016. Our work is trusted by companies and organizations worldwide.

Our projects

KFR, modern and fast C++ DSP library

CxxDox, C++ documentation generator with minimal configuration

Who trust us

reFX
Sound theory
AIVA.AI
Acustica Audio
Neural DSP
Neurovirtual
Prismatic.art
CERN, The European Organization for Nuclear Research
Ossia Score
KrakenRF Inc.
Instituto Tecnológico de Buenos Aires
REL Inc.
Ossia (libossia)
Université de Bordeaux
Université Bretagne Sud
Celtera
EcoApi
Laboratoire d'Informatique de Robotique et de Microélectronique de Montpellier

Screenshots

Features

  • Cross-Platform: Build macOS, Linux, and Windows apps from a single codebase
  • Declarative GUI Specification
  • Stateful & Stateless Widgets
  • Powerful Value Binding
  • Styling with Stylesheets: Light and Dark themes out-of-the-box
  • Properties that work in clean C++ (no code generation required)
  • Internationalization & Localization
  • Drag-and-Drop Support in the GUI
  • Advanced CSS-like Layouts: Flex model with extended features
  • Hardware-Accelerated Graphics: Metal, Vulkan, OpenGL, D3D12, and D3D11
  • Compression & Basic Cryptography
  • Serialization to JSON
  • Font Engine with support for OpenType and non-European languages
  • Multi-threading
  • Cross-Platform OS Dialog Creation
  • Unified Clipboard Access
  • Modular Architecture: Use only the parts you need

Code examples

#include "ShowcaseComponent.hpp"
#include <brisk/gui/GUIApplication.hpp>

int briskMain() {
    using namespace Brisk;

    GUIApplication application;
    return application.run(createComponent<ShowcaseComponent>());
}

const NameValueOrderedList<TextAlign> textAlignList{ { "Start", TextAlign::Start },
                                                     { "Center", TextAlign::Center },
                                                     { "End", TextAlign::End } };

class Example : public Component {
public:
    RC<Widget> build() final {
        // rcnew Widget{...} is equivalent to std::shared_ptr<Widget>(new Widget{...})
        return rcnew Widget{
            layout = Layout::Vertical,
            new Text{
                "Switch (widgets/Switch.hpp)",
                classes = { "section-header" }, // Widgets can be styled using stylesheets
            },

            new HLayout{
                new Widget{
                    new Switch{
                        // Bind the switch value to the m_toggled variable (bidirectional)
                        value = Value{ &m_toggled },
                        new Text{ "Switch" },
                    },
                },
                gapColumn = 10_apx, // CSS Flex-like properties
                new Text{
                    text = Value{ &m_label }, // Text may be dynamic
                    visible =
                        Value{ &m_toggled }, // The Switch widget controls the visibility of this text widget
                },
            },

            // Button widget
            new Button{
                new Text{ "Click" },
                // Using m_lifetime ensures that callbacks will be detached once the Component is deleted
                onClick = m_lifetime |
                          [this]() {
                              // Notify bindings about the change
                              bindings->assign(m_label) = "Updated text";
                          },
            },

            // ComboBox widget
            new ComboBox{
                Value{ &m_textAlignment },  // Bind ComboBox value to an enumeration
                notManaged(&textAlignList), // Pass the list of name-value pairs to populate the ComboBox
            },

            // The Builder creates widgets dynamically whenever needed
            Builder([this](Widget* target) {
                for (int i = 0; i < m_number; ++i) {
                    target->apply(new Widget{
                        dimensions = { 40_apx, 40_apx },
                    });
                }
            }),
            depends = Value{ &m_number }, // Instructs to rebuild this if m_number changes
        };
    }

private:
    bool m_toggled            = false;
    TextAlign m_textAlignment = TextAlign::Start;
    std::string m_label       = "OK";
    float m_progress          = 0;
    int m_number              = 0;
};