irene 552b82bbaf docs: update README to reflect completed DSP and fix stale references
- Replace 'DSP not written yet' description with actual stereo delay
  DSP summary.
- Update src/lib.rs description in project structure tree.
- Replace stale 192.168.2.199 IP with pi5-16.local hostname in the
  clone URL (both in README body and Quick Start example).
2026-09-04 19:23:30 +09:00
2026-09-04 19:14:08 +09:00

Kolmekivi

A stereo delay/echo plugin — Rust, CLAP/VST3, egui.

Scaffolded from musiikki/nih-plug-template; the DSP is a simple stereo delay with independent left/right delay lines, feedback, and a wet/dry mix control.

Quick Start

git clone http://pi5-16.local:3005/musiikki/kolmekivi
cd kolmekivi
cargo xtask bundle kolmekivi --release --features vst3

Branding

Identity lives in tools/branding.conf; sh tools/check-branding.sh asserts every copy of it agrees, and CI runs that on each push. To rename the plugin, use sh tools/brand-plugin.sh — it derives the package and type names, refuses to move the frozen CLAP_ID/VST3_CLASS_ID without --allow-identity-change, and verifies itself with the checker afterwards. The toolkit and the reasoning behind it live in musiikki/nih-plug-template.

The repository keeps the name kolmekivi even if the plugin is renamed — that is the development codename, fixed at creation.

Build

# Install Rust via rustup: https://rustup.rs
# No VST3 SDK needed — NIH-plug bundles its own bindings.

# Build + bundle the CLAP (default)
cargo xtask bundle kolmekivi --release

# Add the VST3 as well — see the licensing note below before you do this
cargo xtask bundle kolmekivi --release --features vst3

Output: target/bundled/<name>.clap (and <name>.vst3 with --features vst3), where <name> is the name set in bundler.toml — not the crate name. Out of the box that means target/bundled/Kolmekivi.clap.

On Linux the egui editor needs the GUI development headers:

sudo apt install pkg-config libgl-dev libx11-dev libxcursor-dev libxcb1-dev \
    libxcb-icccm4-dev libxcb-dri2-0-dev libx11-xcb-dev libxkbcommon-dev libxkbcommon-x11-dev

Deploy

FL Studio

Build with --features vst3 first if you want the VST3 (see the licensing note below).

FL Studio scans C:\Program Files\Common Files\VST3 by default, ignores directory junctions (so a symlinked bundle is invisible to its scanner), and caches failed scans.

  1. Copy the .vst3 bundle to a folder FL scans (e.g. C:\Program Files\Common Files\VST3).
  2. Copy the .clap bundle to a folder FL scans (e.g. C:\Program Files\Common Files\CLAP).
  3. In FL Studio: Options → Manage plugins → tick "Rescan previously failed plugins" → Find installed plugins, then search for your plugin name (set in bundler.toml).

Linux

# CLAP
cp -r "target/bundled/Kolmekivi.clap" ~/.clap/

# VST3 (only exists if you built with --features vst3)
cp -r "target/bundled/Kolmekivi.vst3" ~/.vst3/

# Or globally:
# sudo cp -r "target/bundled/Kolmekivi.clap" /usr/lib/clap/
# sudo cp -r "target/bundled/Kolmekivi.vst3" /usr/lib/vst3/

Project Structure

Cargo.toml          # Package deps + the opt-in `vst3` feature — NIH-plug pinned to codename-206's rev
bundler.toml        # Bundle name for `cargo xtask bundle`
src/lib.rs          # Plugin — params, stereo delay DSP, and egui editor
xtask/              # Bundler xtask (cargo xtask bundle)
.cargo/config.toml  # xtask alias
tools/              # Branding toolkit — see Renaming
.gitattributes      # Pins *.sh to LF so Windows checkouts keep a valid shebang
.github/workflows/  # CI: branding check, both feature sets build, test, bundle

CI

.github/workflows/ci.yaml gates pushes and PRs on the branding check, a build of both feature sets, cargo test, and a bundle — enough to catch a rename that only half-landed, a cfg(feature = "vst3") gate that stopped compiling, or a bundler.toml that no longer matches the crate name.

It targets runs-on: rust-audio, an org-scoped runner label. A plugin cloned into a different org will not see that runner and its jobs will queue indefinitely rather than fail — register a runner advertising the label for that org, or change runs-on.

Deliberately not covered: plugin performance. Realtime cost can only be measured meaningfully against a real audio deadline, and Plugin::process() cannot be called from a test at all (ProcessContext requires a Transport, whose constructor and fields are pub(crate) to nih-plug). Benchmark your DSP types directly if you need it.

License

GPL-3.0-or-later. See LICENSE for the terms and NOTICE for third-party attribution.

Plugins cloned from this template inherit GPL-3.0-or-later, because the template's own code is under it. If you need a permissive plugin, this is the wrong starting point — write the skeleton yourself against NIH-plug directly, which is ISC.

Parts of src/lib.rs derive from Robbert van der Helm's NIH-plug cookiecutter template and gain example, both ISC. ISC is GPL-compatible, so that notice is retained in NOTICE rather than superseded.

VST3 and Steinberg

vst3-sys, which nih_export_vst3!() needs, is GPLv3-or-later — chosen by its own authors, who describe their port as a derivative of Steinberg's SDK that "was not made in isolation." That obligation is what makes a distributed VST3 build GPL-licensed, and it holds regardless of any question about Steinberg's own rights. Being GPL-3.0-or-later already, this template satisfies it.

No Steinberg SDK source is vendored or redistributed here, so there is nothing to accept at build time. Separately from copyright, "VST" is a trademark of Steinberg Media Technologies GmbH; describing a distributed product as a VST plugin is governed by their trademark terms. If you intend to distribute commercially under that name, that is the part worth legal advice.

CLAP carries none of this — no GPL dependency and no trademark encumbrance.

S
Description
delay plugin
Readme GPL-3.0 104 KiB
Languages
Shell 71.9%
Rust 28.1%