EffinDOM

EffinDom v2 Quickstart

This is the top-level quickstart for the v2-only stack.

Use this page to:

  1. install the shared prerequisites once
  2. run the full v2 rebuild via build.sh
  3. jump to the surface-specific quickstart you need

1. Install shared prerequisites

You need:

macOS

brew install cmake ninja python3 node git bash binaryen
xcode-select --install

Linux (Debian / Ubuntu)

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.

Emscripten SDK (required)

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

JavaScript dependencies

From the repository root:

npm ci
npx playwright install chromium

Optional: Rust toolchain for v2/fui-rs

build.sh can complete without Rust (it skips v2/fui-rs if cargo is missing), but install Rust if you want the Rust SDK lane:

macOS

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.

Linux (Debian / Ubuntu)

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.

2. Build the whole v2 stack

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:

3. Surface quickstarts