A template for implementing audio plugins with the WRAC stack. You can copy this repository as a starting point for new projects.
日本語版: README_JA.md
The WRAC stack is a technology stack for audio plugin development, built around three core components: Webview, Rust Audio, and CLAP.
W (WebView): User interface implementation using HTML/CSS/JS.
RA (Rust Audio): Audio signal processing implementation in Rust.
C (CLAP): Interface with host applications via the CLever Audio Plug-in standard.
Audio plugins have requirements that ordinary desktop WebView apps do not have: support for many DAWs and plugin formats, cooperative behavior with host applications, and hard real-time requirements on the audio thread.
It took our team a lot of iteration to satisfy those requirements with a WebView + Rust architecture. Other developers should not have to repeat the same trial and error. With this template, you can start from working code that NovoNotes uses in production.
The code in this repository implements a simple plugin called WRAC Gain. It is also structured so it can be used as a template.
- CLAP plugin implementation in Rust using clap-sys
- WebView GUI implementation using wxp
- VST3 / AU / AAX plugin builds and a development standalone app via clap-wrapper
Want to try the bundled WRAC Gain plugin before building your own? Follow the minimal steps below. With just Rust and Node.js you should be able to build CLAP. For the prerequisites to build VST3 / AU / AAX or the development standalone app, see the Setup doc.
# Clone the template. Add --recursive if you plan to build VST3 / AU / AAX or the development standalone app.
git clone https://github.com/novonotes/wrac-plugin-template.git
cd wrac-plugin-template
# Build and install CLAP only for the minimal first run.
# Run `cargo xtask install` to install every format declared in supported_formats.
cargo xtask install --target=clap
# Debug builds load the GUI from the Vite dev server, so start it before launching your DAW
cd plugins/wrac-gain/src-gui
npm install
npm run devThen launch your DAW and insert WRAC Gain (a plugin rescan may be required).
To build your own plugin based on this template, see Setup.
For production plugins, predictability was the main reason. The web platform is mature, widely understood, and already has a known set of tradeoffs in desktop and plugin UI contexts. GPU-native UI stacks such as wgpu are promising, but there is still less production evidence to rely on inside DAW-hosted plugin environments.
No. This repository is an implementation example and starting point, not a general-purpose framework. As a result, it does not provide a broad high-level API, and the adapter layers are intentionally kept thin. Adapting it to your own project should usually be straightforward. For the same reason, future changes will not provide API backwards compatibility or migration support.
Yes. This repository is licensed under the MIT License, which permits commercial use. Open-source, freeware, and commercial releases built from this template are all welcome.
AAX is supported as an explicit build/install/validate target on macOS and Windows. See AAX Build and Validation. AUv3 support is still ongoing.
Common commands:
# Debug build for all plugin formats and the development standalone app
cargo xtask build
# Release build for all plugin formats and the development standalone app
cargo xtask build --release
# Debug build for VST3 only
cargo xtask build --target=vst3
# Release build for AU
cargo xtask build --target=au --release
# Build and validate plugins
cargo xtask validate
# Build and install plugins
cargo xtask installcargo xtask validate runs WRAC production-readiness checks before external format validators.
For the check list and disable format, see Production-Readiness Checks.
Build and launch the development standalone app:
cargo xtask launchThe standalone app is a lightweight development and smoke-test host. It is not a release plugin format or a shipping artifact.
Supported plugin formats:
| OS | Supported formats |
|---|---|
| macOS | CLAP / VST3 / AU / AAX |
| Windows | CLAP / VST3 / AAX |
| Linux | CLAP / VST3 |
Default build, install, and validate targets come from package.metadata.wrac.supported_formats.
Use --target to request a specific subset; explicit plugin-format targets must be listed in supported_formats.
cargo xtask build also builds the development standalone app by default, and the build command accepts standalone as a development-only target.
Use --dry-run on build/install/validate commands to inspect the task graph before running it.
For detailed usage:
# Overall help
cargo xtask --help
# Subcommand help
cargo xtask build --helpFor known DAW compatibility status, see the DAW Compatibility Matrix.
For usage of the wxp crate, see the wxp README.
For additional plugin examples built from this template, see wrac-examples.