New Features
- Transport-agnostic networking layer — decouples networking from WiFi, enabling Ethernet and other transports (#940) — @dirkwa
- ESP32-P4 support — ESP-IDF build environment, Ethernet provisioner, and Bluedroid PoC example (#942) — @dirkwa
- Signal K delta context grouping — group delta messages by context for more efficient communication (#866)
- WebSocket reconnect with exponential backoff — replaces fixed reconnect interval (#931)
- PUT metadata support — add
supportsPutto metadata (#939) — @joelkoz
Security Hardening
- Store admin password as HA1 hash instead of plaintext
- CSRF protection on destructive HTTP endpoints
- Config payload size limit to prevent memory exhaustion
- Redact auth token in debug logs
- Cap nonce list size and received_updates queue to prevent OOM
- Fix nonce count initialization and tolerance window
Bug Fixes
- Concurrency: Fix data races in DigitalInputChange, SemaphoreValue, SafeQueue (single-core ESP32), request_map_, received_updates
- Memory safety: Fix use-after-free in WS restart, double-free in SSL detection, dangling pointers in OTA password and admin credentials, VLA → heap allocation, memory leaks in CurveInterpolator and HTTP config handler
- Transforms: Fix correctness bugs in Frequency, VoltageDivider (div by zero), Hysteresis, TimeCounter, MovingAverage
- WebSocket: Finite send timeouts, handle send failures on closed socket (#860 — @joelkoz), ignore control frames, clear stale polling href on 404 (#945 — @dirkwa)
- System: Static semaphore/mutex allocation, cancel event loop callbacks on destruction, fix Observable move constructor, strong reference in connect_to(shared_ptr)
- Networking: Backward compatibility typedefs for WiFiStateProducer and Networking, set Ethernet hostname in correct event, guard Network.h behind Arduino 3.x check — @dirkwa
- Connect without token when server security is disabled (#852 — @dirkwa)
- Fix PersistingObservableValue math operators (#938 — @joelkoz)
- Do not specify "unit" for bool types to avoid KIP breakage (#939 — @joelkoz)
- Fix deprecated volatile increment operator warnings (#854 — @dirkwa)
- Fix UUID version 4 bits, ODR violations, LED pattern index bounds
Other
- CI: Test compilation matrix, pull_request event triggers
- Frontend correctness and type safety fixes
- Replace deprecated AnalogInput with RepeatSensor in examples (#853 — @dirkwa)
Contributors
Thanks to @dirkwa and @joelkoz for their contributions to this release!