cargo-rack
cargo rack — a cargo subcommand that runs the
truce-rack standalone plugin host. Scan every installed
plugin, load one by id or name, drive it through the default audio
device, and (with --gui) embed its editor in a window — without
cloning the workspace or remembering the cargo run --bin …
incantation.
It's a thin wrapper: the entire flag surface is shared with the
truce-rack-standalone binary via its cli module.
Install
# Every format that builds out-of-the-box on your OS.
# Add LV2 (needs the system `lilv` library installed).
By default cargo install cargo-rack enables every format that
compiles on the host with no extra system libraries — picked per
OS so the install never breaks:
| OS | Formats on by default | Editor GUI |
|---|---|---|
| macOS | CLAP, VST3, AU, AU v3 | ✓ |
| Windows | CLAP, VST3 | ✓ |
| Linux | CLAP, VST3 | — ¹ |
¹ Linux gates the GUI off — baseview's Linux backend drags in
wayland-sys. The headless host still runs.
LV2 is the one opt-in: it links the system lilv library
(brew install lilv, apt install liblilv-dev, …), so it's left
out of the default to keep cargo install working everywhere. Add
it with --features lv2 once lilv is present.
Usage
The plugin's editor opens by default (where the GUI is available);
pass --headless to run without a window.
# List every plugin every enabled scanner can find.
# Load one — its editor opens automatically.
# Headless smoke test: render 5 seconds and exit.
# Drive a tempo/grid-synced plugin with a synthesized transport.
# Pick an output device + channel pair on a multichannel interface.
| Option | Meaning |
|---|---|
--list |
Print every plugin in every enabled format |
--list-devices |
List audio output + input devices and exit |
--format <fmt> |
Format to scan (clap, vst3, au, lv2) |
--id <id> |
Exact unique-id match |
--name <substr> |
Case-insensitive substring match against the name |
--output <name> |
Output device (case-insensitive substring) |
--output-channels <spec> |
direct (all), a channel 3, or a pair 3-4 |
--sample-rate <hz> |
Output sample rate (falls back if unsupported) |
--buffer <frames> |
Audio buffer size in frames |
--list-midi |
List MIDI input devices and exit |
--midi-input <name> |
MIDI input device (substring; default: all ports) |
--midi-channel <spec> |
omni/all (default) or a channel 1-16 |
--headless |
Run without the editor window |
--gui |
Force the editor window on (default where available) |
--seconds <n> |
Run headless for n seconds, then exit |
--tempo <bpm> |
Transport tempo in BPM (default: 120) |
--time-sig <n/d> |
Time signature, e.g. 7/8 (default: 4/4) |
--paused |
Report transport stopped (song position frozen) |
--no-transport |
Report no transport at all to the plugin |
On macOS, the windowed runner adds a native Settings menu that switches output device, output channels, MIDI input, and MIDI channel live — the same choices as the flags above, changeable while the plugin runs.
License
MIT or Apache-2.0, at your option.