AudioWorklet and shared rings keep the realtime thread non-blocking.
WebAudio meets native VST3
Your browser. Your plugins.One audio graph.
A Rust bridge brings isolated local VST3 processing into real WebAudio graphs.
Open source · Rust + TypeScript · macOS first
Keep the audio clock moving.
The AudioWorklet exchanges audio through shared rings without waiting for native processing.
AudioWorklet + SharedArrayBuffer01 / THE ARCHITECTURE
One audio path. Clear ownership.
The browser owns timing and interface. The bridge owns trust. Each plugin runs in an isolated worker.
Pairing, discovery, routing and metrics stay on loopback.
Native processing is isolated so one plugin cannot take down the bridge.
02 / THE RUNTIME
Designed for the whole signal chain.
Track jitter, underflows, overflows and worker restarts instead of guessing.
Crash, timeout and quarantine policies are part of the runtime contract.
Scan classes, mount independent instances, edit parameters and restore state.
Rust crates, a typed Web SDK and versioned protocols keep every boundary inspectable.
03 / GET CONNECTED
From source to sound.
Build the bridge, start the local runtime, then open the rack. Bring a VST3 effect and an audio file.
Follow the setup guidecargo build -p wvst-bridge-server -p wvst-host-worker
WVST_HOST_WORKER=target/debug/wvst-host-worker \
target/debug/wvst-bridge-server serveIn a second terminal npm run docs:dev
Hear the complete path.
Run the local bridge, choose an audio file and mount a real effect in the browser rack.
Open demo