Thank you for your interest in contributing to LibrePods! This project aims to liberate AirPods from Apple's ecosystem, and we welcome contributions of all kinds.
- Code of Conduct
- How Can I Contribute?
- Development Setup
- Making Changes
- Submitting Changes
- Style Guidelines
- Additional Resources
This project adheres to a code of conduct. By participating, you are expected to uphold this code. Please be respectful and constructive in all interactions.
Before creating bug reports, please check existing issues. When creating a bug report, include:
- Device Information: Phone model, OS version, AirPods model
- LibrePods Version: Found in app settings
- Root Status (Android): LSPosed version if applicable
- Steps to Reproduce: Clear, numbered steps
- Expected vs Actual Behavior
- Logs: Use the troubleshooting feature in the app
Feature requests are welcome! Please:
- Check if the feature has already been requested
- Explain the use case and expected behavior
- Consider if it aligns with the project's goals
All code contributions follow the standard GitHub workflow:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
See Making Changes for detailed instructions.
Improvements to documentation are always welcome, including:
- README updates
- Protocol documentation
- Setup guides
- Code comments
Help make LibrePods accessible to more users by contributing translations. See Translation Guide for details.
Choose the platform you want to contribute to:
Requirements:
- Android Studio Narwhal (2025.1.x) or later
- JDK 17+
- Android SDK: API 35 (min) and API 36 (target)
- Root access with Xposed Framework (LSPosed recommended)
Note: Root is required due to an Android Bluetooth stack limitation. Exception: ColorOS/OxygenOS 16 users.
Requirements:
- Qt 6 (base, connectivity, multimedia)
- CMake 3.22+
- OpenSSL development headers
- libpulse development headers
- C++17 compatible compiler
Installation commands for different distributions
Arch Linux / EndeavourOS:
sudo pacman -S qt6-base qt6-connectivity qt6-multimedia cmake openssl libpulseDebian / Ubuntu:
sudo apt-get install qt6-base-dev qt6-declarative-dev qt6-connectivity-dev \
qt6-multimedia-dev cmake libssl-dev libpulse-dev \
qml6-module-qtquick-controls qml6-module-qtquick-layoutsFedora:
sudo dnf install qt6-qtbase-devel qt6-qtconnectivity-devel \
qt6-qtmultimedia-devel qt6-qtdeclarative-devel cmake \
openssl-devel pulseaudio-libs-develgit clone https://github.com/YOUR_USERNAME/librepods.git
cd librepods/android
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apkgit clone https://github.com/YOUR_USERNAME/librepods.git
cd librepods/linux
mkdir build && cd build
cmake ..
make -j $(nproc)
./librepodsFor troubleshooting, see linux/README.md.
Fork the repository on GitHub, then:
git clone https://github.com/YOUR_USERNAME/librepods.git
cd librepods
git remote add upstream https://github.com/kavishdevar/librepods.gitgit checkout -b feat/your-feature-name
# or
git checkout -b fix/bug-description- Write clear, readable code
- Follow the style guidelines
- Add comments for complex logic
- Update documentation if needed
Android:
- Build and install the APK
- Test on a physical device with AirPods
- Verify no regressions in existing features
Linux:
- Build and run the application
- Test core functionality
- Verify system tray integration
git add .
git commit -m "type(scope): description"See Commit Message Guidelines for format details.
-
Push to your fork:
git push origin your-branch-name
-
Create a Pull Request on GitHub with:
- Clear title:
type(scope): Brief description - Description including:
- What changed and why
- Related issue number (closes #123)
- Testing performed
- Screenshots for UI changes
- Clear title:
-
Wait for review (Note: Maintainer on hiatus until May 2026)
-
Address feedback if requested
- Code builds without errors
- Tested on target platform
- Follows style guidelines
- Documentation updated (if applicable)
- Commit messages follow convention
- PR description is clear and complete
Follow Conventional Commits:
<type>(<scope>): <description>
[optional body]
[optional footer]
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting)refactor: Code refactoringtest: Adding testschore: Maintenance tasks
Examples:
feat(android): add German translation
fix(linux): resolve system tray detection
docs: update development setup guide
- Follow Kotlin Coding Conventions
- 4 spaces for indentation
- Meaningful variable and function names
- Use
camelCasefor variables/functions,PascalCasefor classes
- Follow Qt Coding Style
- Use
camelCasefor variables/functions - Use
PascalCasefor classes - Include proper header guards
- Use C++17 features where appropriate
- Protocol Specifications: AAP Definitions.md
- Control Commands: docs/control_commands.md
- Linux Setup: linux/README.md
- AAP Protocol (Third-party)
- Android Bluetooth Bug - Please upvote!
- Discussions: GitHub Discussions
- Issues: GitHub Issues
Translations help make LibrePods accessible to users worldwide. Currently supported: 10 languages (Android), 3 languages (Linux).
-
Create translation directory:
mkdir -p android/app/src/main/res/values-{LANG_CODE} -
Copy base strings file:
cp android/app/src/main/res/values/strings.xml \ android/app/src/main/res/values-{LANG_CODE}/ -
Translate all
<string>tags while preserving:- Placeholders:
%1$s,%d - XML entities:
\'for apostrophes - Technical terms from Apple's official translations
- Placeholders:
-
Test:
cd android ./gradlew assembleDebug adb shell "setprop persist.sys.locale {LANG_CODE}; setprop ctl.restart zygote"
-
Copy template:
cd linux/translations cp librepods_tr.ts librepods_{LANG_CODE}.ts -
Edit with Qt Linguist (recommended) or manually:
<message> <source>English text</source> <translation>Translated text</translation> </message>
-
Test:
mkdir build && cd build cmake .. && make LANG={LANG_CODE}.UTF-8 ./librepods
High-priority: German, Japanese, Korean, Hindi, Arabic, Russian
By contributing, you agree that your contributions will be licensed under the GNU GPL v3.0 License.
Thank you for contributing to LibrePods! 🎉