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
| Tool | Version | Notes |
|---|---|---|
| Rust (nightly) | latest nightly | Required for vizia-plug GUI. Install via rustup toolchain install nightly |
| LLVM/Clang | 19+ | Required for Skia bindings on Windows. Download from releases.llvm.org |
| Node.js | 20+ | Required for the documentation site only |
| Git | any recent | Standard version control |
| Reaper | 7.x | Primary DAW for plugin testing. A free evaluation license is available |
Clone and Build (Plugin)
git clone https://github.com/fsecada01/bus_channel_strip.gitcd bus_channel_stripFast development check (no GUI, seconds)
cargo check --features "api5500,buttercomp2,pultec,transformer,punch,dynamic_eq"Full build with GUI
cargo +nightly build --features "api5500,buttercomp2,pultec,transformer,punch,dynamic_eq,gui"Production bundle (VST3 + CLAP)
On Windows, set LLVM environment variables before bundling:
# Windows (cmd)set LLVM_HOME=C:\Program Files\LLVMset LIBCLANG_PATH=C:\Program Files\LLVM\bincargo +nightly run --package xtask -- bundle bus_channel_strip --release ^ --features "api5500,buttercomp2,pultec,transformer,punch,dynamic_eq,gui"# 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)
cd sitenpm installnpm run dev # hot-reload dev server on http://localhost:4321npm run build # production build to site/dist/npm run preview # preview the production build locallyQuality Gate
Run these before every pull request:
# Format (nightly rustfmt required for some format options)cargo +nightly fmt
# Lint — must be warning-freecargo clippy -- -D warnings
# Testscargo testOr all at once via the justfile:
just qaFeature Flags
| Flag | Default | Description |
|---|---|---|
api5500 | yes | 5-band semi-parametric API5500-style EQ |
buttercomp2 | yes | Airwindows ButterComp2 compressor (C++ FFI) |
pultec | yes | Pultec EQP-1A style EQ with tube saturation |
transformer | yes | Transformer coloration module (4 vintage models) |
punch | yes | Clipper + Transient Shaper with 8x oversampling |
dynamic_eq | yes | 4-band dynamic EQ with sidechain masking analysis |
gui | no | vizia-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:
cargo build --features "api5500,pultec"PR Workflow
Branch naming
feat/short-descriptionfix/issue-number-short-descriptiondocs/what-you-are-documentingrefactor/what-changedCommit style
Follow Conventional Commits:
feat(punch): add cubic clip mode with adjustable kneefix(dynamic_eq): prevent denormal accumulation in detector pathdocs(site): add contributing guidePR 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
unsafeblocks have a safety comment explaining the invariant - If adding a new module: feature-gated with
#[cfg(feature = "...")]