Astro site for the suite: a home page with the plugin cards, install steps, principles, the metalwork names and the ideas on the bench, one page per plugin, and the Impressum and privacy policy. Plugin names, versions, download links and editor previews come from the catalog, the wrapper manifests and docs/*/assets at build time. Served by unprivileged nginx in Docker behind Traefik on fl.narl.io, the same setup as proton.narl.io: no access logs, CSP 'self', no JavaScript, legal pages filled from the environment at start.
Bass Foundry
Rust CLAP plugins for writing, designing and mixing bass music in FL Studio.
Website: fl.narl.io
Riddim and dubstep basses change patch on every switch-up. Fixed-frequency tools then act differently on every note: the sub jumps, an EQ cut lands on another harmonic, the distortion gets fizzy on one note and dull on the next. Most plugins in this suite follow the played note, so a setting means the same thing on every note. Each plugin is a separate product with its own version, guide and release.
Plugins
| Plugin | What it does | Load it on | Latency | Docs |
|---|---|---|---|---|
| Rivet | Tells a MIDI motif as a story on a storyboard of roles and joins the seams into one phrase | Channel Rack | none | Guide · Changes |
| Patina | Smooths harsh, ringing resonances while plain harmonic tone and transients pass | Any mixer track | one analysis frame | Guide · Changes |
| Anvil | Replaces the sub with a clean mono sine: one level and one start phase on every note | Bass bus | 80 ms | Guide · Changes |
| Crucible | Records the last bars all the time, then slices, cleans and exports key-labelled samples with one button | End of the chain to resample | none | Guide · Changes |
| Lathe | EQ with one band on each harmonic of the played note: a cut on harmonic 3 stays on harmonic 3 | Bass, after the synth | ≈ 67 ms | Guide · Changes |
| Temper | Distortion that drives every note the same: level and tone filters follow the note | Bass | ≈ 67 ms + oversampling | Guide · Changes |
| Weld | Phase-aligns one bass layer to another layer through the sidechain, so the layers sum in the mids instead of cancelling | One layer's track, other layer as sidechain | none | Guide · Changes |
| Knurl | Gives every cycle of the note its own level, timing and grit: in-tune subharmonic growl, rattle and fry on every note | Bass | ≈ 71 ms | Guide · Changes |
Plugins with latency report it to the host, so FL Studio compensates the delay. Anvil, Lathe, Temper and Knurl detect pitch from the audio. They can also take the pitch from MIDI.
The names come from metalwork: a rivet joins pieces; patina changes a surface and keeps its character; an anvil is the solid base that everything is struck on; a crucible melts material down to be cast again; a lathe turns a piece so each cut lands the same all the way round; tempering sets how hard and how tough a metal ends up; a weld fuses two pieces into one; knurling presses a ridged grip pattern into a surface. The suite is the foundry: the workshop where the bass gets cast, shaped and finished. Hosts list the plugins under the vendor name Bass Foundry.
Editors
![]() Rivet: storyboard composition |
![]() Patina: resonance smoothing |
![]() Anvil: sub anchor |
![]() Crucible: resampler |
![]() Lathe: harmonic EQ |
![]() Temper: tracked distortion |
![]() Weld: layer phase alignment |
![]() Knurl: cycle texture |
The previews are rendered headless from the real editor code by
tools/editor-check, so they match what the plugin draws.
Install
-
Open the plugin's release on Gitea. Every plugin has its own release tag, for example
lathe-v0.1.0. -
Download
<plugin>-windows-x86_64-<version>.zip. You can check it against the.zip.sha256file next to it. -
Extract the ZIP and copy the
.clapfile into:C:\Program Files\Common Files\CLAP\ -
In FL Studio 2024.1 or newer, open Options → Manage plugins, enable Verify plugins, and click Find installed plugins.
-
Load Rivet in the Channel Rack. Load the other plugins in mixer effect slots.
Keep the font license (licenses/) with redistributed packages.
Every branch and pull-request pipeline also builds a combined Windows preview
ZIP, bass-foundry-windows-x86_64.zip, in its windows job. Use it to test unreleased changes.
Upgrading from Motif Storyboard or Resonance Compressor? These are now Rivet and Patina. The CLAP IDs and saved state are unchanged, so projects still load. Delete the old
.clapfiles and rescan. The vendor name changed from "Rivet & Patina" to "Bass Foundry", so FL Studio may list the plugins in a new vendor folder after the rescan.
Build from source
You need:
- Rust stable and Python 3.11 or newer.
- For the Windows target on Linux: the
x86_64-pc-windows-gnuRust target and MinGW (x86_64-w64-mingw32-gcc). - For the native wrapper tests on Linux: pkg-config and the X11/XCB and OpenGL development headers. Rivet's optional standalone also needs ALSA/JACK headers.
# Tests for all engines, editors and tools
cargo test --workspace --locked
# Formatting, tests and lints for one product, including its CLAP wrapper
python3 scripts/check-plugin.py --plugin lathe
# Windows build, then the ZIPs (all plugins, or --plugin <name>)
python3 scripts/build-plugin.py --plugin lathe --target x86_64-pc-windows-gnu
python3 scripts/package-windows.py
# Headless editor preview
cargo run --manifest-path tools/editor-check/Cargo.toml -- target/editor/lathe.png --plugin lathe
Plugin names for the scripts are rivet, patina, anvil, crucible,
lathe, temper, weld and knurl. Builds go to dist/<target>/<Name>.clap. No
script installs anything into a DAW. Development and testing
has the full command list.
Quality checks
Every push and pull request runs these checks in CI
(.gitea/workflows/check.yml):
- Engine tests. Every engine has tests for its signal behaviour and latency against measured targets.
- Realtime safety. Every audio effect has a test that fails if the audio thread allocates memory.
- Host tests. Each wrapper is loaded through the exported CLAP ABI, without a DAW. The tests check the ports, the reported latency, state save and load, and processing at 44.1, 48 and 96 kHz.
- Lints.
rustfmtandclippy -D warningsfor every package and wrapper. - Editor previews. All editors are rendered headless and kept as CI artifacts.
- Windows builds. Every
.clapis cross-compiled and packaged.
Release ZIPs are deterministic and contain checksums for every file. Things CI cannot check stay manual: FL Studio routing, native window behaviour, and listening.
Repository
plugins/
catalog.json Product metadata for the build, check and release tools
rivet/ core · midi · app · preview · plugin
patina/ core · ui · render · plugin
anvil/ core · ui · plugin
crucible/ core · ui · plugin
lathe/ core · ui · plugin
temper/ core · ui · plugin
weld/ core · ui · plugin
knurl/ core · ui · plugin
common/
ui/ Shared look: palette, embedded fonts, knobs, panels, meters
dsp/ Shared filters, pitch tracking, oversampling, meters, WAV files
tools/editor-check/ Headless editor renderer for visual QA
scripts/ Build, check, packaging, release and analysis tools
docs/<plugin>/ Guide, changelog and editor preview for each plugin
docs/ideas.md Problems in bass-music production and the plugin ideas for them
references/ Local reference audio; never distributed
website/ The fl.narl.io site: Astro, nginx container, reads catalog and previews
Each product follows the same split:
coreis the engine. It is plain Rust, does not depend on a plugin SDK, and is tested on its own.uiis the egui editor, built oncommon-ui.pluginis the CLAP wrapper on a pinned NIH-plug revision.
The root Cargo workspace holds the engines, editors and tools. Each wrapper is
its own workspace with its own lockfile, so SDK dependencies stay separate.
plugins/catalog.json is the single list of products. The scripts and CI read
it, so adding a plugin starts there.
Releases
Each plugin is versioned and released on its own. Its version is the version
in plugins/<plugin>/plugin/Cargo.toml. A tag <plugin>-v<version>, for example
temper-v0.1.0, starts the release workflow. The workflow builds, checks and
publishes that plugin's Windows ZIP to a Gitea release. See
docs/releases.md.
Roadmap
docs/ideas.md lists the production problems the suite targets, the released plugins and the ideas for the next ones.
License
ISC, see LICENSE. The embedded Roboto Condensed fonts are under the SIL Open Font License (OFL.txt).







