Turn any Android tablet into a smart display that listens on the device.
DashVoice is a smart home voice assistant, a Home Assistant dashboard, and a synchronized multiroom speaker in one app. Wake word and speech recognition run entirely on the tablet — your microphone audio never leaves the device. What you do with the transcript (your HA agent, TTS, music) is yours to keep local or send to a cloud you chose.
Give the tablet in your drawer a second life: mount it on the wall, say "Hey Jarvis, turn on the kitchen lights", and it just works. The tablet isn't only showing your smart home — it's part of it. It listens, it answers, it announces, it rings, and it plays music in sync with every other tablet in the house.
DashVoice was born out of frustration. For years, we used Fully Kiosk Browser with Home Assistant to create wall-mounted tablet dashboards. Fully Kiosk is excellent for displaying dashboards, but it couldn't do the one thing we really wanted: voice control.
We wanted to say "Hey Jarvis, turn on the lights" and have it just work — without shipping the audio of our house to somebody's server, and without a monthly fee. Just a tablet on the wall that listens for a wake word and controls our smart home.
Then we wanted music. Not just on one tablet, but synchronized across every room. So we added Sendspin multiroom audio, and now every DashVoice tablet is also a speaker in your whole-home audio system.
So we built DashVoice.
- Encrypted Sendspin with Music Assistant 2.10 (Noise). Setup → allow playback without pairing; leave Allow legacy clients on until that player has played. First encrypted connect may mint a new player id.
- More reliable wake after the room has been quiet for hours
- Screensaver stays up during voice; Wand on the photo strip
- Optional tablet camera JPEG for Frigate (off by default)
- Stronger local HTTP API passwords; Android 16 (
targetSdk 36)
Full notes: CHANGELOG.md.
- Custom wake words - "Hey Jarvis", "Okay Nabu", and more (fully on-device via openWakeWord)
- On-device speech recognition - Using sherpa-onnx, so there's no internet round-trip just to understand you. Or leverage the Wyoming protocol for Home Assistant's voice pipeline
- Your audio never leaves the tablet - Only the transcript travels, only after the wake word, and only to your own Home Assistant
- Natural language commands - Handled by whichever conversation agent you've set up in HA, via the Conversation API
- High-quality TTS - Via Piper or OpenAI-compatible endpoints like Kokoro
- Typically 1-2 seconds from wake word to spoken reply on Tab S7-class hardware
Some things shouldn't need a server at all. Timers and announcements are matched and handled on the tablet itself — they keep working when Home Assistant is unreachable.
- Native timers - "set a pizza timer for twelve minutes". Multiple named timers at once, pause/resume/cancel by voice, a full-screen alarm when they fire, and they survive an app restart
- Announcements - "announce that dinner is ready" lights up every tablet in the house with a full-screen card, a chime, and the spoken message
- No conversation agent involved - no LLM, no network round-trip, no cloud dependency
See Announcements & timers below for the phrases that work.
- Music Assistant integration - Each tablet registers as a speaker in your whole-home audio system
- Encrypted Sendspin - From 0.1.587 the Music Assistant link uses Noise encryption on your LAN (not a plaintext WebSocket). Allow unpaired playback in MA; a pairing PIN is not required
- Synchronized playback - Time-synced audio across DashVoice tablets using the Sendspin protocol. Plays in step across rooms; start-to-start timing varies, so we don't advertise a millisecond bound
- Voice music control - "play LCD Soundsystem radio on the main floor": on-device music intents drive Music Assistant search, radio mode, and synchronized multi-room zones — no LLM needed (guide)
- Voice-controlled zones - Group any rooms into named zones ("main floor", "everywhere") and start synchronized playback by voice
- Now Playing overlay - Glassmorphic UI with album art, playback controls, and track info
- Group transport from any tablet - Stop, pause or skip on one tablet and the whole group follows
- System volume control - Music Assistant controls your tablet's actual volume; group members get relative gain
- Multi-codec support - FLAC, PCM, and Opus decoding via Android MediaCodec
- Automatic discovery - Tablets register via mDNS and appear in Music Assistant automatically
- Home Assistant WebView - Display any Lovelace dashboard with full SPA routing support
- Screensaver mode - Show photos from Immich via ImmichFrame, or use any URL (DAKboard, weather displays, custom pages)
- Night mode - Dim red clock display (iOS StandBy-style, preserves night vision)
- Auto-brightness - Logarithmic brightness curve with configurable dim/wake thresholds and ambient light hysteresis
- Slide-out control drawer - Quick access to brightness, volume, mic mute, screensaver, and settings
- Photo feedback strip - Love, Wand, Fewer-like-this, Next, Exit — without leaving the screensaver. Photos stay up during a voice command
- Optional camera JPEG - Off by default. When enabled,
/cam.jpgis for your Frigate or Home Assistant, not us
- MQTT auto-discovery - Device sensors and controls appear automatically in Home Assistant
- Wyoming satellite - Native HA voice pipeline satellite support
- Device sensors - Battery level, ambient light, charging state, and motion exposed to HA
- Remote configuration - Control dashboard URL, screensaver, wake word, TTS settings, and more via MQTT or HTTP API
- Fully Kiosk compatible API - Works with the HA Fully Kiosk integration out of the box
- Guided onboarding - A setup wizard walks you through Home Assistant connection, wake word, voice, and a Power Features step that auto-detects MQTT on your network
- Copy settings between tablets - Set up your first tablet, then new tablets discover it over the network and import its configuration in one tap — no re-entering URLs, agents, or endpoints
The claim worth making is the specific one: wake word detection and speech recognition run on the device. Your audio never leaves the tablet. What travels is the transcript, only after the wake word, and only to the Home Assistant instance you configured.
- No analytics SDK, no crash-reporting SDK, no third-party telemetry of any kind — nothing is collected, so there is nothing to opt out of
- No account, no subscription — DashVoice doesn't have a login and there is nothing to sign up for
- Secrets stored in Android's encrypted SharedPreferences (AES-256, Keystore-backed)
- Timers run entirely on the tablet. Announcements go to your own MQTT broker, and to your Home Assistant if you've configured it — nowhere else
What DashVoice deliberately doesn't claim: "100% local & private." That slogan was never accurate, and nothing in 0.1.587 made it less true. Wake word and ASR are on-device. After that, you choose the rest: the HA conversation agent may be a cloud LLM, TTS may be hosted, Music Assistant providers are usually streaming services, and optional Loki/camera-stream send data to servers you named. All of that can be fully local. See the Privacy Policy.
- Android 8.0 or newer; arm64 on Google Play, with a legacy sideload build for 32-bit ARM
- Works great on budget tablets (Samsung Galaxy Tab S7 FE, Lenovo Tab M10, etc.)
- The small streaming speech model runs on essentially any 64-bit device; the 0.6B high-accuracy models need roughly 7 GB of RAM and won't load below that
- Optimized for wall-mounted kiosk use, landscape and portrait
- Low power consumption in standby
- OTA updates via HTTP API for headless deployments
The two features that demo instantly and cost nothing to try. Neither needs a conversation agent, an LLM, or Home Assistant to be up. Timers run entirely on the tablet; announcements travel over your own MQTT broker, which is how the tablets find each other.
Announcements broadcast to every DashVoice tablet in the house: a full-screen card, a chime, and the spoken message.
- "Hey Jarvis, announce that dinner is ready"
- "Hey Jarvis, broadcast the movie is starting"
- "Hey Jarvis, tell everyone it's time to leave"
Announcements need your tablets to share an MQTT broker — that's how they find each other. See the MQTT setup guide.
Timers are native, named, and fully offline. Run several at once, ask how long is left, and get a full-screen alarm when one fires — dismiss it with a tap or by saying "stop".
- "Hey Jarvis, set a 10 minute timer"
- "Hey Jarvis, set a pizza timer for twelve minutes"
- "Hey Jarvis, set a timer for an hour and a half"
- "Hey Jarvis, how much time is left on the pasta timer?"
And a few more things handled on the tablet, with everything else falling through to your Home Assistant agent untouched:
| Say this | What happens |
|---|---|
| "play LCD Soundsystem radio on the main floor" | Artist radio, synced across the zone |
| "play the dinner party playlist in the kitchen" | Playlists, albums and tracks by name |
| "turn it down" / "next song" / "stop the music" | Zone-aware transport and volume |
| "turn on the kitchen lights" | Passed straight to Home Assistant |
| Listening | Processing |
|---|---|
![]() |
![]() |
| Welcome | Connect to HA | Wake Word Selection |
|---|---|---|
![]() |
![]() |
![]() |
| Voice Processing | TTS & Agent | Hotword Import |
|---|---|---|
![]() |
![]() |
![]() |
| Home Assistant | Presence Detection | MQTT |
|---|---|---|
![]() |
![]() |
![]() |
View all onboarding screenshots
Required
- An Android tablet running Android 8.0 or newer
- A Home Assistant instance on your network — HA is the brain; DashVoice is the face, the ears and the speaker
- Wi-Fi
Optional
| what it adds | without it | |
|---|---|---|
| Music Assistant | Multiroom audio and voice music control | Everything else works; the tablet just isn't a speaker |
| MQTT broker | Device sensors and controls in HA, plus house-wide announcements | Voice, dashboard and timers are unaffected |
| Immich / ImmichFrame | Photo screensaver | Point the screensaver at any URL instead, or turn it off |
Optional, and entirely your call: the cloud. Wake word and speech recognition are always on the device. Beyond that, the conversation agent that answers you is whichever one you configured in Home Assistant — that may be a local one or a cloud LLM. Text-to-speech may be local Piper or a hosted OpenAI-compatible endpoint. Music Assistant providers are usually streaming services. DashVoice doesn't pick any of those for you, and a fully local setup is a supported configuration.
| Google Play (recommended) | Legacy sideload APK | |
|---|---|---|
| For | Anything from roughly the last several years | Older or 32-bit tablets, LineageOS on legacy hardware |
| Price | $9.99 one-time — a Play purchase covers every tablet on your Google account | Free; optional tip link, since a sideloaded app can't charge through Play |
| Architecture | arm64 (Play's 16 KB page-size requirement) | Adds 32-bit ARM (armeabi-v7a) |
| Android | 8.0+ | 8.0+ |
| Updates | Automatic | Manual — check back here |
| Support | Supported | Best-effort, unsupported |
| Get it | Play Store | Latest release |
The sideload build is not a free tier. Play requires 64-bit ARM, which rules out exactly the older hardware this app exists to revive — so that build is there for tablets Play can't reach, and it runs on the honour system.
Install from Google Play unless it refuses to install on your tablet. If it does refuse — usually a 32-bit device — take the legacy build. These are older, low-RAM devices, so voice works but runs slower. On first run DashVoice sizes up your tablet's RAM and pre-selects a speech engine that fits, and falls back to the lighter pipeline if the modern one can't start; it won't override an engine you pick yourself, so if you change it, choose a small one. To sideload, enable "Install unknown apps" for your browser or file manager, then open the downloaded APK.
- Install DashVoice from Google Play (or the legacy APK for older devices)
- Complete onboarding - connect to your Home Assistant
- Generate a Long-Lived Access Token in Home Assistant (instructions)
- Say "Hey Jarvis" and start controlling your smart home!
For detailed setup instructions, see the Setup Guide.
- Setup Guide - Complete installation walkthrough
- FAQ - Frequently asked questions
- Privacy Policy - How we handle your data
- Awesome Smart Home - Related projects we recommend
These optional integrations add a lot of value once you're up and running:
- MQTT Setup - Auto-discover every tablet as device sensors and controls in Home Assistant
- Loki Setup - Ship logs from all your tablets to Grafana for fleet-wide visibility
- Text-to-Speech Setup - Piper vs. Kokoro vs. OpenAI — quality, latency, and cost compared
- Voice Music Control - Play music in any room (or every room) by voice via Music Assistant — zones, radio mode, and multi-room sync
- Bug reports: Open an issue
- Feature requests: Open an issue
- Questions: GitHub Discussions
DashVoice is built and maintained by one developer. If it's useful to you — especially if you're running it on hardware the Play Store can't reach — a tip helps keep it going:
See Which build do I want? above — the legacy sideload APK adds 32-bit ARM (armeabi-v7a) support for tablets the Play build can't reach.
→ Latest legacy sideload release
Only the current sideload build is published. Older ones are removed when a new one goes up, so the link above is always the version we'd recommend — bookmark it rather than a version number.
┌──────────────────────────────────────────────────────────────┐
│ DashVoice │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ openWakeWord │ │ sherpa-onnx │ │
│ │ "Hey Jarvis" │─────▶│ Local ASR │ │
│ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ HA Conversation │ │
│ │ API │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ TTS Playback │ │
│ │ (Kokoro/Piper) │ │
│ └─────────────────┘ │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Sendspin │ │ Now Playing │ │
│ │ Audio Client │─────▶│ Overlay │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Wyoming │ │ MQTT │ │
│ │ Satellite │ │ Heartbeat │ │
│ └─────────────────┘ └─────────────────┘ │
└──────────────────────────────────────────────────────────────┘
DashVoice works great with these open-source projects:
| Project | Description |
|---|---|
| Home Assistant | Open-source home automation platform |
| Music Assistant | Universal music player for Home Assistant (multiroom audio) |
| MQTT Integration | Message broker for real-time device updates |
| Wyoming Protocol | Home Assistant's local voice assistant pipeline |
| Project | Description |
|---|---|
| Extended OpenAI Conversation | LLM-powered conversation for Home Assistant |
| openWakeWord | On-device wake word detection |
| sherpa-onnx | On-device speech recognition |
| Piper | Fast, local neural text-to-speech |
| Kokoro | High-quality OpenAI-compatible TTS |
| Whisper | OpenAI's speech recognition (runs locally) |
| Project | Description |
|---|---|
| Immich | Self-hosted photo management |
| ImmichFrame | Digital photo frame for Immich |
| Sendspin / aiosendspin | Multiroom audio sync protocol |
| Fully Kiosk Browser | The app that inspired DashVoice's dashboard features |
DashVoice is proprietary software. This repository contains documentation and issue tracking only.
Made with care for the smart home community



















