// the find
jxlarrea/kiosk-satellite
Turn any Android device into a beautiful, dedicated Home Assistant kiosk. Purpose-built for Home Assistant from the ground up.
Kiosk Satellite is an Android app that turns a spare tablet into a wall-mounted Home Assistant display. It wraps the HA dashboard in a locked-down WebView and adds a local Assist voice satellite, screensavers, Sendspin music playback, an ESPHome-compatible API, and a Bluetooth proxy. It is aimed at Home Assistant users with an old Android device they want to leave on a wall. The license is CC BY-NC-ND 4.0, so it is free for personal use but cannot be used commercially or redistributed in modified form.
The native Android side carries most of the weight: dozens of Kotlin files plus C++ for WebRTC echo cancellation, wake-word FFT code, and the Sendspin JNI bridge. The Bluetooth proxy reimplements the ESPHome native API in Kotlin, including the Noise handshake in NoiseCore.kt and ApiServer.kt, so Home Assistant can talk to an Android device as if it were an ESPHome node. There are real unit tests for the awkward parts, including BoundedWorkerTest, CameraCapturePolicyTest, the update helper protocol test, and C++ tests for the echo prototype and comfort noise. The author says everything is tested on physical hardware from several manufacturers, which matters because OEM-specific behavior is the main failure mode for a device like this.
The license is the first obstacle for anyone who wants to adopt or build on this. CC BY-NC-ND rules out commercial use and redistribution of modified builds, so the code is source-visible but not open source in the usual sense, and that excludes most forks and integrations. The feature list is very wide for a single APK: voice, music, DLNA, RTSP, intercom, alarms, a BLE proxy, fleet management, a plugin system, and bundled hand and face detection models. Each one adds OEM-specific permissions and lockdown surface, so the device testing matrix grows with every addition. The echo path also carries a vendored patch against WebRTC's audio processing module (webrtc-apm-comfort-noise.patch), which means ongoing maintenance whenever upstream changes. Kiosk lockdown depends on Device Admin, the accessibility service, or Shizuku, so reliability is only as good as each vendor's implementation of those, and the separate device guides for Fire tablets, Portal, and Raspberry Pi suggest that varies a lot.