Architecture decision records
Each ADR records one significant decision: the context that forced a choice, the decision taken, and the consequences that follow. They are append-only — a later ADR may supersede an earlier one, but earlier records are not rewritten.
The decisions are drawn from internal design notes and from the shape of the code under
packages/. Where a decision is implemented today the ADR says so; where it is designed
but not yet built, it says that too.
| # | Decision | Status |
|---|---|---|
| 0001 | Native REAC, not AES67, for Roland stageboxes | Accepted (designed) |
| 0002 | PipeWire-native summing; mod-host for inserts only | Accepted (both built; the live engine diverged — see the ADR's 2026-07-29 note) |
| 0003 | The server is the single source of truth; surfaces are thin clients | Accepted (built) |
| 0004 | One canonical device-neutral model with per-device adapters | Accepted (built) |
| 0005 | Declarative desired-graph reconcile for audio routing | Accepted (built) |
| 0006 | The channel strip is an ordered processor list; the fader is a processor | Accepted (built for inserts) |
| 0007 | Persist routing and scenes by node/port name, never by numeric id | Accepted (designed) |
| 0008 | DCA/VCA is control-domain gain coupling, not an audio sub-bus | Accepted (built) |
| 0009 | C for hot paths, with the PipeWire node as the language boundary | Accepted (built; the inventory of what is C has grown — see the ADR's 2026-07-29 note) |
| 0010 | An auto-generated, metadata-driven plugin editor | Accepted (built) |
| 0011 | Faders are a 0..1 position plus dB, with a per-adapter scale | Accepted (built) |
| 0012 | Menus and config files are two front-ends to one AdapterManager | Accepted (built) |
| 0013 | Latency telemetry is measured in the audio engine | Accepted (built) |
| 0014 | Touch, keyboard, mouse and surface are all first-class input | Accepted (built for web) |
| 0015 | A modular, single-process, multi-window web UI | Accepted (built, incl. in-app window management) |
| 0016 | GPL-3.0-or-later, with no AGPL code copied in | Accepted (built) |
| 0017 | A per-destination output trim, not multiple mains, is the output-gain floor | Accepted (layers 1–2 built; layer 3 sequenced — see the ADR's 2026-07-29 note) |
| 0018 | clock.force-rate is the live re-clock lever; the reported rate is measured from hardware |
Accepted (built) |
| 0019 | Cue/solo is a monitor bus; the monitor auto-takeover is never the mains | Accepted (built; live acceptance pending) |
| 0020 | Plugin tiers are fixed by measured latency; LV2 ships as tiered subpackages | Accepted (built, incl. tiered RPM packaging) |
| 0021 | Time-based FX are send/return channels on the existing summing buses; delay + reverb are native | Accepted (built — mix_delay.h, mix_reverb.h) |