Cardinal, the Rack!

Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.
It is based on the popular VCV Rack but with a focus on being a fully self-contained plugin version.

More specifically, this is a DPF-based plugin wrapper around VCV Rack, using its code directly instead of forking the project, with the target of having a self-contained, fully free and open-source plugin version of Rack.
See the why section below for the reasons Cardinal exists, also for frequently asked questions check this FAQ document.

Cardinal contains Rack, some 3rd-party modules and a few internal utilities all in a single binary.
All "Core" modules from Rack have been replaced by Cardinal equivalents, simplified to better work for an audio plugin.

Cardinal does not load external modules and does not connect to the official Rack library/store.
All VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues.

Current status

Cardinal should be considered stable, if you spot any bugs please report them on GitHub.
Currently the following should be noted:

  • CLAP support is a work-in-progress DPF#383
  • VST3 plugin hosting (inside Carla or Ildaeil modules) mostly works but is considered experimental
  • Windows 32bit builds still have a few problematic modules #80

Why

Cardinal was created first and foremost as a way to have Rack as a proper open-source audio plugin.
A proper audio plugin should be self-contained as much as possible, as to not interfere with the DAW/Host. Loading external modules clearly goes against this idea.
Not to mention being open-source, otherwise we are at the mercy of the wishes of a company for what we can and cannot do, which is not something Cardinal's authors wish to abide by.

A self-contained plugin can't be overstated, as DLL/shared-object symbol conflicts can trigger hard-to-debug crashes.
While Rack tries to mitigate this as much as possible, crashes due to conflicting modules have already been seen in v2 builds.
On the other side, Cardinal redefines class and function names as needed to avoid as many conflicts as possible.

Support for ARM and non-mainstream platforms (for example BSD) has also always been missing from the official Rack since the start.
While we can patch the Rack free version to support these, same can't be done with Rack Pro with it being a closed-source product.
The online library/store only supports a very specific set of platforms too, so non-supported platforms would need any 3rd-party modules to be manually compiled to make them usable.

Unhappiness with the audio threading behaviour of Rack also plays a role.
Both audio and MIDI should be locked to the host audio thread as to minimize (or even altogether remove) latency and jitter.
The use of separate threads for MIDI is bad design, one that has been corrected in DAWs and JACK-MIDI for several years...
But Rack's use of RtMidi requires separate threading, so Cardinal does not use it.

Other relevant reasons include:

  • LV2 plugin version from the start
  • Proper dark mode support
  • Real CV ports to and from the plugin
  • Removing online access from the plugin and included modules (no phone-home here!)
  • Works as a test case for DPF and Carla
  • It is fun :)

Vs. Rack Pro

It needs to be said that Cardinal project and its author(s) do not wish anything bad to the original/official Rack project.
In fact, Cardinal wouldn't exist if not for Rack v2 release. (which has many needed things to make a plugin version work)

Cardinal and Rack should be able to co-exist friendly and peacefully, as they clearly have different targets.
It is likely most people will prefer to use Rack Pro for its official support and its big module collection (including commercial ones).

A feature comparison between Cardinal and Rack Pro can be seen here.

License

Cardinal is licensed under GPLv3+, see LICENSE for more details.
An overview of the included code and linked submodules can be seen here.