A desktop configurator for ArduPilot flight controllers. Takes your aircraft from a blank board to test flight -- either starting from scratch or migrating from INAV.
Built with Electron + React + TypeScript + Tailwind.
ArduGUI configures real aircraft that can cause injury or property damage.
- Always verify every parameter against Mission Planner or QGroundControl before flying.
- Remove all propellers during the entire configuration process.
- Do not fly without completing motor direction verification, control surface checks, and failsafe testing.
- The author(s) accept no responsibility for any damage, injury, or loss resulting from the use of this software. See DISCLAIMER.md.
This is a release candidate. It is feature complete but has not been fully field-tested. Treat it as an assistant, not a source of truth.
ArduGUI is a configurator, not a ground control station. It handles initial setup only -- telemetry dashboards, mission planning, and in-flight tuning are left to Mission Planner and QGC.
Two paths to first flight:
- Start Fresh -- flash firmware, run the setup wizard, calibrate, fly
- Migrate from INAV -- connect an INAV board, ArduGUI extracts the config, flashes ArduPilot, imports parameters, and continues with calibration
| Feature | Description |
|---|---|
| Setup Wizard | 15-step guided flow from frame selection to first flight readiness. Write-as-you-go -- params saved on each step, rollback on abandon. |
| INAV Migration | Live migration from connected INAV boards: auto-detect, extract config, DFU flash ArduPilot, import parameters. Also supports manual paste of "diff all" / "dump all" output. |
| VTOL Configuration | Full quadplane support: tilt servos, transitions, assist thresholds, Q_ parameter lifecycle. This is the key differentiator. |
| 414-Board Database | Generated from ArduPilot hwdef files. Board-aware wiring guides with physical pad labels. |
| MAVFTP | Parameter download in ~300ms (vs ~15s with traditional MAVLink). |
| Firmware Flashing | Download from ArduPilot manifest, flash via bootloader protocol or STM32 DFU. BDShot variant toggle. |
| 3D Calibration Viewer | Accelerometer 6-position calibration with animated Three.js model. |
| Pre-flight Dashboard | Sensor health, pre-arm failures, parameter validation, GPS quality, battery status. |
- Copters -- quad, hex, octo, tri, Y6, coaxial
- Planes -- conventional, flying wing, V-tail
- VTOL -- quadplanes, tiltrotors (the primary focus)
Pre-built binaries are available on the Releases page:
- Windows --
.exeinstaller - Linux --
.AppImage(portable) or.deb - macOS --
.dmg
git clone https://github.com/agoliveira/ardugui.git
cd ardugui
npm install
npm run dev # Development mode with hot reload
npm run build # Production build
npm run package # Create distributableRequirements: Node.js 20+, npm 10+. Linux also needs libudev-dev.
- Flash firmware (if needed) -- open ArduGUI, go to Firmware page, select your board, download and flash.
- Connect -- plug in USB, click Connect. Parameters download automatically.
- Run the Setup Wizard -- the sidebar "Setup Wizard" button walks you through everything:
- Frame selection
- Output mapping (board-aware)
- Motor direction test (with safety monitor)
- Control surfaces (3D viewer with live servo feedback)
- Tilt servos and transitions (VTOL)
- Receiver protocol and RC calibration
- GPS, compass, accelerometer calibration
- Flight modes and failsafes
- Initial tune (prop-size-based filter calculation)
- Review and reboot -- the wizard shows what was configured and offers a reboot.
- Pre-flight check -- go to the Pre-flight page, run checks, fix any issues.
Every wizard function is also accessible as a standalone sidebar page for manual configuration.
ArduGUI can migrate directly from a connected INAV board:
- Connect the INAV board to USB. ArduGUI detects the INAV firmware automatically.
- Choose "Migrate with configuration" -- ArduGUI extracts the full config via CLI.
- ArduGUI downloads the matching ArduPilot firmware and flashes it via DFU.
- After flashing, unplug and replug the USB cable when prompted (power cycle required for clean boot).
- Review the parameter mapping -- ArduGUI shows what transferred, what was adapted, and what was skipped.
- Confirm to write the parameters, then continue with the Setup Wizard or go to manual pages.
Alternatively, you can paste a previously saved dump all or diff all output into the Setup Wizard's import dialog.
What transfers: frame type, motor mapping, receiver protocol, serial ports, battery thresholds, GPS, compass orientation, board alignment, OSD layout, flight modes, channel map, failsafes, motor protocol.
What doesn't: calibration data, PID tuning, RC expo/rates (different control model).
Every page is fully implemented:
| Page | Description |
|---|---|
| Connect / Info | Board info, serial port selection, connection status |
| Firmware | Flash ArduPilot firmware, BDShot toggle |
| Setup Wizard | Guided 15-step configuration flow |
| Frame | Airframe selection with visual grid |
| Motors | Motor test, frame diagram, servo output table |
| Surfaces | 3D control surface viewer with live servo bars (plane/VTOL) |
| Wiring | Board-aware wiring guide with pad labels |
| Ports | Serial port protocol assignment |
| Receiver | Live RC channel bars |
| GPS | Live telemetry, constellation toggles |
| Calibration | Accel (3D viewer), compass, RC calibration, level trim |
| Battery | Monitor type, calibration, cell count, failsafe thresholds |
| ESC | Protocol, DShot settings, direction reversal, spin thresholds |
| Modes | 6-slot flight mode assignment with RC range visualization |
| Failsafes | RC, battery, GCS failsafe configuration |
| PID Tuning | Filter and rate parameter editing |
| Navigation | Geofence, RTL, waypoint parameters |
| Configuration | Grouped parameter editing |
| OSD | Visual OSD layout editor |
| Transitions | VTOL transition config (quadplane only) |
| Backups | Parameter backup/restore with diff view |
| Pre-flight | Readiness dashboard with sensor health and pre-arm checks |
| CLI | Raw parameter search and editing |
| Expert | Full parameter tree (debug mode) |
- Runtime: Electron (main + renderer)
- Frontend: React 18 + TypeScript + Vite
- Styling: Tailwind CSS + custom theme ("Forge v6")
- State: Zustand stores
- 3D: Three.js (calibration viewer, control surface viewer)
- Database: SQLite via better-sqlite3 (parameter backups)
- MAVLink: Custom parser + MAVFTP client
- Board data: 414 boards from ArduPilot hwdef, 174 INAV timer mappings
See ARCHITECTURE.md for the full specification.
npm run dev # Electron + Vite dev mode with hot reload
npm run typecheck # TypeScript type checking
npm run build # Production build (renderer + electron)
npm run package # Build distributable packagessrc/
app/ Layout, Sidebar, Header, Footer
components/ Reusable UI (ConfirmDialog, MotorTestPanel, RcCalibration, 3D viewers)
mavlink/ MAVLink connection, message parsing, MAVFTP, motor safety monitor
store/ Zustand stores (connection, params, telemetry, calibration, preflight)
models/ Data definitions (airframes, boards, INAV import, validation)
hooks/ React hooks (useDetectedPreset, etc.)
pages/ One directory per sidebar page + SetupWizard/
styles/ Forge v6 theme CSS variables
firmware/ Firmware manifest parser, APJ handler, bootloader protocol
tools/
scrape-hwdef.py ArduPilot hwdef board database generator
scrape-inav-timers.py INAV target.c timer data extractor
- After DFU flash from INAV migration, a USB cable replug (power cycle) may be required for ArduPilot to boot cleanly. ArduGUI detects this automatically and prompts the user.
- Connected flash path (MAVLink reboot-to-bootloader) -- needs hardware verification on more boards.
- Custom .apj firmware flash reports "invalid image_size" (validates before decompression instead of after).
- OSD import param names -- code-reviewed but not hardware-verified on all OSD types.
See TODO.md for the full roadmap.
Contributions are welcome. Please read CONTRIBUTING.md first. The architecture is documented in ARCHITECTURE.md.
GPLv3. See LICENSE.
This project is not affiliated with, endorsed by, or supported by the ArduPilot project, Dronecode, or any flight controller manufacturer.