Skip to content

VST3: adopt a permissively-licensed binding now that the SDK is MIT (tracking) #274

Description

@lvpsxakatiempo

Summary

Now that Steinberg relicensed the VST3 SDK to MIT (VST 3.8, Oct 2025), nih-plug's VST3 export is the last thing forcing GPLv3 on otherwise-permissive plugins. This is a tracking issue for migrating the VST3 wrapper from the GPLv3-only vst3-sys to a permissively-licensed binding, so closed-source VST3 plugins become possible.

(Consolidating the licensing angle from #135 — which is framed around DPF's Travesty — and noting #236 below. Happy to close as a dup if you'd rather keep everything in #135.)

The blocker today

  • The vst3 feature pulls robbert-vdh/vst3-sys (fix/drop-box-from-raw), which is GPLv3-only.
  • src/wrapper/vst3/ (~4k LOC, ~110 references to vst3_sys) is written directly against that crate's COM API, so the GPLv3 propagates to any VST3 build.
  • A CLAP build is fine (clap-sys is MIT/Apache) — only VST3 is affected.

What changed / what's available now

  1. SDK is MIT (Oct 2025): the original reason vst3-sys was GPLv3 (it derived from a GPL/proprietary SDK) no longer applies. The long "is the VST3 interface copyrightable" debate in Couldn't the vst3 export be replaced by DPF's Travesty custom vst3 implementation? #135 is largely moot — the headers are MIT now.
  2. Permissive, generated bindings already exist and are maintained: coupler-rs/vst3-rs and micahrj/vst3-sys, both MIT OR Apache-2.0, regenerated from the headers. The RustAudio/vst3-sys maintainer now recommends them himself.
  3. Move to non-forked vst3-sys crate #236 ("move to non-forked vst3-sys") does not fix licensing — upstream RustAudio/vst3-sys is also GPLv3-only. The relicensing path through that crate looks unlikely (see VST3 com interface issue / fix #58), so the durable fix is the generated bindings.

Proposed scope

  • Decide the target binding (coupler-rs/vst3-rs looks like the strongest candidate; it's by the same author as clap-sys).
  • Port src/wrapper/vst3/* from the vst3-sys COM API to the chosen crate.
  • Verify host compatibility (FL Studio, Cubase, Reaper, Bitwig, Ableton) and that the persisted VST3_CLASS_ID is unaffected (so existing saved sessions keep loading).
  • Flip the crate's license note for VST3 builds accordingly.

Offer to help

I maintain a commercial multi-format sampler on nih-plug (CLAP shipping; VST3 blocked only by this). I'm happy to help with the port and to test a migration against a large real-world surface — SFZ / SF2 / DLS / EXS24 / Akai / DecentSampler / etc., 64-voice polyphony, multi-output, automation, persisted state. Just let me know if a migration is something you'd accept and I'll start on a branch.

Thanks for nih-plug — it's a genuinely great framework, and this is the one thing keeping commercial VST3 plugins off it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions