Releases: aa-proxy/aa-proxy-rs
Release list
v0.22.0
What's Changed
@Deadknight's work:
- Protocol Version Override & Vehicle Energy Forecast
- Added Android Auto transport and Wi-Fi protocol version override support for unlocking phone-side features gated by newer HU PDK versions.
- Improved override logic to only apply when the head unit advertises an older version than the configured target.
- Added automatic handling and filtering of override-induced
VehicleEnergyForecastandMediaOptionsmessages for compatibility with older head units. - Added Vehicle Energy Forecast publishing over WebSocket (
vehicle_energy_forecast) for companion applications. - Added caching and intelligent merging of partial or null Vehicle Energy Forecast updates to improve data stability.
- Added support for additional Android Auto protocol message IDs, including Vehicle Energy Forecast and new Media message types.
- Album Art Injection
- Added EV energy forecast integration into media metadata with configurable text placement modes.
- Replaced the legacy EV prefix toggle with a flexible
map_album_art_ev_text_modeconfiguration supporting multiple metadata injection strategies. - Improved synthetic metadata generation with placeholder title support for artwork-only updates.
- Added automatic polling of H.264-derived artwork to ensure updates are emitted even without subsequent metadata packets.
- Fixed EV metadata prefix expiration handling and improved metadata synchronization reliability.
- MITM Diagnostics & Debugging
- Added optional full-frame packet reassembly for decrypted packet debugging and protocol inspection.
- Added internal SSL packet trace ring buffer infrastructure for future TLS diagnostics and troubleshooting.
- Improved packet debug logging by reducing media-fragment log noise and enhancing protocol message visibility.
- USB Gadget Compatibility
- Added configurable accessory-start gating to avoid stale Android Auto accessory sessions.
- Added USB gadget re-arm support with configurable cooldowns for head units that do not fully power-cycle USB during sleep/wake cycles.
- Improved connection retry handling and gadget enable failure reporting.
- Display & Media Handling
- Fixed acknowledgement window handling for injected AUX displays.
- Improved injected display media flow compatibility and ACK synchronization.
- Build System
- Added configurable fast-release build profiles for cross-compilation Docker images.
- Improved Docker build output handling and profile selection flexibility.
@manio's work:
- TLS / SSL Backend Migration
- Replaced the OpenSSL-based TLS implementation with a Rustls backend using AWS-LC.
- Added compatibility workarounds for Android Auto's legacy X.509 v1 certificates.
- Restored detailed TLS handshake progress logging and negotiated cipher suite reporting.
- Fixed TLS role assignment between head unit and mobile device connections.
- Improved TLS read/write buffering by properly draining TLS records and handling partial writes.
- Fixed TLS decryption handling for
WouldBlockconditions. - Disabled TLS session resumption to avoid interoperability issues between OpenSSL and Rustls sessions.
- Improved certificate verification compatibility for Android Auto certificate chains.
- Development Tooling
- Added pre-commit hook support for automatic
cargo fmt. - Updated project documentation and development workflow files.
- Added pre-commit hook support for automatic
@korhojoa's work:
- Display Profiles & Runtime Optimizations
- Improved injected media channel handling by preventing media fragments from being interpreted as control messages.
- Enabled LTO, stripping, and single codegen-unit release optimizations for smaller and faster binaries.
- Enabled
panic=abortfor release builds to reduce binary size while preserving crash reporting.
Full Changelog: v0.22.0...v0.23.0
Buildroot:
- no changes
v0.21.0
What's Changed
@Deadknight's work:
-
Introduce Bluetooth-based Android Auto Wireless proxy and car Wi-Fi MITM implementation:
- Added new proxy modes (
car-wifi-mitm,proxy_ap,external_ap) with AP+STA and dual-radio support. - Improved HU pairing, SDP discovery, rendezvous handling, connection sequencing, recovery, retries, and compatibility with stricter head units (including MBUX).
- Added Wi-Fi join backends (
wpactrl,wpa_supplicant) and configurable timeouts. - Added keepalive handling, TCP connection synchronization, route recovery, smarter Wi-Fi bootstrap processing, and improved reliability during wireless Android Auto startup.
- Introduced configurable kernel module preloading, firmware path configuration, and enhanced USB Wi-Fi adapter support.
- Added optional Bluetooth passthrough service allowing Android Auto HFP/call audio to use the head unit's native Bluetooth adapter when aa-proxy-rs is in the middle.
- Added new proxy modes (
-
Companion Bluetooth
- Replaced the legacy BLE/GATT companion transport with a Classic Bluetooth RFCOMM implementation.
- Added persistent pairing agent, SPP fallback profile for improved Android compatibility, and HMAC-SHA256 authentication for companion connections.
- Improved companion Bluetooth output formatting and protocol consistency.
-
Album Art Injection
- Reworked media playback channel discovery and synchronization.
- Added synthetic metadata fallback when no metadata template is available.
- Improved album art injection reliability, optional duration-tick workaround, PNG size handling, and H.264 diagnostics/logging.
-
Vendor Extensions
- Added binary REST response support with automatic Base64 encoding for non-text payloads.
- Improved response fragmentation logic and transfer performance.
- Removed unused vendor extension helper functions.
-
Web Interface & API
- Added GET
/config-data-treeendpoint exposing the complete configuration tree. - Added mobile long-press labels/tooltips.
- Replaced browser alerts with snackbar notifications for configuration saves.
- Reorganized Bluetooth Wireless Proxy configuration sections in the UI.
- Added GET
-
Display Profiles
- Added
content_insetsandstable_content_insetssupport to display profiles by @korhojoa - Removed legacy duplicated inset fields and unified inset handling.
- Added
-
Web input improvements by @fkloft in #109:
- Added rotary input support, visual rotary feedback, and expanded keypad controls.
-
Fix: allow reconnect after manual disconnect by @wiskiw in #112
New Contributors
Full Changelog: v0.20.1...v0.21.0
Buildroot:
- Added aa-proxy-obd package by @kronflux
- Add legacy crypto support for Dropbear package by @korhojoa
Full BR Changelog: aa-proxy/buildroot@b0f31bd...1ca6bcd
v0.20.1
Changes in this version:
- Hotfix release addressing DHCP problem
Full Changelog: v0.20.0...v0.20.1
Full BR Changelog: aa-proxy/buildroot@0fc356f...b0f31bd
v0.20.0
Warning
This release contains known networking issues and should not be used.
Please upgrade to the latest hotfix release.
Changes in this version:
- Dual I/O backend: new standard tokio backend alongside io-uring; io-uring is now an optional feature flag, enabling support for platforms with older kernels
- Bluetooth: round-robin connection across multiple devices β each device gets a chance every round instead of exhausting all attempts on one before moving to the next
thanks: @juggie - Bluetooth: persist known AA devices to disk; wildcard connect (00:00:00:00:00:00) now uses a local cache of previously successful sessions instead of scanning all paired devices
thanks: @juggie - BT SCO/eSCO call-audio bridge (
bt_sco) β route phone call audio through AA media/microphone channels; includes downlink resampling, echo/ducking control, and media/mic bridge sub-features
thanks: @Deadknight - Injected display support: cluster and auxiliary displays can now be declared in
inject-displays.tomlwith per-profile frame rate, touchscreen flag, density, and initial_content_keycode
thanks: @korhojoa, @Deadknight - Media tap endpoint registry with on-demand reverse TCP bridge to companion app (
POST /media-taps/:id/open)
thanks: @Deadknight - Album art injection: replace phone album art with a static file, REST-uploaded PNG, companion app upload, or a live H.264 frame decoded from an injected display
thanks: @Deadknight - Per-vehicle SDR UI override profiles (
sdr-ui-overrides.toml) β patch content insets and margins per head unit identity, with optional per-phone sub-profiles
thanks: @Deadknight - Vendor Extension Channel (VEC) wired into packet processing pipeline; VEC REST calls and WebSocket topic events routed through WASM scripts
thanks: @Deadknight - WASM: scripts now persist state across calls; on-create/on-destroy lifecycle hooks; per-script config sections exposed in web UI; configurable resource limits (memory, instance, table, epoch deadlines); configurable hooks directory
thanks: @Deadknight - Packet debug mode (
pkt_debug) with fine-grained filtering by side, stage, service kind, channel/message ID lists, payload truncation, and pretty-printed protobuf
thanks: @Deadknight - Config: nested sections with subsections, collapsed_by_default, requires dependency gating (truthy / equals / contains / all-of)
thanks: @kronflux - Config dashboard redesign: nested sections, dependency gating (requires), advanced toggle, dropdown selects, chip-based multi-select widget, dark card layout with sliding controller drawer
thanks: @kronflux, @Deadknight dashboard-previewexample binary for local web UI development
thanks: @kronflux- aa_server_tcp_addr config option for direct MD TCP mode, bypassing the BT/Wi-Fi handshake entirely
thanks: @Deadknight - REST endpoint
GET /service-discovery-responseβ returns the last observed SDR as protobuf JSON
thanks: @Deadknight - REST endpoint
GET /crashes,GET /crashes/:filename,DELETE /crashesβ panic handler writes timestamped crash reports to disk
thanks: @Deadknight POST /disconnectβ sends a graceful ByeByeRequest to the phone before tearing down the session
thanks: @korhojoaiw listcalled once at startup and cached β eliminates up to ~9 duplicate subprocess spawns duringAppConfig::default()- Configurable wireless subnet (
wlan_subnet) β dnsmasq and network interface configs generated from templates - Cancelled orphaned tcp_bridge tasks on session end to prevent background reconnect loops
Full Changelog: v0.19.0...v0.20.0
Full BR Changelog: aa-proxy/buildroot@5f30fb4...0fc356f
v0.19.0
Changes in this version:
- Media stream TCP tap (
media_dump_base_port) β inspect the decrypted AA video/audio stream in VLC, mpv, etc.
thanks: @korhojoa - Added SWUpdate OTA (over-the-air) update support for all Raspberry Pi boards
thanks: @Snirpo - WASM scripting via
wasmtimeβ write hooks that modify AA packets on the fly; disabled on ARMv6 (RPi Zero W)
thanks: @Deadknight - Key event injection (
/inject_event) and rotary controller support (/inject_rotary) - Speed data collection and
/speedendpoint
thanks: @Deadknight - WebSocket support for the companion app β real-time sensor data streaming
thanks: @Deadknight - Odometer injection via REST API (
/odometer) - Tire pressure injection via REST API (
/tire-pressure) β for head units that don't provide this data natively - Media button interception on the HU β short press re-injects a clean click, long press triggers a configurable script (
hu_button_handler)
thanks: @Ioniq3 - TCP reverse bridge for SWUpdate, enables OTA updates from the companion app
thanks: @Deadknight /versionendpoint returning software version, board model and board prefix
thanks: @Deadknight- WASM scripts can call the local REST API (
rest-call,rest-call-async) and push events over WebSocket
thanks: @Deadknight /config-entryendpoint for updating a single config key without sending the entire config object- Bluetooth: proper graceful RFCOMM shutdown before disconnect
thanks: @Ioniq3 - SSL MITM: automatic fallback to non-MITM mode on SSL error (until restart)
thanks: @juggie
Full Changelog: v0.18.0...v0.19.0
Full BR Changelog: aa-proxy/buildroot@5ca19d9...5f30fb4
v0.18.0
Changes in this version:
The most important change in this release:
Some electric vehicle head units (HUs) expose battery SOC data via the SENSOR_FUEL field. This adds support for that method, enabling EV features in Google Maps to work without requiring an external data logger (e.g. OBD or other sources).
By default, the HU does not send fuel_data, so it must be explicitly requested. Normally, this data becomes available only after launching a client application such as ABRP or Home Assistant on the phone.
thanks: @Snirpo
and also:
- bluetooth fixes (thanks: @Ioniq3)
/battery-statusendpoint for last battery data
Full Changelog: v0.17.0...v0.18.0
Full BR Changelog: No changes
v0.17.0
Changes in this version:
-
more complete MITM/
video_in_motionfunction again
thanks: @j4ckp0t85 -
compatibility fixes
Full Changelog: v0.16.0...v0.17.0
Full BR Changelog: aa-proxy/buildroot@87ceae0...5ca19d9
v0.16.0
A lot of changes in this version:
-
new Buildroot version (updated package versions)
-
performance improvements (
f_accessorydriver, main data transfer loop)
thanks: @ochakov -
many fixes for Radxa ZERO 3W:
- new kernel
- new AIC8800 drivers
- Wi-Fi optimization
- option to switch between internal/external antenna
- smaller kernel size
- improved boot time
thanks: @PugzAreCute
-
improved MITM/
video_in_motionfunction
thanks: @j4ckp0t85
Full Changelog: v0.15.0...v0.16.0
Full BR Changelog: aa-proxy/buildroot@0f0031a...87ceae0
v0.15.0
Release Highlights:
- Initial release with added support for AAWireless 3.
- Fixed 5β―GHz support for AAWireless TWO devices.
Full Changelog: v0.14.0...v0.15.0
Full BR Changelog: aa-proxy/buildroot@dc388ab...0f0031a
v0.14.0
Release Highlights:
- This is the initial release with added support for the Milk-V DUO S single-board computer.
Full Changelog: v0.13.0...v0.14.0
Full BR Changelog: aa-proxy/buildroot@1eeca56...dc388ab