Skip to content

Contributing

Thank you for your interest in contributing to Bus Channel Strip. This guide covers everything you need to get a working development environment, run quality gates, and submit changes.

Prerequisites

ToolVersionNotes
Rust (nightly)latest nightlyRequired for vizia-plug GUI. Install via rustup toolchain install nightly
LLVM/Clang19+Required for Skia bindings on Windows. Download from releases.llvm.org
Node.js20+Required for the documentation site only
Gitany recentStandard version control
Reaper7.xPrimary DAW for plugin testing. A free evaluation license is available

Clone and Build (Plugin)

Terminal window
git clone https://github.com/fsecada01/bus_channel_strip.git
cd bus_channel_strip

Fast development check (no GUI, seconds)

Terminal window
cargo check --features "api5500,buttercomp2,pultec,transformer,punch,dynamic_eq"

Full build with GUI

Terminal window
cargo +nightly build --features "api5500,buttercomp2,pultec,transformer,punch,dynamic_eq,gui"

Production bundle (VST3 + CLAP)

On Windows, set LLVM environment variables before bundling:

Terminal window
# Windows (cmd)
set LLVM_HOME=C:\Program Files\LLVM
set LIBCLANG_PATH=C:\Program Files\LLVM\bin
cargo +nightly run --package xtask -- bundle bus_channel_strip --release ^
--features "api5500,buttercomp2,pultec,transformer,punch,dynamic_eq,gui"
Terminal window
# Windows (bash/PowerShell)
LLVM_HOME="C:/Program Files/LLVM" \
LIBCLANG_PATH="C:/Program Files/LLVM/bin" \
cargo +nightly run --package xtask -- bundle bus_channel_strip --release \
--features "api5500,buttercomp2,pultec,transformer,punch,dynamic_eq,gui"

Bundles are written to target/bundled/. Install them in your VST3/CLAP directories or use just deploy.

Clone and Build (Documentation Site)

Terminal window
cd site
npm install
npm run dev # hot-reload dev server on http://localhost:4321
npm run build # production build to site/dist/
npm run preview # preview the production build locally

Quality Gate

Run these before every pull request:

Terminal window
# Format (nightly rustfmt required for some format options)
cargo +nightly fmt
# Lint — must be warning-free
cargo clippy -- -D warnings
# Tests
cargo test

Or all at once via the justfile:

Terminal window
just qa

Feature Flags

FlagDefaultDescription
api5500yes5-band semi-parametric API5500-style EQ
buttercomp2yesAirwindows ButterComp2 compressor (C++ FFI)
pultecyesPultec EQP-1A style EQ with tube saturation
transformeryesTransformer coloration module (4 vintage models)
punchyesClipper + Transient Shaper with 8x oversampling
dynamic_eqyes4-band dynamic EQ with sidechain masking analysis
guinovizia-plug GUI. Requires nightly Rust + LLVM. Off by default to keep CI fast

Feature flags are additive. You can build a subset of modules for faster iteration:

Terminal window
cargo build --features "api5500,pultec"

PR Workflow

Branch naming

feat/short-description
fix/issue-number-short-description
docs/what-you-are-documenting
refactor/what-changed

Commit style

Follow Conventional Commits:

feat(punch): add cubic clip mode with adjustable knee
fix(dynamic_eq): prevent denormal accumulation in detector path
docs(site): add contributing guide

PR checklist

Before opening a pull request, verify:

  • cargo +nightly fmt — no formatting changes needed
  • cargo clippy -- -D warnings — zero warnings
  • cargo test — all tests pass
  • No new allocations in process() or any function it calls
  • No parameter #[id = "..."] values were changed
  • All new unsafe blocks have a safety comment explaining the invariant
  • If adding a new module: feature-gated with #[cfg(feature = "...")]

Audio Thread Rules

Parameter ID Stability