Architecture
How Android, Desktop, Relay, and the shared libs connect, and how device sync works.
Acerola is a monorepo: each platform lives isolated, with its own stack, and none depends directly on another. They all consume the shared libraries in lib/ via a local path dependency — a change in lib/p2p/ already reflects directly in every consumer.
How the pieces connect
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 a relay when devices aren’t on the same network.
How sync works
Library, history, and reading progress sync directly between the user’s own devices — no account, no central database. How the connection happens depends on where the devices are and what’s been configured:
The four connectivity modes:
In all four cases the handshake and transport are the same (QUIC + TLS 1.3 via iroh) — only who brokers the connection changes when devices aren’t on the same network. Details on what metadata each mode exposes live in the Privacy Policy.