First of all: thank you for even thinking about contributing. 🐷 Moduleur is an open hardware project that we want to keep hackable, reproducible, and buildable for other people. Good contributions help us keep it that way.
This document explains how we work on the project and how you can get changes merged.
-
Small fix (typo, BOM update, docs):
- Branch from
main - Make the change
- Open a PR into
main
- Branch from
-
New features / module revisions / Brain stuff:
- Branch from
next - Open a PR into
next
- Branch from
-
Not sure where it belongs?
- Open an issue first and we’ll figure it out together.
At the top level you’ll find:
modules/– all analog + digital modules (power, VCO, VCF, ADSR, VCA, Brain, etc.)enclosure/– Moduleur enclosure and related mechanical partseurorack/– generic Eurorack frame / rails / faceplatesaccessories/– extra tools and add-onslib/– KiCad components and footprints
Each module directory is intended to be self-contained:
- KiCad project and schematics
- Gerbers / production files
- BOM(s) for different vendors
- Panel / mechanical files
- A short module-level
README.md(what it does, status, quirks)
If you add or change anything, please keep this structure intact.
We use branches, not folders, to separate stable and in-progress work.
-
main- Always points to the latest stable, buildable release.
- What the website and build guide assume.
- Safe for people who just want to build the synth.
-
next- Ongoing development for the next hardware/firmware revisions.
- New modules, Brain features, bigger refactors.
-
Tags
- We tag releases as
vX.Y(e.g.v1.0,v1.1). - Tags capture the state of the whole system at a given release:
- module revisions,
- enclosure version,
- Brain firmware version.
- We tag releases as
-
Target
mainif:- You’re fixing a bug or typo in the current build docs
- You’re updating a BOM for the currently recommended module revision
- You’re correcting silkscreen notes, simple wiring diagrams, etc.
-
Target
nextif:- You’re working on a new module revision (revB, revC…)
- You’re changing circuit topology
- You’re adding or changing Brain firmware / SDK APIs
- You’re adding new accessories, utilities, or enclosure variants
If you opened a PR to the "wrong" branch, no stress — we can help retarget it.
Useful things people can help with:
-
Hardware
- Improvements to module schematics or layouts
- Better protection, noise performance, or reliability
- Fixes for known issues (please document measurements)
-
Firmware / Brain / SDK
- New Brain programs (sequencers, utilities, weird digital voices)
- Improvements to the Brain SDK and examples
- Better documentation for the API and build setup
-
BOMs & production files
- Replacing obsolete parts with drop-in alternatives
- Fixing quantities or part numbers
- Adding notes about supply issues or known good substitutes
-
Docs
- Clarifying build steps
- Adding module-specific notes or troubleshooting tips
- Fixing broken links, typos, or unclear wording
If you have a wild idea (new module, expansion, etc.), open an issue and pitch it.
Before opening an issue:
- Check existing issues to see if it’s already reported.
- Make sure you are:
- On the latest release (or clearly state if you’re not)
- Using the documented build guide and BOMs
When opening a new issue, please include:
- Module name and revision
- e.g.
02-vco revA,01-power revB
- e.g.
- Branch / tag
- e.g.
main@v1.0,nextas of2025-12-10
- e.g.
- Power & environment
- Supply voltage(s)
- What other modules are connected
- What you expected vs what you see
- Audio / scope screenshots if possible
- Steps to reproduce
- The simpler the better
For firmware issues, add:
- Brain firmware version / commit
- Host toolchain (OS, compiler version, etc.)
- Exact steps to trigger the bug
The more detail you give, the easier it is for us (or someone else) to reproduce and fix.
- Fork the repo on GitHub.
- Create a branch from the correct base:
mainfor small docs/BOM fixesnextfor new features or hardware/firmware changes
- Make focused changes
- One logical change per PR if possible.
- If you’re changing both circuits and docs, keep them in the same PR if they’re tightly related.
- Keep style & structure
- Don’t rename files or move folders around unless it’s the point of the PR.
- Follow existing KiCad and code conventions where possible.
- Update docs
- If you change how something works, update:
- module
README.md - any relevant top-level docs or links
- module
- If you change how something works, update:
- Open the PR
- Give it a clear title
- In the description:
- Explain why you’re making the change
- Link any related issue(s)
- Call out breaking changes or migration steps for builders
We’ll review, maybe ask questions, and merge or request changes.
Because this is open hardware people will build at home:
- Don’t silently break footprints or pinouts
- If you change connector pinouts, supply rails, or control ranges:
- Document it in the module
README.md - Note it in the PR description
- Document it in the module
- If you change connector pinouts, supply rails, or control ranges:
- Keep modules self-contained
- All files needed to manufacture and build a module should live in its directory:
- KiCad project
- Gerber / production zip(s)
- BOMs for at least one major vendor (JLCPCB, Mouser, etc.)
- All files needed to manufacture and build a module should live in its directory:
- BOM changes
- Prefer drop-in replacements (same footprint / orientation).
- If electrical behaviour changes, add a short note (e.g. “slightly higher noise floor, but easier to source”).
- Test notes are gold
- If you improve or modify a circuit:
- Add measurements (scope shots, frequency response, noise floor, etc.) when you have them.
- Even rough notes are better than nothing.
- If you improve or modify a circuit:
We’d rather have a slightly “boring” but well-documented circuit than something magical that nobody can debug.
For code in lib/ and Brain-related modules:
- Language & style
- C/C++ code should follow the existing style in the repo as much as possible.
- Use clear naming and plenty of comments for hardware-touching code.
- APIs
- Be conservative with breaking changes to public SDK APIs.
- If you do need to break something:
- Note it clearly in docs
- Consider keeping a compatibility layer or deprecated path for one release.
- Examples
- If you add a new feature, try to add or update at least one example firmware that uses it.
- Platform assumptions
- Mention any assumptions about clock rates, core usage, or specific MCU features.
We don’t have a heavy rulebook, but a few simple things help:
- Keep lines reasonably short and readable.
- Prefer clear variable names over clever ones.
- Avoid adding big binary files (renders, huge images, etc.) to the repo.
- If you use a formatter or linter, apply it project-wide, not just to a few random files.
If you’re unsure about tooling, just open a PR and we can bikeshed it there.
Short version: be nice.
- No harassment, hate speech, or personal attacks.
- Respect that people build these projects in their free time.
- If something bothers you, raise it constructively in issues or PRs.
We want this to stay a friendly place for people who like music, design, and hacking — in whatever order.
If you’re not sure where to start:
- Open an issue with your idea or question.
- Or ping us with:
- what you want to do,
- which module / part of the repo it touches,
- and whether you’re thinking hardware, firmware, or docs.
We’re happy to help you shape a contribution that fits the project.
Thanks again for helping us make this weird modular synth better. 🐷🧪