Skip to content

Plugin Hosting

Host VST3 and CLAP plugins, in sandboxed child processes so a crashing plugin never kills the show.

✅ Shipped · v0.5.0 · sandboxing v0.7.0

What it does

Stardust hosts third-party audio plugins to provide the actual sounds. You drag a plugin (e.g. Spitfire BBC SO Discover, Surge XT, MuseSounds Strings) into a Patch’s VST chain, configure its parameters, and the plugin processes incoming MIDI into output audio. Multiple plugins per Patch are supported — for layered sounds, splits, or effects chains.

Supported formats

FormatStatusNotes
VST3MVP (v0.2)The industry standard. Spitfire, MuseSounds, Surge XT, Vital, Dexed, all commercial libraries.
CLAPv0.3Open-source modern format. Smaller ecosystem (mostly synths/effects), but high quality.
AUv2.0+macOS-only Apple format. Some users prefer it for AU-specific plugins.
VST2NeverDeprecated by Steinberg. We won’t ship VST2 support.

Plugin sandboxing

The single biggest reliability decision in Stardust: every plugin runs in its own child process.

If a plugin segfaults — and they do, especially older third-party C++ code:

  1. The audio engine catches the disconnect on the next audio callback
  2. Sends all-notes-off to all channels
  3. Either restarts the plugin or falls back to silence + sustain-off
  4. UI notification toast: “Spitfire BBC SO crashed — restarted”
  5. If a plugin crashes twice, it’s quarantined for the rest of the session

Most existing live hosts run plugins in-process for performance reasons, which means a single plugin crash takes the host down with it. Stardust accepts the ~1 ms IPC overhead to keep that from happening. See Comparison for how this compares across hosts, and Plugin Sandboxing for IPC and process-model details.

Latency cost of sandboxing

Plugin process IPC adds ~1 ms of latency via shared-memory ring buffers. Worth every microsecond — the reliability gain is enormous.

See Latency Budget.

Plugin parameter handling

Once a plugin is loaded:

  • Every parameter is exposed in the Patch editor
  • Parameters can be mapped to MIDI controls via MIDI Learn
  • Plugin state (current parameter values) is saved per-Patch
  • Multiple instances of the same plugin can be loaded in different Patches with different state
  • Plugin GUI displays in the patch editor’s bottom GUI dock by default (tab strip per loaded plugin in the active patch); pop-out button moves it to a floating window per the user’s per-plugin preference. Per-plugin placement persists across patch reloads. See locked decisions.

Plugin discovery

  • Auto-scan on first run (with progress UI)
  • Default scan folders:
    • macOS: ~/Library/Audio/Plug-Ins/VST3, /Library/Audio/Plug-Ins/VST3
    • Windows: C:\Program Files\Common Files\VST3
  • Custom folders configurable in Settings → Plugins
  • CLAP folders similarly default + customizable (v0.3)
  • Plugin metadata cached for fast re-scan
  • Quarantined plugins surfaced with manual re-enable

See Audio I/O for related setup.

VST3 implementation strategy

v0.2 uses a small C++ shim around the Steinberg VST3 SDK, called from Rust via FFI. The shim is ~1-2k LOC of C++ following Steinberg’s sample host code.

We chose this over:

  • vst3-sys (pure Rust): Too immature, lags SDK updates, smaller community
  • JUCE plugin host: Heavy dependency, GPL-incompatible without commercial license
  • Native Rust SDK from scratch: 3-6 months of dedicated expert work

The C++ shim is hidden behind a clean Rust API in Overture. If a pure Rust alternative emerges, we can swap internals without breaking the public API.

See VST3 Shim decision.

CLAP implementation (v0.3)

CLAP support uses clack, the leading Rust CLAP host. Adds ~1 week of work; gives users access to Surge XT, Vital, u-he plugins in CLAP mode, and the growing CLAP ecosystem.

See CLAP decision.

Test plugins for development

Free VST3 plugins for validating different behaviors:

PluginWhy we test with it
Surge XTOpen-source, hugely capable, CLAP version available
Spitfire BBC SO DiscoverRAM-heavy sample library
Spitfire LABSVariety of free instruments
MuseSoundsOrchestral, CPU-heavy on streaming
Vital (free)Modern wavetable synth, modulation-heavy
DexedSmall footprint, lots of params (DX7 emulator)
SforzandoSFZ player — for community-shared samples
HelmOpen-source subtractive synth
Valhalla SupermassiveEffect plugin in chain

This stack validates VST3 hosting under all production conditions.

Phase-by-phase status

PhaseWhat’s available
v0.2VST3, in-process, single plugin per chain, basic UI
v0.3VST3 + CLAP, sandboxed, multi-plugin chains, crash recovery
v0.4Full UI integration with chains, mappings, transitions
v0.5Built-in effects rack (EQ, reverb, comp) alongside plugins
v2.0+AU on macOS