Case study
LibrePods: AirPods features on Android and Linux through a reverse-engineered protocol
Implements the proprietary protocol that AirPods use with Apple devices, which the author reports reverse-engineering, so that Android and Linux apps can switch noise-control modes, read ear detection and accurate battery levels, and use conversational awareness, head gestures and hearing-aid settings. The repository documents captured packet formats, opcodes and control commands alongside the Android app and the Linux app. Several features need root on Android or remain experimental.
- Targets
- App · Protocol
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Sources reviewed
- Stars
- 30.7k
- Last commit
- 2026-10-16
- Language
- Kotlin
- License (GitHub)
- GPL-3.0
GitHub data as of 2026-11-09
Requirements & limits
- Android release v1.0.4 is at the pinned main commit. The v2.0.0 Android rewrite is alpha; main contains the Qt 6 Linux app, and a Rust rewrite is on linux/rust. Find My, head-tracked spatial audio and high-quality two-way audio remain unknown, planned or experimental.
- Use your own AirPods and a supported Android or Linux device. Protocol notes describe Bluetooth L2CAP traffic observed on AirPods Pro 2 (USB-C) firmware 7A305; other models and firmware may differ.
- On Android, root and Xposed are needed for the Bluetooth-stack workaround except on ColorOS/OxygenOS 16, realme UI 7.0 and Pixel devices on Android 16 QPR3. Vendor-ID-hook features always need root. The Linux app needs CMake 3.16+, Qt 6, OpenSSL and libpulse.
- Android CI builds FOSS APKs; the Rust Linux branch has a binary build workflow. The repository has no published protocol conformance suite.
- License: GPL-3.0-or-later. Some UI components are Apache-2.0. Apple fonts, product images and AirPods firmware retain their own rights; the Android build includes SF Pro and AirPods images, and the Linux app uses SF Symbols 6.
Cite
BibTeX
@misc{librepods-airpods-protocol-case,
title = {{LibrePods: AirPods features on Android and Linux through a reverse-engineered protocol}},
howpublished = {\url{https://github.com/librepods-org/librepods}},
url = {https://github.com/librepods-org/librepods},
urldate = {2026-10-19},
note = {Awesome REA entry: \url{https://awesomerea.org/resources/librepods-airpods-protocol-case/}}
}Plain text
LibrePods: AirPods features on Android and Linux through a reverse-engineered protocol. https://github.com/librepods-org/librepods (accessed 2026-10-19). Awesome REA entry: https://awesomerea.org/resources/librepods-airpods-protocol-case/
Useful? Star Awesome REA on GitHub2.4k
About this entry
The description was reviewed against primary sources.
Primary sources
- README.md GitHub · librepods-org/librepods · Revision 89356c0
- docs/AAP%20Definitions.md GitHub · librepods-org/librepods · Revision 89356c0
- docs/control_commands.md GitHub · librepods-org/librepods · Revision 89356c0
- docs/opcodes.md GitHub · librepods-org/librepods · Revision 89356c0
- android/README.md GitHub · librepods-org/librepods · Revision 89356c0
- android/app/build.gradle.kts GitHub · librepods-org/librepods · Revision 89356c0
- android/app/src/main/res-apple GitHub · librepods-org/librepods · Revision 89356c0
- linux/README.md GitHub · librepods-org/librepods · Revision 89356c0
- linux/CMakeLists.txt GitHub · librepods-org/librepods · Revision 89356c0
- .github/workflows/ci-android.yml GitHub · librepods-org/librepods · Revision 89356c0
- .github/workflows/ci-linux-rust.yml GitHub · librepods-org/librepods · Revision 89356c0
- LICENSE GitHub · librepods-org/librepods · Revision 89356c0
- https://github.com/librepods-org/librepods/releases/tag/v1.0.4
More in Apps
- OpenHaystack: tracking tags that use Apple Find My · Case study
- PC-BASIC: a GW-BASIC-family interpreter · Case study
- ReactOS: a Windows NT-compatible operating system · Case study
- viaduct: a Linux port of NetNewsWire · Case study
- zalo-linux: a Linux package of the Zalo desktop app · Case study
- Free-BBN: recreating the PlayStation Broadband Navigator dashboard · Case study