contribute
everybody is welcome, whether you write the code yourself or with a coding agent
The rules are plain files in the repository, for you to read or for an agent to follow, so every change stays as neat as the rest.
git clone --recurse-submodules https://github.com/Looderso/bambiWhat you need on each system is in docs/BUILDING.md.
how a change goes
- an issueWhat is wrong or missing, and how to change it, agreed before the code. Only a typo or a one-line fix can go straight to a pull request.
- a branchOne branch for the issue, named after it.
- the checksHooks on every commit, tools/verify.sh before the pull request, and the sanitizers and plugin validators for what the change reaches. CI runs the same.
- a pull requestWhat is now true, what it did to the golden renders, a picture from the plugin’s picture tool if the window changed, and whether it was tried in a host.
Pull requests merge into main with a merge commit. The checks, and how to set them up, are inAGENTS.md; more in CONTRIBUTING.md.
working with an agent
Open the repository in your agent and give it the issue. Most agents read AGENTS.md on their own, Claude Code through CLAUDE.md. The agent follows the task’s procedure and runs the matching reviewer; its commits carry its Co-Authored-By line. Trying a change in a host stays a person’s job:docs/HOST-CHECKS.md.
- AGENTS.mdthe rulesHow to build, where things live and the rules every change keeps. Some directories have their own for what holds there.
- docs/what is true, and whyA page per concept, and the decisions behind them, with the routes already tried and rejected.
- skillsthe proceduresStep by step for the recurring tasks: adding a parameter or a plugin, writing a doc, a comment pass, a prototype, issues and pull requests.
- reviewersthe checksFive reviewers to run over finished work: architecture, real-time safety, DSP cost, UI uniformity and wording.
what every change keeps
- Design each thing once.
- A shared component grows an option; a copy of it is a defect.
- The musical logic lives in core/.
- It has no JUCE and is tested in seconds, without a plugin or a host.
- The audio thread only computes.
- It never allocates, frees or locks, and an offline bounce matches playback, sample for sample.
- Tests are mutation-checked.
- Each names the mistake it catches, and making that mistake makes it fail.
- Comments say what the code does.
- Units, invariants, threads, a reason true now; never history, names or references.
- The look comes from one file.
- Colours, sizes and strokes live in the theme and nowhere else.
- Say it the way the audio world says it.
- Automation lane, send, delay tap, HRTF: the words a musician would search for.
The rest, and why, is in AGENTS.md.
other ways to help
report a problem
Open an issue with the plugin, its release and format, your system and host, and what you did, expected and heard. A short session or audio file helps most.
try it in your host
Where bambi has been tried, and what does not work yet, is on status. A host or a system not listed there is worth an issue.
talk to us
Questions, ideas and what you made with bambi: the community is on Discord.
bambi's own code is GPL-3.0-or-later and its plugin builds are AGPLv3. A contribution is licensed the same way.