An open-source car head-unit UI that treats the driver like a person, not a spec sheet.
Clean, big-touch, two taps deep — and yes, it finally has a delete button. Built in the languages real car stereos actually run.
▶ Live demo — the web preview, running in your browser.
Modern car stereos have incredible hardware bolted to software UX that looks like it "compiled, so ship it." OpenDash is the opposite: a touch-first head-unit interface designed like someone has to use it while driving.
But a good design is only half the point — it has to be buildable in the stacks real head units ship in. A single HTML file only represents Tesla's web UI and aftermarket browser wrappers. So OpenDash ships the same UI implemented in the languages the industry actually uses:
| Build | Language | Where this stack ships | Status |
|---|---|---|---|
qt/ |
C++ + QML (Qt Quick) | OpenAuto/Crankshaft (Pi dashes), most QNX & Automotive-Grade-Linux OEM head units | ✅ QML renders + lints clean; C++ reviewed |
android/ |
Kotlin + Jetpack Compose | Android Automotive OS — Volvo, Polestar, GM, Ford, Honda, Renault | ✅ Builds a debug APK (gradle assembleDebug) |
flutter/ |
Dart (Flutter) | Toyota 2026 RAV4 IVI, BMW apps, Automotive Grade Linux; runs on a Pi via flutter-elinux | 📝 Written & reviewed; not compiled in-session (Flutter SDK didn't bootstrap on the build box) — run flutter analyze |
preview/ |
HTML/CSS/JS | Tesla's touchscreen UI; aftermarket web wrappers | ✅ Runs in any browser (the shared visual spec) |
Every build shares one design, one palette, one set of behaviours — the web
preview/ is the reference, and the three native stacks implement it.
From the Qt build, rendered by the real Qt Quick scene graph:
| Now Playing | Media | Climate | Day mode |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- Now Playing — album art, large transport, scrubbable progress, volume, source switching (USB / Bluetooth / Radio), and a prominent Delete button.
- Media — the USB library as a flat, scannable list; tap to play, one tap to delete, live "now playing" equalizer.
- Climate — dual-zone temperature, 6-speed fan, A/C · Auto · Recirculate · front/rear defrost, and 3-stage seat heaters.
- Phone — Bluetooth call surface (placeholder).
- Settings — Night/Day instrument themes, brightness, °F/°C.
- Live clock, simulated playback, and a single "instrument at night" visual world (amber-on-charcoal) with an in-app Day mode.
- Two taps, max. Anything you need while moving is one or two touches away.
- One accent. Amber instrument lighting carries state; semantic colors are separate.
- Big targets, high contrast. Legible at a glance, at speed, in daylight.
- Reversible by default. Nothing destructive without an undo path — starting with the delete button.
- Yours. No account, no cloud, no data leaving the car.
Each stack has its own README with build instructions:
- Qt —
cd qt && cmake -S . -B build && cmake --build build(details) - Android — open
android/in Android Studio, or./gradlew assembleDebug(details) - Flutter —
cd flutter && flutter create --platforms=android,linux,web . && flutter run(details) - Web — open
preview/index.html, orpython3 -m http.serverinpreview/
- Raspberry Pi double-DIN — the Qt build (like OpenAuto/Crankshaft) or the Flutter build via flutter-elinux, fullscreen on EGLFS / Wayland.
- Android head units / AAOS — the Android build, or the Flutter build.
- Any Linux dash with a browser — the web
preview/in Chromium kiosk mode.
- Real audio backend (USB/MTP indexing, gapless playback)
- Undo/restore for deletes (trash with a timeout)
- CAN-bus bridge for real climate + vehicle data
- Reverse-camera and CarPlay/Android Auto handoff
- Voice ("skip", "delete this", "72 degrees")
- Theming API + community skins
PRs welcome — see CONTRIBUTING.md.
MIT © 2026 Shane Sipe. Do what you like — just don't design a UI an engineer would.



