ROADMAP
The changelog records completed details. This roadmap keeps only milestone outcomes, the next planned feature phases, and work that is still open.
Completed milestones
0.6: Special ReaEQ handling
- Dedicated six-band ReaEQ editor with X32 EQ-section and high-pass controls.
- Typed frequency, gain, Q, bypass, enable, and filter-type mapping through REAPER's API and named ReaEQ parameters.
- Direct XRGB8888 graph renderer with a 256-point aggregate response.
- Pixel-exact server-calculated aggregate and active-band curves, transported in the versioned XREQ binary block and rendered with colored 0 dB fills.
- Hardware-verified control routing, display updates, and responsive redraws.
0.7: Architecture and reliability
- Central Surface status/write cache for faders, LCDs, LEDs, encoder rings, navigation, and coherent channel-strip updates.
- Central screen routing and selected-track detail subscriptions for Sends and FX.
- Immutable server snapshots with track-bound optimistic client overlays.
- Server snapshot outbox plus explicit generic FX and ReaEQ mapping caches.
- Stable reconnect, selection, detail-request, and motor-fader behavior on Linux, Windows, and X32 hardware.
0.8: Hardware feedback and release hardening
- Model-specific support for X32 Fullsize, M32 Live, X32 Compact, M32R Live, and X32 Producer.
- Reproducible OpenX32 image builds and deploy-time diagnostics.
- Single-pass in-situ yyjson parsing on the client and strict XREQ validation.
- Low-latency ReaEQ control-to-display delivery without redundant acknowledgement-gated mixer snapshots.
0.9: REAPER automation feedback
- Effective volume and pan follow REAPER automation on all mixer-visible tracks through
GetTrackUIVolPan()and the existing changed-snapshot path. - Hardware validation confirmed motor-fader follow and pan feedback on the active-channel ring and Home/Mixer widget. REAPER retains ownership of
READ/LATCH; Touch behavior is not claimed. - Preserved protocol version 13 and reused bounded snapshot coalescing and the existing client timing histogram.
0.10: Subscribed VU and master-track support
- Added a separate, coalesced VU stream subscribed to the visible fader tracks and master. The server reads REAPER peaks and computes the final integer channel-strip and Fullsize main-meter masks; the client performs no meter threshold or floating-point work.
- Routed meter masks through the central Surface cache, suppressing duplicate UART writes and retaining retry/invalidation behavior.
- Made the Fullsize master select button follow REAPER's authoritative selection state and exposed the selected master's FX chain through the existing Effects screen. Master routing sends remain unsupported to avoid creating loopbacks.
- Blanked the HOME channel-control body while the master is selected and identified the master with a white
MASTERlabel on a dark-red chip in HOME and Effects. - Updated the loud Fullsize Surface initialization to show four diagnostic lines on every Scribble LCD.
- Bumped the wire protocol to version 14. Server and client host tests passed, and the ARM client build succeeded.
The pixel-exact ReaEQ transport shipped in 0.8.3 ahead of the later special-FX phases because it completed and hardened the existing 0.6 feature. Automation feedback was then pulled forward as v0.9.0 because reliable control-surface behavior during playback was more important than starting specialized ReaComp/ReaGate work. Subscribed VU streaming and master-track support were pulled forward as 0.10 to complete fundamental Surface feedback and selection behavior before specialized ReaComp/ReaGate work begins.
Planned special-FX phases
0.11: Special ReaComp handling
0.12: Special ReaGate handling
Deferred work
Correctness
- Fix and regression-test X32-originated ReaEQ gain writes above
+12 dB. REAPER-to-X32 updates work, but X32-originated changes still need to retain the full physical gain range.
Quality
- [ ] Repeat the server ThreadSanitizer run in a compatible CI or container environment and evaluate any reported data races. The local 0.7.1 run could not start because the TSan runtime reported `unexpected memory mapping`.
- [ ] Add a repeatable sanitizer job for the host-based C and C++ tests to keep AddressSanitizer and UndefinedBehaviorSanitizer coverage in CI.
- [ ] Add a focused thread-safety test or documented REAPER-threading review for the poller, snapshot outbox, and network lifecycle.