Thanks for your interest in CockpitOS! This guide explains how to report bugs, request features, and submit code changes.
CockpitOS is ESP32 firmware for DCS World cockpit panels. It has its own toolchain (Setup Tool, Compile Tool, Label Creator) and does not use the Arduino IDE. Please read the relevant docs before diving into the code:
- Getting started:
Docs/Getting-Started/ - Tools overview:
Docs/Tools/ - Hardware reference:
Docs/Hardware/
- Search existing issues first to avoid duplicates.
- Open a new issue using the Bug Report template.
- Include your ESP32 board variant, transport mode (WiFi/USB/Serial), DCS-BIOS version, and the label set you are using.
- If the issue involves compile errors, paste the full output from the Compile Tool (CockpitOS-START.py).
- Open a new issue using the Feature Request template.
- Describe the use case and the problem it solves — not just the solution.
- Wait for feedback before writing code. This prevents wasted effort on features that may already be in progress or that don't fit the project's direction.
Every pull request must reference an open issue. If there isn't one, create it first and wait for a maintainer to confirm the approach before starting work.
Small typo fixes and documentation corrections are exempt from this rule.
main <-- protected, releases only (do NOT target PRs here)
dev <-- active development (ALL PRs target this branch)
- Fork the repository.
- Branch off
origin/dev— name your branch descriptively (e.g.,fix/wifi-reconnect,feat/new-gauge-type). - Make your changes.
- Open a PR targeting
dev— nevermain.
PRs to main will be closed and asked to retarget dev.
- Short imperative style: "Add wifi reconnect logic", "Fix LED flicker on PCA9555"
- Describe the what, not the how
- One logical change per commit
| Area | Rules |
|---|---|
Firmware (src/) |
Follow existing patterns. No new/malloc in loop paths. Non-blocking only. |
Label sets (src/LABELS/) |
Do NOT rename, move, or delete existing label set files. |
| Python tools | ANSI TUI only (no curses, no external TUI libraries). Windows-native (msvcrt). |
| Config.h | Only touch defines listed in compiler/config.py TRACKED_DEFINES. |
| Generators | Do NOT run generate_data.py or reset_data.py in interactive mode. |
Before submitting a PR, verify your changes compile:
- Run
Setup-START.pyto install the ESP32 core and libraries (first time only). - Run
CockpitOS-START.pyto compile your label set. - If you modified Python tools, test them on Windows with Python 3.12+.
CI will automatically compile all 16 label sets when your PR is opened against
dev. All builds must pass before the PR can be merged.
- C++ (firmware): Arduino framework, static allocation,
CUtilsAPI for hardware access,#if defined(HAS_*)guards for conditional compilation. - Python (tools): ANSI escape codes for TUI output,
msvcrtfor input,os.execl()for tool switching. No external dependencies beyond the standard library.
- A maintainer reviews the changes.
- CI builds all label sets against your branch.
- Once approved and green, the PR is merged into
dev. - Periodically,
devis merged intomainvia a separate PR, and a release is published frommain.
Be respectful. This is a hobby project built by people who love flight sims and building things. Keep discussions constructive and on-topic.
Open a Discussion on the GitHub repo or reach out via the issue tracker.