Overview
How the monorepo is organized and the rules that apply to any contribution.
Acerola is a monorepo: each platform lives isolated under acerola/, with its own stack, its own README, and its own full contribution guide. No platform depends directly on another — they all consume the shared libraries in lib/ via a local path dependency (not git), so a change in lib/p2p/ already reflects in every consumer without publishing or updating anything elsewhere.
acerola/android/ and acerola/desktop/ never see each other directly — each implements its own FFI/binding to consume lib/p2p/. All communication between devices is either direct P2P (LAN via mDNS) or through the relay (acerola/relay/, built on top of lib/relay/) when devices aren’t on the same network.
Tools you need
cargo-make (cargo install cargo-make) is used by the individual Rust crates — see each platform’s guide — and by the maintenance tasks for the whole monorepo, defined in the root Makefile.toml. With it installed, cargo make clean removes the target/ directory of every Rust crate in the repo (lib/p2p, lib/relay, acerola/desktop/src-tauri, acerola/android/native/rust) in one go.
Rules that apply to the whole monorepo
- One platform per PR: a PR should touch a single platform (
acerola/android/,acerola/desktop/,acerola/relay/,lib/p2p/orlib/relay/), except for changes that are genuinely shared (root docs,LICENSE,PRIVACY_POLICY.md). - Commit convention:
[tag](platform): description, e.g.[fix](desktop): fix connection leak in the reader.tagfollows the prefixesfeat,fix,docs,refactor,test,chore,ci,merge;platformisandroid,desktop,p2p,relay(foracerola/relay/),relay-lib(forlib/relay/) ormonorepofor root-level changes. - Tests: each platform has its own runner and its own automation via
cargo-make/Gradle/Vitest — check the platform-specific guide before running tests manually. lib/p2pis a localpathdependency:acerola/androidandacerola/desktopconsumelib/p2pby relative path inCargo.toml, notgit. A change inlib/p2p/already applies to both consumers in the same PR.
The next pages in this section cover how to run and test each platform locally. For everything else (detailed code standards, full environment setup), the platform-specific guide is the source of truth.