About this project

LIVI (Linux In-Vehicle Infotainment) is an open-source head unit application that implements the Apple CarPlay and Android Auto accessory side natively. It runs on Linux (ARM and x86_64, including Raspberry Pi 4/5 and CM4/CM5) and macOS (Apple Silicon and Intel), and is distributed under GPL-3.0-or-later. Connectivity - Apple CarPlay, wired and wireless, on Linux and macOS. Wireless requires a Bluetooth adapter plus a Wi-Fi interface dedicated to LIVI's own access point; wired works over any USB port without OTG. - Android Auto wired on all platforms; wireless Android Auto on Linux. - CarPlay requires MFi authentication via an Apple coprocessor, either wired to the I²C bus on the board or reached over the network through a LIVI Link. LIVI does not ship or bypass the chip, and does not support Apple's Basic Accessory Authentication on macOS. Media and input - Native zero-copy GStreamer video pipeline with hardware-accelerated H.264/H.265 decoding; software decode fallback when no VA-API driver is present. - Low-latency audio, phone calls and microphone uplink, now-playing metadata with album art, and turn-by-turn navigation data. - Touch, knob/D-Pad and hard-key input, day/night mode, and GPS forwarding to the phone. Multi-session - Several phones can be connected at once across wireless CarPlay, wired CarPlay and wireless Android Auto; wired Android Auto is limited to one device. Sessions keep state, battery, signal, media metadata and navigation updated in the background, and switching is a handover rather than a reconnect. Displays and calibration - Multi-display support: Main, Dash and Aux windows can be placed on separate physical displays, with features assignable non-exclusively. - Stream resolution, view area insets and safe area are configurable independently for main and cluster streams on both CarPlay and Android Auto. - Software display calibration for gamma, contrast and RGB channels, applied as a single compositor pass over the finished frame. Telemetry and GPS - A dashboard (work in progress) consumes telemetry over IPC/socket; a CLI in scripts/tools pushes test data. - GPS reads NMEA-0183 receivers on a serial port, with extra u-blox UBX polling for module identity and RF front-end state. The receiver can also set system time and timezone. Installation and build - A single install script supports desktop and headless hosts, using apt or dnf, tested on Raspberry Pi OS, Ubuntu 26.04 and Fedora 44. OpenGL ES 3.x is required; Pi 4/5 and CM4/CM5 need Debian 13 (Trixie), while Pi 3 and earlier are unsupported. - Prebuilt AppImage for Linux x86_64 and a dmg for macOS arm64 are provided. - Building requires Node.js 24.x with pnpm, stable Rust (≥1.88), GStreamer development packages, and on Linux Wayland/xkbcommon headers plus runtime packages for CarPlay and wireless Android Auto (bluez, hostapd, dnsmasq-base, iw, rfkill, avahi, pulseaudio-utils). On macOS the video addon links against GStreamer.framework. Debugging flags and log locations are documented in DEBUGGING.md. The project is not affiliated with or endorsed by Apple or Google.