Contributing to Ioruba
Thanks for contributing code, firmware, documentation, translations, tests, or hardware support.
Before you start
- Search existing issues and the roadmap.
- Keep changes focused; discuss large architecture or product changes before implementing them.
- Do not commit secrets, generated coverage/build output, local tool state, or release credentials.
- Preserve the active stack; retired legacy build surfaces must not be reintroduced.
Repository areas
| Area | Path | Notes |
|---|---|---|
| Desktop UI | apps/desktop/src |
React, Zustand, serial runtime, profiles, telemetry, and desktop UX. |
| Rust shell | apps/desktop/src-tauri |
Tauri commands, persistence, watch logging, platform audio, tray, and updater. |
| Shared domain | packages/shared |
Types, defaults, protocol, validation, presets, and runtime math. |
| Firmware | firmware/arduino/ioruba-controller |
Parametric Arduino sketch and host parser tests. |
| Documentation | README.md, root manuals, docs/ |
Canonical Markdown and PT-BR mirrors. |
| Docs theme | docs-site/ |
GitHub Pages layouts/navigation/styles, not canonical guide content. |
Protocol and knob-to-value behavior belong in packages/shared; components should use typed wrappers from apps/desktop/src/lib/backend.ts rather than calling Tauri invoke directly.
Local setup
Prerequisites are listed in the README. Install dependencies from the repository root:
npm install
Run the standard gate:
npm run verify
npm run firmware:compile
For the full native shell:
npm run desktop:watch
Make and validate changes
Use the narrowest relevant checks while iterating, then run the complete required gate.
| Change | Minimum validation |
|---|---|
| Shared TypeScript | npm run shared:typecheck && npm run shared:test |
| Desktop frontend | npm run desktop:typecheck && npm run desktop:test && npm run desktop:build |
| Rust/Tauri | cargo fmt --check --manifest-path apps/desktop/src-tauri/Cargo.toml, clippy, npm run rust:test, and npm run desktop:tauri:build |
| Firmware | npm run firmware:test && npm run firmware:test:wide && npm run firmware:compile:matrix |
| Installer/scripts | npm run lint:scripts && npm run test:installer |
| Packaging/updater | npm run test:packaging |
| Documentation | link/fact review plus npm run docs:prepare-site |
| Release preparation | npm run release:check |
See TESTING.md for exact commands and the CI matrix.
Development conventions
- Add or update tests alongside behavior changes.
- Keep Rust ↔ TypeScript audio shapes synchronized; see the audio backend contract.
- Preserve explicit unsupported outcomes on platforms without a target implementation.
- Keep persisted-state additions backward compatible and update normalization in
packages/shared/src/validation.ts. - When changing protocol behavior, document compatibility and update firmware/shared tests together.
- Do not hand-edit generated package checksums or updater manifests.
- If changing the app icon source, regenerate assets with
npm run desktop:icons. - Follow the instrument-panel/studio-lab direction in
.impeccable.md; keep connection and diagnostic state obvious. - Maintain keyboard and screen-reader behavior and extend accessibility tests for new UI surfaces.
Documentation and translations
When behavior, commands, paths, defaults, platform coverage, or release operations change:
- update the canonical English document;
- update the PT-BR mirror when one exists under
docs/translations/pt-br/; - update
docs/index.mdor site navigation if a document is added/moved; - run
npm run docs:prepare-site; - verify examples against current code—especially firmware version, 115200 baud, profile shape, and platform support.
docs-site/ contains the site shell. Generated .site-src/ content must not become the source of truth.
Pull requests
A good pull request:
- explains the problem and why the chosen solution fits;
- links the issue/spec when applicable;
- lists user-visible and compatibility effects;
- includes tests or explains why none are needed;
- includes screenshots/video for meaningful UI changes;
- updates docs and translations;
- keeps unrelated formatting/refactors out of the diff.
Before requesting review, confirm:
npm run verifypasses;npm run desktop:tauri:buildpasses for native-shell changes;- relevant firmware checks pass for firmware/protocol changes;
- relevant script/packaging checks pass;
- docs generation succeeds;
- no secrets or generated local artifacts are included.
Reporting bugs
Use the support playbook to collect useful context. Include OS/version, Ioruba version, board, firmware handshake, serial port/baud, relevant profile excerpt, Watch export, reproduction steps, and expected/actual behavior. Redact personal paths or device information before posting logs.
By contributing, you agree that your contribution is licensed under the project’s MIT License.