Contribute
Built in the open
Manguebyte is a large project with a long road ahead, and it only gets there if many people build it together. Contributions are welcome, from typo fixes to whole new crates.
Everything in the repository is in English: code, comments, commit messages, issues and pull requests. Imperfect English is completely fine.
Ways to help
- Report a bug
- Open an issue with what you did, what you expected and what happened. A small program that reproduces the problem is worth a lot.
- Propose a feature
- Open an issue before writing a large change, so the design can be discussed first. The roadmap lists what is planned.
- Improve documentation
- Clearer explanations and better examples are always welcome.
- Write code
- Pick an item from the roadmap or an open issue, comment that you are taking it, and send a pull request.
One rule above the others: clean room
Manguebyte is inspired by what JUCE makes possible, but it contains no JUCE code and must never contain any. JUCE is licensed under the AGPL or a commercial licence, both incompatible with this project’s.
Do use JUCE’s module list, public documentation, changelog, issue tracker and forum to decide what to build and which designs to avoid.
Never copy, translate or paraphrase JUCE source code, and do not write an implementation with the corresponding JUCE implementation open. The same goes for any other project whose licence is not compatible with MIT or Apache-2.0.
Work from specifications, standards, papers, textbooks and your own knowledge. The reasoning is in ADR 0004.
Set up and check
You need a stable Rust toolchain, 1.85 or newer, with rustfmt and clippy. On Linux, also the ALSA development headers.
Before opening a pull request, run the same checks the CI runs. One script does all of them and stops at the first failure:
./scripts/check.sh
A pull request should do one thing and say what and why; include tests for new behaviour and for fixed bugs; document every public item; and keep the build free of warnings.
Writing real-time code
Code on the audio thread has a deadline of a few milliseconds, every time. In Processor::process and anything it calls:
- Do not allocate or free memory. Allocate in
prepare. - Do not lock. Use atomics or the wait-free queue.
- Do not block or do I/O. No files, no network, no printing.
- Do not panic. Validate in
prepare, and clamp instead of asserting.
These rules are enforced: a test replaces the allocator with one that counts and fails if a processor touches the heap while processing. When you add a processor, add it to that test.
Licence of contributions
Manguebyte is dual licensed under MIT and Apache-2.0. Unless you explicitly state otherwise, any contribution you intentionally submit for inclusion in the project, as defined in the Apache-2.0 licence, is dual licensed in the same way, without any additional terms or conditions.
Conduct
Be kind, be patient and assume good faith. Criticise code, not people. This project wants contributors of every background and experience level, and harassment or disrespect of any kind is not accepted.
Where to go
The full contributing guide Issues on GitHub The roadmap Write to the author