Vortex is a C++ GUI framework for building one application that runs natively on desktop, web, and Android. A portable C++ core owns the widget tree and resolves styling from Layers .lyr files; thin per-platform reconcilers mirror the result into real native widgets. One codebase, one set of styles, every platform.
Vortex is being reviewed and re-documented by hand after Layers 3.0, and APIs may change.
✨ This project is developed with AI-assistance. Please refer to our AI policy.
A Vortex app is three small pieces:
Styles: the interface is declared in Layers. Styles are structure: a style names the app's widgets, inherits each one's primitive from the framework library, and links colors to the active theme.
App << Vortex/App:
Main Window << Vortex/Main Window:
App Pane/Content:
Greeting << Vortex/Text:
Text: "Hello, Vortex"
An entry: build_app() applies the root style and wires interaction. The framework's shared shell (frameless window, titlebar tabs, settings menu, theme dialogs) is one call:
void Vortex::build_app(VApp& app) {
app.set_root_style("App");
wire_main_window_shell(app);
}
A platform shell: a few lines per platform hand the app's identity and asset directories to the framework runner.
That's the whole app. The core builds a render tree from the styles, and each platform's reconciler renders it natively: Qt widgets on desktop, DOM elements on web, Android Views on mobile. Events flow back through the same core, so behavior is written once. Switching the theme re-points the shared theme node and re-skins the entire app with zero platform-specific code.
| Target | Technology | Output |
|---|---|---|
| Desktop | Qt 6, in-process reconciler | native executable |
| Web | Emscripten/WebAssembly → DOM | vortex.js + vortex.wasm |
| Android | NDK/JNI → classic Views | Gradle library module + your app module |
| Static web | build-time HTML/CSS emitter | crawlable static pages from the same styles |
.lyr files, not C++; a widget's type comes from the primitive its style inherits.Layout.Direction, Layout.Grow, Size.Max Width, …) interpreted by every reconciler.@Narrow, @Mobile), plus automatic mobile scale-up of icons, text, and metrics.core/ Portable C++17 core: widget tree, style resolution, render tree + diffs.
Vendors nlohmann/json (theme documents, the update check, the patch stream).
styles/ Library widget styles (.lyr): the framework's building blocks.
themes/ Bundled themes (JSON): dark/light + accents.
icons/ Shell SVG icons.
platforms/ Reconcilers: desktop/ (Qt6), web/ (WASM→DOM), android/ (Views), static-web/ (emitter).
examples/ The demo app: a minimal peer consumer of the framework.
tests/ Headless test targets.
ext/ The Layers engine (submodule) + vendored QR encoder.
Requires CMake 3.22+, a C++17 compiler, and Qt6 for the desktop target.
git clone --recursive https://codeberg.org/HuntrSoftware/vortex.git
cd vortex
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
./build/platforms/desktop/vortex-desktop
./build-all.sh builds every platform in one shot. See the build guide for the web (Emscripten) and Android (Gradle/NDK) steps.
Full documentation lives at huntrsoftware.com/vortex:
Vortex powers node.you (the same C++ app tree shipping on desktop, web, and Android) and the Docuriser documentation tool that builds huntrsoftware.com itself.
Vortex is open-source under the MIT license.