A Boréale project · fork of borealis

A Switch-like interface for your app, on every screen

Aurore is a C++ UI library for controllers, TVs and touch screens. It looks like the Nintendo Switch's own menus out of the box, and can be restyled into anything else.

No release yet: the submodule follows main.

Aurore's demo in Cadran, its look: a rail of icons on the left, cards, chips and buttons, the controller's hints at the bottom.

Where it runs

  • Nintendo Switch
  • Android
  • iOS
  • Windows
  • macOS
  • Linux
  • PS4
  • PS Vita
  • Browser

A screen is a few lines of XML

Describe the screen in XML, laid out with flexbox; bind its views in C++. The focus moves with the D-pad on its own, touch and mouse work too, and every colour follows the theme.

Build it in 15 minutes →

The screen resources/xml/activity/hello.xml
<!-- resources/xml/activity/hello.xml -->
<aurore:AppletFrame>
    <aurore:Box
        title="Hello"
        axis="column"
        alignItems="center"
        justifyContent="center"
        gap="20">

        <aurore:Label
            text="@i18n/hello/welcome"
            fontSize="24" />

        <aurore:Button
            id="hello_button"
            style="primary"
            width="300"
            text="Say hello" />

    </aurore:Box>
</aurore:AppletFrame>
Its activity hello_activity.hpp
// hello_activity.hpp
#include <aurore.hpp>

class HelloActivity : public aurore::Activity
{
  public:
    CONTENT_FROM_XML_RES("activity/hello.xml");

    void onContentAvailable() override
    {
        button->registerClickAction([](aurore::View*) {
            aurore::Application::notify("Hello!");
            return true;
        });
    }

  private:
    AURORE_BIND(aurore::Button, button, "hello_button");
};
What it shows

Hello

Welcome to Aurore!

Back

Live demo

The real demo, in your browser

Aurore's demo compiled with Emscripten: the same code as on a Switch, drawn with WebGL 2. The keyboard, the mouse, a touch screen or the pad on screen; every theme and language.

Try it in your browser

Features

Everything a console menu needs

Cadran

A look of its own, without a line of code

Cadran, the look of PlayGuard and PlayShelf, is Aurore's look: an icon rail, cards, modals, action sheets, vector icons, a light and a dark theme, language and theme switched while the app runs.

Cadran's kit →

A theme folder: Winter

Screenshots

The demo, in a few looks

Simulated platforms

On every screen

The demo shows itself on each console from the desktop: its screen's size, the console's layout and renderer, the console drawn around it. --simulate 3ds, or a tile on the demo's welcome.

Simulate a console →

What Aurore adds

borealis, carried on

Aurore follows upstream (xfangfang/borealis) and adds fixes and features picked from other forks, and what its apps need: each one opt-in unless it is a fix.

Every change and its API →

Aurore and borealis, side by side →

  • Themes: theme files and folders, palettes from one accent, presets, pictures, logos, icons, decorations and particles, all switched live.
  • Styles: per-state styles (focus, pressed, disabled, hover), transitions, data binding and accessibility labels.
  • Views: a recycling grid and row, context menus, icon buttons, Markdown.
  • Layout: Yoga 3, gap, flexWrap with focus across the lines, a radius per corner, gradients, safe areas (notches, system bars, a TV's overscan).
  • Text: a font scale for every label, shrink-to-fit, clean line breaks.
  • Focus and hints: no focus lost in hidden or destroyed views; steady footer hints.
  • Platforms: SDL3 beside SDL2 (desktop, browser, Android, iOS), controllers reconnected under SDL, the browser (Emscripten), deko3d's command memory on the Switch.
  • Speed: no relayout for an unchanged text or size, XML attributes registered on demand, unused textures freed.

Under the hood

A current stack, checked on every change

Read from the repository each time this site is built: the versions from the build files and the notices, the figures from the tests and the CI.

Versions

  • LanguageC++23 (min. C++20)
  • CMake3.16–3.31
  • SDL33.4.18
  • SDL2.32.10
  • GLFW3.5.1
  • glad2.0.8
  • Yoga3.2.1
  • {fmt}12.2.0
  • TinyXML-211.0.0
  • JSON for Modern C++3.12.0
  • stb_image2.30
  • stb_truetype1.26
  • Tweeny4.2.0
  • Twemoji17.0.3
  • Android Gradle Plugin9.5.0
  • Gradle9.8.2
  • Android NDKr30
  • Android API36
  • Emscripten6.0.13

Checked every time

  • The demo runs under AddressSanitizer and UndefinedBehaviorSanitizer.
  • Markdown and theme files fuzzed with libFuzzer, from the corpus the earlier runs grew.
  • A build fails on a deprecated API: no deprecated code, no alias kept for later.
  • Every source file formatted by clang-format 18.
  • Each bundled library's version checked against its source and listed with its licence.
  • Every Monday, the bundled components compared with their upstream's latest release; an issue lists those behind.

Where these figures come from →

Use it

In your project

  1. Build your project as C++20, with RTTI and exceptions.
  2. Add Aurore as a submodule, and copy its resources folder to your project's root.
    git submodule add -b main https://github.com/JigSawFr/aurore.git library/aurore
    git submodule update --init --recursive
  3. In your CMakeLists.txt, include commonOption.cmake and toolchain.cmake before project(), add the library after it, and link Aurore::aurore.
  4. Pick the platform with -DAURORE_PLATFORM=…: DESKTOP, SWITCH, PSV, PS4, ANDROID, IOS, TVOS, 3DS.

Starting from scratch? template/ is a minimal app that builds for the desktop and the Switch.

Coming from borealis? Change the submodule, then rename brls::, <borealis.hpp> and BRLS_ to Aurore's names: a search and replace. →

Build the demo

On Linux, macOS or Windows; the other platforms' commands are those of the CI. →

git clone --recursive https://github.com/JigSawFr/aurore.git
cd aurore
cmake --preset desktop-glfw
cmake --build --preset desktop-glfw
./build/desktop-glfw/aurore_demo

Made with borealis

Apps that run on it

Documentation

Documentation

Licence

borealis' code is under the Apache 2.0 licence; Cadran, Aurore's look, is GPLv3, and so is an app built with it. Free software, maintained by JigSawFr.