Run the demo app
Clone & install
The reference integration lives in the Wavelength monorepo at
apps/web-wallet-demo. Clone the repository, install dependencies with pnpm,
and build the workspace packages:
git clone https://github.com/lightninglabs/wavelength-sdk.gitcd wavelength-sdkpnpm installpnpm buildThe demo depends on the workspace packages @lightninglabs/wavelength-web and
@lightninglabs/wavelength-react. The apps/web-wallet-demo/public/ folder is
gitignored and ephemeral, so before running the demo you need to populate it
with the runtime WASM binaries:
pnpm --filter web-wallet-demo run wasm:localSee Hosting runtime assets for details on what this stages and how to point the demo at a different asset source.
Run
Start the Vite dev server from the monorepo root:
pnpm --filter web-wallet-demo devOpen the URL Vite prints (typically http://localhost:5173). The demo boots a
signet wallet out of the box: choose signet on the connect screen and the
app boots with its own signet preset (signetDefaults in
src/lib/runtime-config.ts), which mirrors the same public gateway URLs
defaultConfig('signet') would produce. No local backend is required.
Cross-origin isolation headers are configured in the demo’s Vite config so OPFS persistence works in every supported browser. See Cross-origin isolation for why these headers are required and how to configure them outside of Vite:
const crossOriginIsolation = { 'Cross-Origin-Opener-Policy': 'same-origin', 'Cross-Origin-Embedder-Policy': 'require-corp', 'Cross-Origin-Resource-Policy': 'same-origin',};
export default defineConfig({ server: { headers: crossOriginIsolation }, preview: { headers: crossOriginIsolation },});Use pnpm --filter web-wallet-demo preview to serve the production build with
the same headers.
Optional (wasm:local, regtest, testnet)
Rebuild runtime assets locally. When you are developing against a custom
wavelength build, stage fresh WASM files into the demo’s public/ folder:
# Expects a sibling wavelength checkout (override with WAVELENGTH_DIR)pnpm --filter web-wallet-demo run wasm:localThis runs make wasm-wallet in wavelength and copies the full
RUNTIME_ASSET_FILES set into public/runtime/<RUNTIME_MANIFEST_VERSION>/,
the versioned path the demo’s runtimeBaseUrl points at.
Regtest with arktest. To exercise deposits, swaps, and exits against a local chain, run arktest in a separate terminal:
# From a wavelength checkoutmake build./arktest-debug start --swapserverKeep arktest running. In another terminal, print the connection URLs:
./arktest-debug envIn the demo connect screen, switch the network to regtest. The defaults
match arktest’s usual ports (7071 for Ark, 8501 for Esplora, 10032 for
the swap server). Adjust the gateway fields if your arktest instance binds
different ports.
At a high level the full local workflow is:
- Terminal 1:
./arktest-debug start --swapserver - Terminal 2:
pnpm --filter web-wallet-demo dev(optionally afterwasm:localif you changed the daemon) - Browser: select regtest, start the runtime, create or unlock a wallet
Testnet. Select testnet on the connect screen to boot with its own
testnet preset (testnetDefaults in src/lib/runtime-config.ts), which
mirrors the same public gateway URLs defaultConfig('testnet') would
produce. No arktest instance is needed.
Troubleshooting OPFS. If wallet persistence fails in the browser, confirm COOP/COEP headers are present:
curl -sI http://localhost:5173 | grep -i cross-originBoth Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy must
appear in the response. See
Troubleshooting / FAQ for more fixes, and the
web guides for end-to-end wallet flows built
on top of this demo.