VST3
Steinberg's VST3 is the most widely-supported plugin format in
commercial DAWs. Truce implements it through a thin C++ shim
(truce-vst3/shim/vst3_shim.cpp, MIT-licensed) that implements the
COM vtables required by the VST3 ABI and forwards every callback
into Rust.
#Status
Production. Shipped in the scaffold defaults. Passes pluginval at strictness level 5. Tested in Reaper, Ableton Live, FL Studio on macOS and Windows, and Reaper on Linux.
#Enable
Already on in scaffolded plugins. Otherwise:
[features]
default = ["clap", "vst3"]
vst3 = ["dep:truce-vst3"]
#Requirements
- macOS: Xcode CLI tools for the C++ compiler.
xcode-select --install. - Windows: MSVC toolchain (Visual Studio 2019+ with the "Desktop development with C++" workload).
- Linux: GCC or Clang with C++17 support.
No Steinberg SDK required — the shim is a clean-room COM implementation with MIT licensing.
#Install paths
User-scope by default; pass --system for the system-wide path.
| Platform | User (default) | System (--system) |
|---|---|---|
| macOS | ~/Library/Audio/Plug-Ins/VST3/{Name}.vst3/ |
/Library/Audio/Plug-Ins/VST3/{Name}.vst3/ (sudo) |
| Windows | %LOCALAPPDATA%\Programs\Common\VST3\{Name}.vst3\ |
%COMMONPROGRAMFILES%\VST3\{Name}.vst3\ (admin) |
| Linux | ~/.vst3/{Name}.vst3/ |
same (Linux is user-only) |
The .vst3 on disk is a real bundle directory with a proper Contents/
hierarchy:
{Name}.vst3/
└─ Contents/
├─ Info.plist (macOS)
└─ {MacOS,x86_64-win,x86_64-linux}/
└─ {Name} (the dylib/dll/so)
cargo truce install builds the bundle and signs the binary for
macOS. The user-scope default writes to your home directory with no
elevation; pass --system to land in the system-wide directory
(sudo on macOS, Administrator shell on Windows).
#Signing
- macOS: bundles are codesigned with
$TRUCE_SIGNING_IDENTITYduring install. Host loaders on Apple Silicon refuse unsigned VST3 bundles; ad-hoc (-) is accepted for local use. - Windows: binaries aren't signed by
install;cargo truce packageAuthenticode-signs them viasigntoolbefore bundling into the Inno Setup installer. Unsigned VST3 on Windows just produces a SmartScreen prompt for end users; DAWs still load it. - Linux: no signing.
#Build / install / package
cargo truce install --vst3 # build + install VST3 only
cargo truce install # all enabled (VST3 is on by
# default)
cargo truce build --vst3 # bundle into target/bundles/
cargo truce package --formats vst3 # signed installer with just VST3
#Validate
cargo truce validate invokes Tracktion
pluginval if installed (PLUGINVAL env var to override path).
Strictness 5 exercises: channel layouts, parameter ranges, preset
I/O, silent-input behavior, real-time safety heuristics.
#Hosts
| Host | Platform | Status |
|---|---|---|
| Reaper | macOS / Windows / Linux | primary |
| Ableton Live | macOS / Windows | working |
| FL Studio | macOS / Windows | working |
| Cubase | — | not yet tested |
| Studio One | — | not yet tested |
#Gotchas
- Class ID (
vst3_id) intruce.toml(auto-derived from vendor + plugin bundle_id if not set) must not change after release. VST3 hosts key automation and presets on it. - System-scope install needs elevation. macOS:
/Library/Audio/Plug-Ins/VST3/requiressudo. Windows:%COMMONPROGRAMFILES%\VST3\requires an Administrator shell. The user-scope default (no flag, or--user) writes to~/Library/.../%LOCALAPPDATA%\...and skips elevation — every modern VST3 host scans both roots. - IRunLoop on Linux: Reaper doesn't require the VST3 IRunLoop timer integration; Bitwig and Ardour on Linux may. Not yet verified — a known-possible risk for those hosts on Linux.