LIVI is an open-source Apple CarPlay and Android Auto head unit.
It is a standalone cross-platform Electron head unit with a native, zero-copy GStreamer video pipeline and hardware-accelerated decoding on Linux (including the Raspberry Pi 4 and 5), macOS and Windows, low-latency audio, multitouch + D-Pad navigation, and support for very small embedded/OEM displays.
- Android Auto (wired) on all platforms
- Android Auto (wireless) on Linux
- Android Auto (wired & wireless) on all platforms
- Apple CarPlay (wired & wireless) on all platforms
Supported USB adapters (for CarPlay): Carlinkit CPC200-CCPA (wireless/wired) and CPC200-CCPW (wired)
Important
LIVI requires OpenGL ES 3.x.
Note
The Pi 3 and earlier use the VideoCore IV GPU, which only supports OpenGL ES 2.0 and is therefore unsupported.
curl -fL -o install.sh https://raw.githubusercontent.com/f-io/LIVI/main/scripts/install/pi/install.sh
chmod +x install.sh
./install.shThe install.sh script performs the following tasks:
- checks for required tools: curl, xdg-user-dir and pkexec
- downloads the latest LIVI AppImage
- creates an autostart entry so the application launches automatically on boot
- creates a desktop shortcut for easy access
- applies the Raspberry Pi HEVC decoder patch if the system GStreamer is affected (see note below)
Note
Raspberry Pi HEVC (1080p) hardware decode uses the system GStreamer v4l2codecs plugin. GStreamer 1.26.x before 1.26.11 (currently shipped by Raspberry Pi OS) has a SAND-crop bug that breaks zero-copy at 1080p and leaves the main video layer black. The installer detects an affected version and rebuilds the patched plugin from the distribution source automatically. If you do not use the installer, apply it manually from a LIVI checkout on the Pi:
bash scripts/gstreamer/patch-pi-v4l2codecs.shOn first launch, LIVI detects if the udev rule for USB access is missing and prompts you to install it. The rule grants USB access to connected Android phones (for wired Android Auto) and to the USB dongle.
This install script is not actively tested on other Linux distributions.
This AppImage has been tested on Debian Trixie (13) with Wayland, Ubuntu 26.04 and Fedora 44 (GMNOME).
chmod +x LIVI-*-x86_64.AppImageOn first launch, LIVI detects if the udev rule for USB access is missing and prompts you to install it. The rule grants USB access to connected Android phones (for wired Android Auto) and to the USB dongle.
Hardware video decode (optional): LIVI uses the system VA-API driver for GPU video decode (it is not bundled, since it must match your GPU and kernel). Most desktops ship it, a minimal install may not. Without it LIVI still works via software decode. For HW decode install the driver for your GPU and verify with
vainfo:i965-va-driver(older Intel, e.g. Broadwell),intel-media-va-driver(Gen9+ Intel),mesa-va-drivers(AMD).
Ubuntu / Kubuntu users: On Ubuntu 24.04 AppArmor blocks the Chromium sandbox for AppImages, start it with
--no-sandboxas a workaround. Ubuntu 24.10 and newer run the AppImage out of the box.
Download the -arm64.dmg, open it, and drag LIVI.app into Applications.
When launching the app for the first time, macOS may block it. In that case:
- Try to open the app once (it will be blocked)
- Go to System Settings → Privacy & Security
- Scroll down and click “Open Anyway”
- Confirm the dialog
After this, the app will launch normally and future updates will work without additional steps.
Note
The Windows build is provided on a best-effort basis. Windows is not a primary target platform of this project and receives limited testing. It is mainly intended for development, experimentation, and desktop testing.
The Carlinkit dongle requires a compatible WinUSB (winusb.sys) driver on Windows. You can install it using a tool such as Zadig (libwdi): https://github.com/pbatard/libwdi/releases
Steps:
- Plug in the Carlinkit dongle
- Start Zadig
- Select the dongle from the device list
- Install the WinUSB (winusb.sys) driver
Make sure the following packages and tools are installed on your system before building:
- Node.js 24.x (with
corepackforpnpm) - Python 3.x (for native module builds via
node-gyp) - build-essential (Linux: includes
gcc,g++,make, etc.) - libusb-1.0-0-dev (required for
node-usb) - libudev-dev (optional but recommended for USB detection on Linux)
- libgstreamer1.0-dev + libgstreamer-plugins-base1.0-dev (required to build the
gst-videoaddon) - meson (≥ 1.4), ninja, pkg-config, bison, cmake and the wlroots/EGL stack: libwayland-dev, wayland-protocols, libxkbcommon-dev (≥ 1.8.0), libpixman-1-dev, libcairo2-dev, libegl-dev / libgles-dev / libgbm-dev / libffi-dev / libexpat1-dev (Linux only: to build the embedded wlroots compositor)
- fuse (required to run AppImages)
On Debian/Ubuntu/Raspberry Pi OS, install everything with:
sudo apt-get update
sudo apt-get install -y git build-essential python3 python3-dev python3-pip \
pkg-config bison ninja-build cmake \
libusb-1.0-0-dev libudev-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libegl-dev libgles-dev libgbm-dev libffi-dev libexpat1-dev \
libwayland-dev wayland-protocols libxkbcommon-dev libpixman-1-dev libcairo2-dev
pip3 install --user --break-system-packages 'meson>=1.4'
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo corepack enableOn Fedora, install everything with:
sudo dnf install -y git gcc gcc-c++ make python3 python3-devel \
pkgconf-pkg-config libusb1-devel systemd-devel \
gstreamer1-devel gstreamer1-plugins-base-devel \
meson ninja-build bison cmake \
wlroots-devel wayland-devel wayland-protocols-devel libxkbcommon-devel \
pixman-devel cairo-devel \
mesa-libEGL-devel mesa-libGLES-devel mesa-libgbm-devel libffi-devel expat-devel \
fuse fuse-libs
curl -fsSL https://rpm.nodesource.com/setup_24.x | sudo bash -
sudo dnf install -y nodejs
sudo corepack enableOn macOS, the gst-video addon links against the GStreamer.framework. Install
both the runtime and development packages (matching versions) from
gstreamer.freedesktop.org
before building. node-gyp discovers it via pkg-config under
/Library/Frameworks/GStreamer.framework.
# Git clone
git clone --branch main --single-branch https://github.com/f-io/LIVI.git \
&& cd LIVI
# Install dependencies from lockfile
pnpm run install:ci
# --- Build targets ---
# Linux x86_64 (AppImage + deb)
pnpm run build:linux
# Linux ARM64 (AppImage + deb)
pnpm run build:armLinux
# Single-format variants
pnpm run build:linux:appimage # x86_64 AppImage
pnpm run build:linux:deb # x86_64 deb
pnpm run build:armLinux:appimage # ARM64 AppImage
pnpm run build:armLinux:deb # ARM64 deb
# macOS (arm64 dmg)
pnpm run build:macThe Dashboard is currently in an early stage. While the IPC/socket telemetry payload already supports many signals, the UI exposes only a small subset. Widgets and layouts will be extended over time.
To push test data into a running LIVI, use the CLI in scripts/tools. The full
field list and routing (Dash / AA / Dongle) lives in
src/main/shared/types/Telemetry.ts.
pnpm -C scripts/tools install
# Realistic all-fields demo push
pnpm -C scripts/tools run telemetry:demo
# Send single fields or blocks ad-hoc
pnpm -C scripts/tools run telemetry:set fuelPct=4 rangeKm=38
pnpm -C scripts/tools run telemetry:set gps.lat=53.5912 gps.lng=10.015
pnpm -C scripts/tools run telemetry:set _repeatMs=1000 speedKph=90 rpm=2500Stream resolution, view area insets, and safe area can be configured independently for the main and cluster streams. This is supported for Android Auto as well as CarPlay.
Video: 1280x720 - View Area: 0/0/100/0 (T/B/L/R) - Safe Area: 100/100/100/100 (T/B/L/R) - Draw Outside: true
Video: 1280x720 - View Area: 0/0/0/0 (T/B/L/R) - Safe Area: 60/20/350/350 (T/B/L/R)
LIVI can run as multiple windows at once, each placeable on its own physical display. The Dash and Aux windows are freely assignable and can show the Dashes, the reverse camera or the media player. Assignment is not exclusive: any feature can be shown on one, several, or all windows at the same time.
Configure each window under Settings → Window Settings (Main Screen / Dash Screen / Aux Screen), and assign features under Settings → General → Tab Settings.
See CREDITS for acknowledgements and prior art.
Apple and CarPlay are trademarks of Apple Inc. Android and Android Auto are trademarks of Google LLC. This project is not affiliated with or endorsed by Apple or Google. All product names, logos, and brands are the property of their respective owners.
This project is licensed under the MIT License.