This is the top-level quickstart for the v2-only stack.
Use this page to:
build.shYou need:
~/emsdkbrew install cmake ninja python3 node git bash binaryen
xcode-select --install
sudo apt-get update
sudo apt-get install -y \
cmake ninja-build python3 python3-pip git build-essential pkg-config curl bash binaryen \
libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev \
libxi-dev libxss-dev libxtst-dev libxkbcommon-dev libxkbcommon-x11-dev \
libwayland-dev wayland-protocols libdecor-0-dev libdecor-0-plugin-1-cairo \
libegl1-mesa-dev libvulkan-dev \
libfontconfig1-dev libdbus-1-dev libasound2-dev
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
The desktop development packages let the source-built SDL3 dependency provide both X11 and Wayland backends. The Cairo libdecor plugin supplies client-side caption and resize borders on Wayland compositors that need them. Vulkan supplies the accelerated Skia Ganesh surface; EGL remains an SDL desktop-video prerequisite. The build pins current Khronos Vulkan headers for optional present modes while continuing to use the distro Vulkan loader and installed GPU driver at runtime. Fontconfig supplies Linux fallback-font discovery, while D-Bus supplies freedesktop file-manager integration. They do not introduce a GTK, GNOME, or Ubuntu-specific runtime dependency.
git clone https://github.com/emscripten-core/emsdk.git ~/emsdk
cd ~/emsdk
./emsdk install 5.0.6
./emsdk activate 5.0.6
source ~/emsdk/emsdk_env.sh
From the repository root:
npm ci
npx playwright install chromium
v2/fui-rsbuild.sh can complete without Rust (it skips v2/fui-rs if cargo is missing), but install Rust if you want the Rust SDK lane:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
rustup target add wasm32-unknown-unknown
binaryen provides wasm-opt, which v2/fui-rs uses when available to run a speed-oriented WebAssembly optimization pass after Rust builds.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
rustup target add wasm32-unknown-unknown
binaryen provides wasm-opt, which v2/fui-rs uses when available to run a speed-oriented WebAssembly optimization pass after Rust builds.
From the repository root:
./build.sh --rebuild-all
# optional: build and run the full v2 test sweep
./build.sh --rebuild-all --with-tests
This builds:
v2/corev2/uiv2/browser-bridgev2/fui-asv2/fui-rs (only when cargo is available)npm create @effindomv2/fui-as-app)