At a glance
borealis: 4, Aurore: 15
translation catalogues, switched while the app runs
borealis: C++17, Aurore: C++20
the language standard, with RTTI and exceptions
borealis: Yoga 2, Aurore: Yoga 3
standard CSS flexbox, with
gapandflexWrapborealis: 7, Aurore: 8
platforms: the browser joins the seven
New in Aurore
What borealis does not have
Cadran is on by default, and one call turns it off; the rest is there when an app wants it.
Cadran, a look of its own
On by default: an icon rail, cards, sheets and dialogs, about sixty vector icons.
setCadran(false)keeps borealis' look.Themes in files
.themefiles and folders: a palette from one accent, presets, nine seasons and feasts, pictures, decorations. Every theme's contrast is checked.Styles and data binding
focus:,pressed:,disabled:andhover:attributes, animated transitions, values bound from XML withbind.Accessibility
A role, a label and a value for every view, a focus announcer in 15 languages, two high-contrast themes, a text scale, reduced motion.
Text for every script
Colour emoji, Hebrew and Arabic from right to left, FreeType as an option, a font per label, shrink-to-fit, cached measures.
A test harness
Headless, on a simulated clock: gamepad, keyboard, touch and mouse by call, screenshots compared with references, and fuzzing targets.
Inspector, hot reload, profiler
F12 or L3+R3 opens the tree, the box model and the theme lookups over the app; XML and themes reload on save; a bench catches regressions.
Density and small screens
Comfortable, compact or dense lengths in
dp,compact:attributes for narrow screens, a preset for a small screen in one call.
Side by side
What both have, and how it differs
borealis on the left as its wiliwili branch stands, Aurore on the right.
Look and layout
| borealis wiliwili | Aurore | |
|---|---|---|
| Look | Its own, close to the Switch's | Cadran by default; borealis' look one call away |
| Colours | A light and a dark theme, set in code | Every colour a theme key, switched while the app runs |
| Layout | Yoga 2.0.0 | Yoga 3.2.1, standard flexbox, gap, flexWrap with focus across the lines |
| Corners and gradients | One radius for every corner | A radius per corner, horizontal gradients, gradients from code |
| Focus highlight | A pulsing border | Glides from view to view, can fade after a while |
| Images | Loaded on the interface's thread | Can be decoded in the background; oversized pictures refused before decoding |
Text and input
| borealis wiliwili | Aurore | |
|---|---|---|
| Translations | 4 languages: English, French, Russian, Simplified Chinese | 15 languages, for the library, Cadran, the hints and accessibility |
| Changing language | Loaded once, at start | While the app runs, with loadTranslations() |
| Lookups | Exceptions on lookup | No exceptions, safe from any thread |
| Fonts off the Switch | Switch-style fonts bundled | Inter and PromptFont, free fonts; Chinese, Japanese and Korean from the system |
| Keyboard | Enter, Escape, the arrows and little else | Every controller button on a key, remappable |
| Focus | A hidden box could take it | Hidden and destroyed views never hold it |
Build and platforms
| borealis wiliwili | Aurore | |
|---|---|---|
| Language | C++17 | C++20, RTTI and exceptions on |
| CMake target | borealis | Aurore::aurore, Aurore::test |
| Options | PLATFORM_*, USE_*, BRLS_* | AURORE_*, presets, a relocatable install |
| Build systems | CMake and xmake | CMake only |
| Platforms | Desktop, Switch, PS Vita, PS4, Android, iOS, tvOS | The same, and the browser (Emscripten, WebGL 2) |
| Bundled libraries | Yoga 2.0.0, SDL 2.28.5, tinyxml2 9.0.0, nlohmann/json 3.11, glad 0.1.27 | Yoga 3.2.1, SDL 2.32.10, tinyxml2 11.0.0, nlohmann/json 3.12.0, glad 2.0.8 |
| Switch sounds | libpulsar linked, its sounds off | libpulsar removed |
| Opening links | Any address, through a shell | http and https only, without a shell |
| Licence | Apache 2.0 | borealis' code Apache 2.0; Cadran GPLv3, and so an app built with Aurore |
Fixes
Fixed along the way
From other forks of borealis, from PlayGuard's patches, and from Aurore's own work.
- The input block counter no longer wraps around.
- A destroyed view is forgotten as the focus; a lost focus reaches the parent frames.
- Navigation skips hidden frames and sliders.
- Controllers under SDL: closed on unplug, all read again after a reconnect, presses shorter than a frame kept.
- Each recycling list checks its own width; views queued while the deletion pool drains are kept.
- The font parsers read only inside the font's own data.
- The logger writes every line out at once.
- A disabled button can no longer be clicked.
Picked from the borealis family
Their commits keep their author and their cherry picked from line; others are rewritten with credit in the commit.
Moving over
What an app changes
Most apps build and run unchanged once renamed. The guide lists every line, and what to look at on screen afterwards.
- The names: no compatibility layer, every
brlsname has an Aurore one; a search and replace does it. - The build: C++20, the
Aurore::auroretarget,AURORE_*options. - The licence: Cadran is linked into every app, so an app built with Aurore is GPLv3.
#include <borealis.hpp>#include <aurore.hpp>brls::Application::init();aurore::Application::init();BRLS_BIND(brls::Button, button, "go");AURORE_BIND(aurore::Button, button, "go");<brls:Box axis="column"><aurore:Box axis="column">textColor="@theme/brls/text"textColor="@theme/aurore/text"target_link_libraries(app borealis)target_link_libraries(app PRIVATE Aurore::aurore)cmake -DPLATFORM_DESKTOP=ON -DUSE_SDL2=ONcmake -DAURORE_PLATFORM=DESKTOP -DAURORE_WINDOW=SDL2BRLS_LANG=fr ./appAURORE_LANG=fr ./app
The project
Documented, tested, released
Documentation
18 guides and an API reference on this site, where borealis has its README and a wiki.
Continuous integration
On top of borealis' builds: formatting, the demo under ASan and UBSan, the tests, the docs; actions pinned to commits.
Releases
Conventional Commits and release-please, a changelog,
AURORE_VERSION_AT_LEASTin code.Contributing and security
CONTRIBUTING.mdfor contributors,SECURITY.mdfor private vulnerability reports.The template
In the repository,
template/: a minimal app for the desktop and the Switch.Notices
Third-party notices shipped with every app; tools check them and the bundled libraries' versions.
Moving an app from borealis?
The guide takes it step by step: the submodule, the build, the resources, the look, the names.