Thank you for considering contributing to QGroundControl! This guide will help you get started with contributing code, reporting issues, and improving documentation.
- Getting Started
- How to Contribute
- Coding Standards
- Testing Requirements
- Pull Request Process
- License Requirements
Before you begin, please:
- Read the Developer Guide
- Review the Build Instructions
- Familiarize yourself with the Architecture Patterns in this guide
- Language: C++20 with Qt 6.10+ framework
- Build System: CMake 3.25+
- Platforms: Windows, macOS, Linux, Android, iOS
- IDE: Qt Creator (recommended), VS Code, or your preferred IDE
Before creating a new issue:
- Search existing issues to avoid duplicates
- Provide complete information:
- QGroundControl version
- Operating system and version
- Detailed steps to reproduce
- Log files (from
~/.local/share/QGroundControl/) - Screenshots or videos if applicable
Create an issue: https://github.com/mavlink/qgroundcontrol/issues
For security vulnerabilities: See our Security Policy for responsible disclosure procedures.
Feature requests are welcome! Please:
- Check if the feature already exists or has been requested
- Explain the use case and benefits
- Consider implementation complexity
- Be prepared to contribute code if possible
QGroundControl uses Crowdin for community translations. See tools/translations/README.md for details on how translations are managed.
-
Fork the repository
git clone https://github.com/YOUR-USERNAME/qgroundcontrol.git cd qgroundcontrol -
Create a feature branch
git checkout -b feature/my-new-feature
-
Make your changes following our coding standards
-
Test your changes thoroughly
- Run unit tests:
./qgroundcontrol --unittest - Test on all relevant platforms when possible
- Test with both PX4 and ArduPilot if applicable
- Run unit tests:
-
Commit your changes
git add . git commit -m "feat: brief description"
-
Push to your fork
git push origin feature/my-new-feature
-
Create a Pull Request from your fork to
mavlink/qgroundcontrol:master
Follow CODING_STYLE.md for naming, formatting, C++20 features, QML style, and logging conventions. Run clang-format and pre-commit run before committing.
QGroundControl has several core architecture patterns you must follow. See CODING_STYLE.md for full details with code examples:
- Fact System: ALL vehicle parameters use Facts — never create custom parameter storage
- Multi-Vehicle: ALWAYS null-check
activeVehicle()before use - Firmware Plugin: Use
vehicle->firmwarePlugin()for firmware-specific behavior - QML Integration: Use
QML_ELEMENT/QML_SINGLETON/QML_UNCREATABLEmacros,Q_PROPERTYfor bindings
See test/TESTING.md for the complete testing guide, including base classes, CTest labels, MultiSignalSpy, and coverage.
Key points:
- Add unit tests for new functionality in
test/mirroringsrc/structure - Use the
UnitTestbase class (orVehicleTest,MissionTest, etc.) - Run
ctest --output-on-failure -L Unitbefore submitting - Test on multiple platforms and both PX4/ArduPilot when applicable
Run before committing:
make lint # or: just lint
pre-commit run --all-files # full checkSee tools/README.md for all available development commands.
-
Rebase on latest master
git fetch upstream git rebase upstream/master
-
Ensure all tests pass
-
Update documentation if needed
-
Write a clear PR description:
- What problem does it solve?
- How was it tested?
- Breaking changes (if any)
- Screenshots for UI changes
- ✅ All CI checks must pass
- ✅ Code follows style guidelines
- ✅ Tests added for new features
- ✅ No unrelated changes
- ✅ Commit messages are clear and descriptive
- Maintainers will review your PR
- Address feedback in new commits (don't force-push during review)
- Once approved, a maintainer will merge your PR
- Delete your feature branch
- Your contribution will appear in the next release
- Thank you for contributing! 🎉
All contributions must be compatible with QGroundControl's dual-license system (Apache 2.0 AND GPL v3). Your code must be original or from a compatible license (BSD, MIT, Apache 2.0).
See COPYING.md for full license details, compatible licenses, and contact information.
- User Manual: https://docs.qgroundcontrol.com/en/
- Developer Guide: https://dev.qgroundcontrol.com/en/
- Support Guide: For help and community resources, see SUPPORT.md
- Discussion Forum: https://discuss.px4.io/c/qgroundcontrol
- Discord: https://discord.gg/dronecode
QGroundControl is part of the Dronecode Foundation. Please follow our Code of Conduct.
Thank you for contributing to QGroundControl! Your efforts help make drone control accessible to everyone.