UFI003 USB dongle as the relay
The UFI003 is an msm8916 4G USB dongle. With the OpenStick Debian 11 system flashed onto it, it runs the OpenXPlay Linux relay: the relay starts by itself when the dongle is powered, and the head unit shows CarPlay in its own browser. OpenXPlay-Hardware has the support files it needs.
The UFI003’s Wi-Fi has no 5 GHz band, so its hotspot runs on 2.4 GHz.
Two ways to install
OpenXPlay Flasher on your computer does the installing. It puts three layers on the dongle: the base system (OpenStick Debian 11), device support and the OpenXPlay relay. When a new relay version comes out, usually only the relay layer needs updating, without flashing again.
| Let an AI assistant install it (recommended) | Install it yourself with Flasher | |
|---|---|---|
| What you do | Send one message to the AI assistant on your computer and confirm at the key moments | Open the Flasher app and follow its steps |
| Downloading and checking files | The AI downloads them from the signed package list and checks them | You download them from the links Flasher shows; Flasher checks them |
| Suits you if | You already use an AI assistant that can run commands, such as Claude Code or Codex | You want to see every step yourself, or you don’t use such an assistant |
Both ways use the same Flasher and the same signed package list, with the same modem-partition backup and the same safety checks. Windows has native adb and fastboot support from 0.2.0-beta.2; see below for its driver requirements and hardware validation results.
Let an AI assistant install it (recommended)
We wrote install instructions for AI assistants. An assistant that has read them downloads Flasher and the files it needs on your computer, checks their SHA-256 and installs everything with Flasher’s command line; when something goes wrong, it can deal with your computer’s actual situation. You need an AI assistant that can run commands on your computer, such as Claude Code or OpenAI Codex.
Plug the UFI003 directly into the computer by USB, not through an unpowered hub. Unplug other phones if you can.
Open the AI assistant and send it this message:
textRead https://openxplay.org/agents/ufi003-install.md and follow it exactly to turn the UFI003 USB dongle plugged into this computer into an OpenXPlay relay with OpenXPlay Flasher. Tell me what each step will do before you run it, and wait for me to type the dongle's serial number before anything erases it.Answer the assistant’s questions. These things are up to you:
- check that the device the assistant found is your UFI003, by its serial number;
- type the dongle’s serial number yourself before anything erases it;
- keep the dongle plugged in, and keep the computer powered and awake, while it installs;
- add your own CarPlay identity, as described under Add your CarPlay identity.
When the install is done, the assistant tells you how to open the relay’s admin page. Then carry on from Choose the network.
Watch the commands the assistant runs
The AI assistant runs commands on your computer. Use an assistant you trust and look at each command it wants to run; ask it to explain anything you don’t understand. The instructions tell it to work only on this UFI003, leave the computer’s other devices alone, never read your identity files, never turn off the signature check and never rewrite partitions with fastboot by itself.
Install it yourself with Flasher
Flasher is a desktop app for Windows and macOS. Connect the UFI003 to the computer by USB and it recognises the dongle, shows the version of each layer and takes you through the install.
On Windows
Version 0.2.0-beta.2 and later support adb and fastboot natively through WinUSB. An external adb server is not required; an already-running adb server can still be used.
Listing devices needs no adb driver, but communication requires the matching interface to use the WinUSB driver. If a device is listed but cannot communicate, check its ADB interface in Device Manager, or its fastboot interface after entering the bootloader; each mode may need its driver installed separately. Change only that interface. Keep the RNDIS network adapter and its network driver intact, and do not replace the driver for the whole USB composite device.
For a UFI003 fastboot device with hardware ID USB\VID_18D1&PID_D00D, the signed Android Bootloader Interface driver in Microsoft Update Catalog has been verified on Windows 11. Install it only for the fastboot device with that exact ID; leave the RNDIS adapter and the whole composite device's drivers intact.
Windows driver prompts and installation
Does the app prompt for drivers? In 0.2.0-beta.2, failures while reading a device or opening fastboot appear in the app's error area. A missing registered WinUSB interface may show needs a WinUSB driver, install the ADB/fastboot WinUSB driver or has no WinUSB … interface. These low-level details may remain in English. The app does not download or install drivers and has no one-click driver installer.
- Find this UFI003's ADB or fastboot interface in Device Manager. Open Properties → Details → Hardware Ids and check the ID for its current mode. Do not select the RNDIS adapter or the whole USB composite device.
- Download and extract a signed driver matching that hardware ID, Windows version and architecture. The Microsoft Update Catalog driver above covers the verified
USB\VID_18D1&PID_D00Dfastboot interface; other IDs need their own matching driver. - Right-click that interface, choose Update driver → Browse my computer for drivers, and select the extracted folder. See Microsoft's manual installation instructions. Keep driver signature enforcement enabled.
- Return to Flasher and choose Read again. ADB and fastboot are separate interfaces, so the newly appearing fastboot interface may need another driver installation. If an install job has failed, follow the app's instructions to read the device again and choose Repair; do not flash partitions manually.
If plugging the dongle in adds no USB device in Device Manager, check power, the USB connection and a direct USB port first. This differs from a listed device whose communication driver is missing. Do not unplug the dongle to troubleshoot while flashing is in progress.
Verified on Windows hardware
The official 0.2.0-beta.2 Windows amd64 build completed an install on a UFI003 from stock Android 4.4 to OpenStick Debian 11 (kernel 5.15.0-handsomekernel+), device support 0.2.1 and relay 0.1.5~beta.2. All 49 install steps and layer checks passed, including automatic backup and restoration of the four modem calibration partitions. A separate relay upgrade, fastboot device identification and data transfer to RAM also passed. Drivers must still match the device's actual USB interfaces and hardware IDs.
The signed package list recommends the corrected device support bundle, version 0.2.1 or later. Keep signature verification enabled and use files that match the list.
Download and open Flasher
Choose 0.2.0-beta.2 or later, including pre-releases, from Releases. Download the build for your system and check its SHA-256 against that release's SHA256SUMS file. The builds aren’t signed with an Apple or Microsoft certificate, so the system asks before opening them the first time.
- macOS 12 or later (Apple silicon and Intel,
OpenXPlay-Flasher-<version>-macos-universal.dmg): drag the app to Applications and open it once. On macOS 15 or later, when it says the app wasn’t opened, choose Done, then go to System Settings → Privacy & Security and choose Open Anyway next to the note about OpenXPlay Flasher. On macOS 12 to 14, Control-click the app, choose Open, then Open again. - Windows 10 or 11 (
openxplay-flasher-windows-amd64.exe, or-arm64.exeon Arm PCs): when Windows protected your PC appears, choose More info, then Run anyway. If the app says the Microsoft Edge WebView2 runtime is missing, install it and open the app again.
Once it’s open, Flasher takes you through these steps:
- Connect: plug the UFI003 into the computer. Flasher shows the dongle’s serial number and the version of each layer. A brand-new dongle still runs its original firmware and appears in the list of other Android devices … connected and ignored, with its model (usually
msm8916_32_512) and serial number; check them, then choose This is a UFI003 with its original firmware, and Flasher reads the model to confirm it. - Choose: the suggested action comes first, for example Install OpenXPlay from the original firmware for a new dongle or Install / update relay for one that is already set up. The other actions that erase the dongle (reinstall the base system, full reinstall, repair) are under Reflash (erases the device).
- Prepare: Flasher lists each file it needs with its SHA-256 and download links, but doesn’t download anything itself. Download the files from the links or another source you trust, then choose Choose file… or Choose several files…. Flasher recognises the files by their SHA-256, so their names don’t matter. Don’t move or delete them until the install has finished.
- Back up (only when the base system is flashed): Flasher reads the
modemst1,modemst2,fscandfsgpartitions from the dongle and saves them toOpenXPlay Backupsin your Documents folder. They hold modem calibration data unique to this dongle, so keep that folder for good. The original bootloader can’t read those partitions, so on an install from the original firmware Flasher first replaces the bootloader and erases the boot partition, then makes the backup, and installs the system only once the backup has succeeded. Actions that erase the dongle also ask you to type its serial number. - Flash: Flasher first shows what this install does and roughly how long it takes (6 to 7 minutes from the original firmware). The dongle restarts a few times; don’t unplug it. If the connection is lost along the way, reconnect and choose Repair: Flasher carries on where it stopped and restores those four partitions from the earlier backup.
- Done: Flasher checks the version of each layer, and under Next steps offers buttons to add your CarPlay identity and to open the relay’s admin page over USB.
Package list and signature
Flasher reads a signed package list from this website with the version, download links and SHA-256 of each layer. The signature shows that the list comes from OpenXPlay, and every file you choose must match the SHA-256 in it. If you need your own package list, you can turn off Verify the package list signature in Settings; files are then still checked against the SHA-256 in the list, and the base system’s files must still match OpenStick v1 exactly.
After the install
Whichever way you installed, the next steps are the same.
Add your CarPlay identity
Install packages never contain an Apple accessory (MFi) identity; you supply your own. With the dongle connected to the computer by USB, open Flasher and choose Choose identity files or ZIP… under Next steps. Select the private key and the certificate (DER or PEM, in any order and with any file names), or a ZIP containing identity.pk8 and certificate.p7b. Flasher copies them to the dongle over USB and restarts the relay.
Open the admin page
With the dongle connected to the computer by USB, choose Open the relay admin page over USB under Next steps in Flasher. In the car, join the relay’s hotspot OpenXPlay-Linux-XXXX from a phone (the password is openxplay unless you set your own), then open https://openxplay-car.local:6975 or https://10.77.0.1:6975. The browser shows a certificate warning; carry on to the page. The first password is openxplay, also shown on the sign-in page; after you sign in, the page asks you to set your own.
Home shows how far the connection has got, iPhone → this relay → car, with only the one thing to do now below it. Tap any step for its details and fix. The gear at the top of Home opens Settings.
With the car’s hotspot (see the next step), join the car’s hotspot from the phone and open https://openxplay-car.local:6975, or the IP the car’s hotspot gave the relay: https://<relay IP>:6975/. iPhones, Macs and Windows computers open .local addresses; many Android phones don’t, so use the IP address there. An address typed without https:// opens too. The UFI003 has one Wi-Fi radio, so it can’t run the admin hotspot.
Choose the network
In the admin page, under Settings → iPhone connection → Wireless network, choose how the iPhone and the head unit reach the relay:
- This relay’s hotspot (the default): opens the relay’s own hotspot; the iPhone joins it automatically and the head unit joins it too.
- Use the car’s hotspot: the relay, the iPhone and the head unit join the car’s hotspot, or another existing 2.4 GHz network.
The UFI003 shows CarPlay in the head unit’s browser only; Carlink needs a second Wi-Fi adapter, see Carlink app.
Pair the iPhone
When Home asks you to pair the iPhone, tap Pair; pairing stays open for 10 minutes. On the iPhone, open Settings → Bluetooth and choose OpenXPlay Linux. For a new iPhone, remove the old paired device on Home or in Settings → iPhone connection.
Open it in the head unit’s browser
Join the relay’s network from the head unit and open https://10.77.0.1:8443/ (with the relay’s own hotspot) or https://openxplay-car.local:8443/. Accept the certificate warning the first time; Troubleshooting explains why it appears.
If Require pairing code is on in the admin page under Settings → Head-unit access, enter the 8-digit code the relay shows.
Install from the command line without Flasher
If you want to use only the command line and not Flasher, you can flash the dongle by hand, then install the device package and the relay package. This skips Flasher’s backup and checks, and flashing replaces the dongle’s original system, so make sure you understand each step.
Show the command-line steps
Flash the base image
Flash the OpenStick Debian 11 image (kernel 5.15.0-handsomekernel+, aarch64) onto the UFI003. Downloads, checksums and the cautions to read before flashing are in Flash the UFI003 base image.
Install the device package
From the OpenXPlay-Hardware Releases, choose the newest ufi003-device-v release (0.2.1 or later is required), download openxplay-ufi003-device-<version>.tar.gz and SHA256SUMS and check them. Copy the bundle to the dongle and open its shell (root):
V=0.2.1
adb push openxplay-ufi003-device-$V.tar.gz /root/
adb shellSet V to the version you downloaded. On the dongle, set V the same way, then unpack the bundle and run the installer. --dry-run checks everything without changing anything; after the install, reboot:
V=0.2.1
cd /root
tar -xzf openxplay-ufi003-device-$V.tar.gz
sh openxplay-ufi003-device-$V/install-device.sh --dry-run
sh openxplay-ufi003-device-$V/install-device.sh
rebootAfter the reboot, open adb shell again and check the device with --verify:
V=0.2.1
sh /root/openxplay-ufi003-device-$V/install-device.sh --verifyThe device package carries the Debian packages it needs, so it installs without internet access. It adds the Bluetooth RFCOMM module that wireless CarPlay needs, a fixed Bluetooth driver, a Bluetooth guard and the host profile, and turns on time synchronisation.
Install the relay
Under Releases, pick the latest linux-v release, download the .deb and SHA256SUMS and check them, then run on your computer:
V=0.1.6
adb push openxplay-relay_${V}_arm64.deb /root/
adb shell dpkg -i /root/openxplay-relay_${V}_arm64.debSet V to the latest version. The device package has already installed the dependencies, so no internet access is needed. Install the relay describes what the package sets up.
To build them yourself: the device package with UFI003/package/build-bundle.sh in OpenXPlay-Hardware, the relay package with rust/packaging/build-deb.sh in OpenXPlay-Relay.
Then carry on from Open the admin page. Without Flasher, add your CarPlay identity in the admin page under Settings → Identity and certificates, or put the identity files in place by hand.
Next
- In cars such as the XPeng G6, see the recommended setup under Head units, for example setting the frame rate to 30 on 2.4 GHz: change it in the admin page under Settings → CarPlay picture → Frame rate, and the head-unit page follows it.
- To report a problem, save the logs as a file under Settings → Logs, or upload them and send us the log ID.
- Trusted HTTPS: remove the certificate warning with a free domain name.
- Something not working? See Troubleshooting.
