Skip to content

Contributing

OpenRig is developed in the open on GitHub. Every kind of help is welcome:

  • Reports: open an issue with your board, interface, version and what happened. Reports from real x86_64 mini PCs and from other audio interfaces are especially useful.
  • Pull requests: fork, branch, and open a pull request against main.
  • Documentation: this site is in its own repository; every page has an edit link at the bottom.

Every pull request runs cargo fmt --check, cargo clippy and cargo test. Run them locally first. tests/lv2_hosting_test.rs compiles a small LV2 plugin with the system’s C compiler and runs it through the host, so LV2 hosting is tested without any plugin installed.

Commit messages follow conventional commits: feat:, fix:, perf:, docs:, ci:… Versions follow semantic versioning and are computed from them.

release-plz keeps a release pull request with the next version and its changelog. Merging it tags the release; a workflow then builds the app for Linux x86_64 and aarch64, the OS images and the signed updates, and attaches them to the release.

Code that runs in the audio callback must not allocate, lock (other than try_lock), log or do I/O. When in doubt, do the work on the chain builder thread and send the result.

The app must not crash at runtime, and Clippy enforces it (tests are exempt):

  • no unwrap, expect, panic! or todo!: return a Result (anyhow in the app, thiserror where callers match on the error), or handle the case with a default, an early return or a skipped item, logged when something was lost;
  • no indexing or slicing that can go out of bounds on data from outside (files, plugins, the network, the user): get, split_first, iterators;
  • locks through crate::sync::MutexExt::locked() and its siblings, so a panic elsewhere does not poison the rest of the app;
  • unsafe only where there is no safe way (LV2, JACK, NAM, libc, the hand-off to the DSP workers), each block with a // SAFETY: comment.

Logs go through tracing: syslog on the OS image, the terminal on a desktop. A message is a short sentence with what varies in fields:

warn!(path = %path.display(), error = %e, "Preset skipped");

error when a feature is lost, warn when something was worked around, info for lifecycle and configuration, debug for developers (RUST_LOG=debug). Never on the audio thread.

OpenRig is GPL-3.0-or-later. By contributing, you agree to license your contribution under the same terms.