Building from source
Requirements: Bun, CMake (≥ 3.21), a C++20 compiler, and Qt 6.9+ development files including the WebSockets module.
# Debian/Ubuntu
sudo apt install g++ cmake qt6-base-dev qt6-base-dev-tools qt6-declarative-dev \
qt6-websockets-dev qml6-module-qtquick qml6-module-qtquick-controls
# Fedora
sudo dnf install gcc-c++ cmake qt6-qtbase-devel qt6-declarative-devel qt6-qtwebsockets-devel
# Arch
sudo pacman -S base-devel cmake qt6-base qt6-declarative qt6-websockets qt6-quickcontrols2
# macOS
brew install cmake qt
# Windows: install Qt 6.9 via the online installer, then pass -DCMAKE_PREFIX_PATH=<qt>/lib/cmake
Then:
bun install
cmake -S . -B build && cmake --build build
The build produces:
build/bin/qml-host— the Qt host (renders QML, runs native dialogs/tray);build/bin/bridge— the C++ process supervisor for the runtime;build/bin/launcher— the Qt-free single-file launcher.
Qt is located with CMake's find_package(Qt6), so pass -DCMAKE_PREFIX_PATH=<qt>
if it is not in a standard location. PULSAR_QMAKE still selects the qmake
used when packaging (pulsar build bundles Qt).
Releases are produced by a CI matrix (.github/workflows/release.yml) that
builds on Linux, macOS and Windows and packages Qt per platform (ldd on Linux,
otool + framework copy on macOS, windeployqt on Windows).
Single-file layout
pulsar build appends a payload to launcher:
[ launcher ][ payload container ][ payload offset + magic ]
├─ bin/qml-host, bin/bridge, bin/qt.conf
├─ runtime (Bun standalone: runtime + app + SDK)
├─ app/… (QML, assets, manifest)
└─ lib/Qt/… (bundled Qt, Linux/macOS)
or Qt DLLs beside the host on Windows
At startup the launcher extracts the payload into the user cache and execs the
host, which loads its own Qt — from lib/Qt via RPATH on Linux/macOS, or from
the DLLs next to the executable on Windows — never from the system. Use
--slim to omit Qt and rely on the system installation.
pulsar build reuses the Qt that ships with the installed toolchain; when the
host has no bundled Qt (dev builds) it falls back to qmake. Set
PULSAR_QT_ROOT to point at a specific Qt tree.