Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/.actionlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
shellcheck: {}
27 changes: 27 additions & 0 deletions .github/CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
cff-version: 1.2.0
title: QGroundControl
version: "5.0"
message: >-
If you use QGroundControl in your research, please cite it using
the metadata from this file.
type: software
authors:
- name: QGroundControl Development Team
website: https://qgroundcontrol.com
repository-code: https://github.com/mavlink/qgroundcontrol
url: https://qgroundcontrol.com
doi: "10.5281/zenodo.595404"
abstract: >-
QGroundControl is an intuitive and powerful ground control station
for UAVs. It provides full flight control and mission planning for
any MAVLink-enabled drone, including PX4 and ArduPilot vehicles.
keywords:
- ground-control-station
- uav
- drone
- mavlink
- px4
- ardupilot
- flight-planning
- telemetry
license: Apache-2.0 AND GPL-3.0-only
18 changes: 18 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# CODEOWNERS - Auto-assign reviewers to pull requests
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners

# Default owners for everything
# * @mavlink/qgc-maintainers

# Documentation
# /docs/ @hamishwillee

# QML/UI
# *.qml @DonLakeFlyer

# Build system
CMakeLists.txt @HTRamsey
/cmake/ @HTRamsey

# CI/CD
/.github/ @HTRamsey
22 changes: 11 additions & 11 deletions .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo

Examples of behavior that contributes to creating a positive environment include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting

## Our Responsibilities

Expand All @@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at lm@qgroundcontrol.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at <lm@qgroundcontrol.org>. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

Expand Down
215 changes: 210 additions & 5 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,214 @@
# Contributing to QGroundControl

Thank you for considering to contribute to QGroundControl.
Thank you for considering contributing to QGroundControl! This guide will help you get started with
contributing code, reporting issues, and improving documentation.

Contributions must be made under QGroundControl's dual-license system, under GPLv3 and Apache 2.0. This by definition rules out the re-use of any copyleft (e.g. GPL) licensed code. All contributions must be original or from a compatible license (BSD 2/3 clause, MIT, Apache 2.0).
> **AI coding agents** (Claude Code, Codex, etc.): see [AGENTS.md](../AGENTS.md) for the canonical
> agent-facing guide (golden rules, `just` build/test commands, definition of done, commit conventions).
> This document remains the human-facing source of truth for the
> [Architecture Patterns](#architecture-patterns) that AGENTS.md links back to.

* https://opensource.org/licenses/gpl-3.0.html
* https://opensource.org/licenses/Apache-2.0
## Table of Contents

Users of the codebase are free to use it under either license. The dual approach is necessary to be able to offer QGroundControl through the iOS and Android app stores and offers the open source community choice.
1. [Getting Started](#getting-started)
2. [How to Contribute](#how-to-contribute)
3. [Coding Standards](#coding-standards)
4. [Testing Requirements](#testing-requirements)
5. [Pull Request Process](#pull-request-process)
6. [License Requirements](#license-requirements)
7. [Additional Resources](#additional-resources)

---

## Getting Started

### Prerequisites

Before you begin, please:

1. Read the [Developer Guide](https://dev.qgroundcontrol.com/en/)
2. Review the [Build Instructions](https://dev.qgroundcontrol.com/en/getting_started/)
3. Familiarize yourself with the [Architecture Patterns](#architecture-patterns) in this guide

### Development Environment

- **Language**: C++20 with the Qt version defined in [`build-config.json`](build-config.json)
- **Build System**: CMake (minimum version defined in [`build-config.json`](build-config.json))
- **Platforms**: Windows, macOS, Linux, Android, iOS
- **IDE**: Qt Creator (recommended), VS Code, or your preferred IDE
- **Build/test/lint commands**: see [tools/README.md](../tools/README.md) for the `just configure` /
`build` / `test` / `lint` / `check` workflow

---

## How to Contribute

### Reporting Issues

Before creating a new issue:

1. **Search existing issues** to avoid duplicates
2. **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](SECURITY.md) for responsible disclosure procedures.

### Suggesting Enhancements

Feature requests are welcome! Please:

1. Check if the feature already exists or has been requested
2. Explain the use case and benefits
3. Consider implementation complexity
4. Be prepared to contribute code if possible

### Contributing Translations

QGroundControl uses [Crowdin](https://crowdin.com/project/qgroundcontrol) for community translations. See
[tools/translations/README.md](../tools/translations/README.md) for details on how translations are managed.

### Contributing Code

1. **Fork the repository**

```bash
git clone https://github.com/YOUR-USERNAME/qgroundcontrol.git
cd qgroundcontrol
```

2. **Create a feature branch**

```bash
git checkout -b feature/my-new-feature
```

3. **Make your changes** following our [coding standards](#coding-standards)

4. **Test your changes thoroughly**
- Run `just test` (or `ctest --output-on-failure -L Unit` for the unit-test label only)
- Test on all relevant platforms when possible
- Test with both PX4 and ArduPilot if applicable

5. **Commit your changes** using [Conventional Commits](../AGENTS.md#commit--review-conventions)

```bash
git add .
git commit -m "feat: brief description"
```

6. **Push to your fork**

```bash
git push origin feature/my-new-feature
```

7. **Create a Pull Request** from your fork to `mavlink/qgroundcontrol:master`

---

## Coding Standards

Follow [CODING_STYLE.md](../CODING_STYLE.md) for naming, formatting, C++20 features, QML style, and logging
conventions. Run `just lint` (or `pre-commit run --all-files`) before committing.

### Architecture Patterns

QGroundControl has several core architecture patterns you must follow. See [CODING_STYLE.md](../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_UNCREATABLE` macros, `Q_PROPERTY` for bindings

---

## Testing Requirements

See [test/README.md](../test/README.md) for the complete testing guide, including base classes, CTest labels,
`MultiSignalSpy`, and coverage.

**Key points:**

- Add unit tests for new functionality in `test/` mirroring `src/` structure
- Use the `UnitTest` base class (or `VehicleTest`, `MissionTest`, etc.)
- Run `ctest --output-on-failure -L Unit` before submitting
- Test on multiple platforms and both PX4/ArduPilot when applicable

### Pre-commit Checks

Run the lint gate before committing (`just lint`, or `pre-commit run --all-files` for the full sweep) —
see [tools/README.md](../tools/README.md) for all available development commands.

---

## Pull Request Process

### Before Submitting

1. **Rebase on latest master**

```bash
git fetch upstream
git rebase upstream/master
```

2. **Ensure all tests pass** (`just check`)
3. **Update documentation** if needed
4. **Write a clear PR description**:
- What problem does it solve?
- How was it tested?
- Breaking changes (if any)
- Screenshots for UI changes

### PR Requirements

- All CI checks must pass
- Code follows style guidelines
- Tests added for new features
- No unrelated changes
- Commit messages are clear and descriptive (Conventional Commits, see
[AGENTS.md](../AGENTS.md#commit--review-conventions))

### Review Process

- Maintainers will review your PR
- Address feedback in new commits (don't force-push during review)
- Once approved, a maintainer will merge your PR

### After Merging

- Delete your feature branch
- Your contribution will appear in the next release
- Thank you for contributing!

---

## License Requirements

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](COPYING.md) for full license details, compatible licenses, and contact information.

---

## Additional Resources

- **User Manual**: <https://docs.qgroundcontrol.com/en/>
- **Developer Guide**: <https://dev.qgroundcontrol.com/en/>
- **Support Guide**: For help and community resources, see [SUPPORT.md](SUPPORT.md)
- **Discussion Forum**: <https://discuss.px4.io/c/qgroundcontrol>
- **Discord**: <https://discord.gg/dronecode>
- **Code of Conduct**: QGroundControl is part of the Dronecode Foundation — see our
[Code of Conduct](CODE_OF_CONDUCT.md)

---

Thank you for contributing to QGroundControl! Your efforts help make drone control accessible to everyone.
26 changes: 18 additions & 8 deletions .github/COPYING.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
# QGroundControl License
# QGroundControl License Information

QGroundControl (QGC) is dual-licensed as Apache 2.0 and GPLv3. All contributions have to be made under both licenses (see [CONTRIBUTING](CONTRIBUTING.md)).
QGroundControl is dual-licensed under **Apache 2.0** and **GPL v3**. You may choose either license.

## Apache 2.0 License
## Apache License 2.0

The [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) License is a permissive license which allows QGC to be built and used in any environment, including proprietary applications. It allows QGC to be built for mobile app stores. When building with Apache 2.0 a commercial Qt license is required.
Permissive license that allows QGroundControl to be built and used in any environment, including proprietary applications and mobile app stores. **Requires a commercial Qt license.**

## GPL v3 License
Full text: [LICENSE-APACHE](../LICENSE-APACHE) · <http://www.apache.org/licenses/LICENSE-2.0>

The [GPL v3 License](http://www.gnu.org/licenses/gpl-3.0.en.html) is a strong copyleft license. When building QGC under this license the open source version of Qt can be used. Our licensing grants the permission to use a later version of the license, however, contributions have to be made under 3.0.
## GNU General Public License v3

## Contact
Strong copyleft license. Compatible with the open-source build of Qt.

If you have questions regarding the licensing, please contact the maintainer Lorenz Meier, [lm@groundcontrol.org].
Full text: [LICENSE-GPL](../LICENSE-GPL) · <http://www.gnu.org/licenses/gpl-3.0.en.html>

## Contributing

Contributions must be compatible with **both** licenses. Acceptable sources: original work, or code under BSD-2-Clause, BSD-3-Clause, MIT, or Apache 2.0. GPL-only code cannot be accepted.

See [CONTRIBUTING.md](CONTRIBUTING.md) for the full process.

## Questions

Licensing questions: Lorenz Meier <lm@qgroundcontrol.org>
18 changes: 18 additions & 0 deletions .github/DISCUSSION_TEMPLATE/polls.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
title: "[Poll] "
labels: []
body:
- type: markdown
attributes:
value: |
Create a poll to gather community feedback. After creating this discussion, use the poll button in the editor to add your poll options.

- type: textarea
id: context
attributes:
label: Poll Context
description: Provide background information for your poll
placeholder: |
What decision or feedback are you seeking?
Why is this important to the community?
validations:
required: true
Loading
Loading