Follow these steps to build this version of Vortex on every platform.
Vortex builds from one repository to three run targets: a Qt6 desktop executable, a WebAssembly web bundle, and an Android APK. Each target renders the same demo app from the same C++ tree, the same .lyr styles, and the same JSON themes.
All targets require CMake 3.22+ and a C++17 compiler.
Clone Vortex from the Codeberg repository. The Layers engine is a submodule at ext/Layers, so clone recursively:
git clone --recursive https://codeberg.org/HuntrSoftware/vortex.git
If you already cloned without --recursive, fetch the submodule:
git submodule update --init
Requires Qt6 with the Core, Gui, Widgets, Svg, and Network modules. Multimedia is optional: without it, Video widgets render a placeholder box.
From the project root:
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
./build/platforms/desktop/vortex-desktop
The desktop runner has a built-in screenshot harness, so you can verify appearance without a display:
QT_QPA_PLATFORM=offscreen VORTEX_SHOT=/tmp/vortex.png \
./build/platforms/desktop/vortex-desktop
Setting VORTEX_SHOT2 as well captures a second shot after simulating clicks; VORTEX_CLICK names the widgets to click (comma-separated). Any extra windows open at capture time are saved alongside as <stem>.win<N>.png.
Requires the Emscripten SDK (emcc). The shared styles/ and themes/ are baked into the WASM filesystem at build time; vortex.js + vortex.wasm are emitted into platforms/web/demo/.
source /path/to/emsdk/emsdk_env.sh
emcmake cmake -B build-web -DCMAKE_BUILD_TYPE=Release
cmake --build build-web -j
WASM must be served over HTTP (not file://):
python3 -m http.server 8099 --directory platforms/web/demo
# then open http://localhost:8099/
Builds classic Views (no Compose). Requires:
ANDROID_HOME set or auto-detected)javac, not just a JRE (on Fedora, the java-*-openjdk-devel package)The Gradle project pins AGP 9.0.1, Gradle 9.2.1 (built-in Kotlin, no separate Kotlin plugin), compileSdk 36, minSdk 26, CMake 3.22.1, and the arm64-v8a ABI. The shared styles/ and themes/ are synced into the module's generated assets at build time: single-sourced, not duplicated.
cd platforms/android
export ANDROID_HOME=$HOME/Android/Sdk # adjust as needed
./gradlew assembleDebug
Install and launch on a USB-connected device:
adb install -r app/build/outputs/apk/debug/app-debug.apk
adb shell am start -n com.huntrsoftware.vortex/.MainActivity
Screenshot back to the host:
adb shell screencap -p /sdcard/vortex.png && adb pull /sdcard/vortex.png
./build-all.sh
Builds all three platforms in one pass (reusing already-configured build trees, probing $EMSDK and $ANDROID_HOME/$JAVA_HOME for toolchains) and prints a per-platform pass/fail summary. A platform whose toolchain is missing is reported, not fatal.
When Vortex is built as the top-level project (rather than inside a consuming app), the native build also produces the static-emitter test: a headless check that pins the static-web emitter's exact HTML/CSS output and verifies the demo app emits deterministically:
./build/tests/vortex-static-emitter-test
To build an application of your own on the framework, see the app development guide.