Auto-detect, configure & manage your FPV fleet from the browser.
RadioMaster radios ยท Betaflight flight controllers ยท ExpressLRS โ without juggling three configurators.
Setting up an FPV quad means bouncing between Betaflight Configurator, the ExpressLRS Configurator, EdgeTX Companion and a file manager for the radio's SD card โ copying settings by hand and bricking things along the way. FPV Dashboard puts the whole workflow in one local web app:
- ๐ USB Auto-Detection โ plug in a RadioMaster TX16S/Pocket, a Betaflight FC or DJI gear and it shows up, identified
- ๐ Betaflight over serial โ read FC config via MSP, flash CLI batches directly (no Configurator needed), with server-side safety guards
- ๐๏ธ EdgeTX SD management โ analyze the card, health-score it, inject ready-to-fly models using proper
modelN.ymlslots +models.ymlindex, automatic backups - ๐ก ELRS guides โ step-by-step firmware flashing and binding walkthroughs
- โ๏ธ Config templates โ battle-tested EdgeTX + Betaflight configs for RadioMaster ร iFlight Nazgul / Darwin Hulk 2 combos, binding phrase included
- ๐ง Motor testing โ visual layout, per-motor spin test, abortable, throttle-capped server-side
- ๐ฎ Simulator setup โ Liftoff / VelociDrone / Uncrashed with per-radio axis mappings
- ๐ Beginner guide โ 17 safety-first tips (props off, failsafe DROP, LiPo storage...)
| Drone control | Radio SD analyzer |
|---|---|
![]() |
![]() |
| Config templates | Simulator setup |
|---|---|
![]() |
![]() |
git clone https://github.com/SoCloseSociety/radiomaster.git
cd radiomaster
npm install
npm run devOpen http://localhost:3000 โ plug in your gear and hit Scanner.
npm run build # production build
npm start # production server
npm test # unit tests (95: MSP protocol, templates, guards, injector, mocked serial)
npm run lint # ESLintLaunch the dashboard like a native app, without touching a terminal.
macOS โ installs "FPV Dashboard.app" (SoClose icon included) into /Applications; it starts the server if needed and opens the browser:
./desktop/install-macos.shWindows โ double-click desktop/windows/FPV-Dashboard.bat. USB device detection works through serial-port enumeration (COMn), and EdgeTX SD cards are detected by scanning drive letters. The full USB tree (system_profiler) remains macOS-only.
- Next.js 16 (App Router, Turbopack) ยท React 19.2 ยท TypeScript 5.9 ยท Tailwind CSS 4.3
- SerialPort 13 โ Node native module speaking MSP v2 (binary) and Betaflight CLI (text) to the FC
- Vitest โ 95 unit tests, including a fully mocked serial port
- Zero database โ JSON file persistence, atomic writes; nothing leaves your machine
This dashboard can spin motors and rewrite flight controller config, so the API is guarded:
- CLI allowlist โ only known-safe Betaflight CLI verbs reach the FC;
dfu,bl,erase, baredefaultsare rejected server-side - Motor test cap โ
motorcommands are clamped to a low test throttle; full-throttle requests are refused - Port validation โ a client-supplied serial port must be one of the detected FC ports
- Local-only โ mutating routes reject cross-origin browser requests (CSRF/DNS-rebinding guard)
- Serial mutex โ MSP reads and CLI sessions are serialized per port; an auto-refresh can never corrupt a flash
- Guaranteed CLI exit โ the FC is never left stuck in CLI mode (CLI blocks arming)
- One Save Rule โ generated CLI batches contain exactly one
save, as the last command - Backup before write โ SD card operations back up models before deleting or overwriting
| Category | Devices |
|---|---|
| Radios | RadioMaster TX16S, Pocket (full support) ยท Zorro, Boxer (detection) |
| Drones | iFlight Nazgul Evoque F5D V2 (BLITZ F722) ยท Darwin FPV Hulk 2 ยท any Betaflight FC over USB (MSP read) |
| Link | ExpressLRS (ELRS) 2.4GHz ยท CRSF ยท DShot600 |
| Other | DJI Goggles / Air Units (detection) ยท ELRS USB receivers (CP210x / CH340) |
| Route | Method | Purpose |
|---|---|---|
/api/usb/scan |
GET | Detect USB devices, serial ports, EdgeTX mount |
/api/betaflight |
GET | Read FC config via MSP |
/api/betaflight/flash |
POST | Send validated CLI commands to FC |
/api/inventory |
GET/POST/DELETE | Device inventory CRUD |
/api/profiles |
GET/POST/DELETE | Flight profile management |
/api/templates |
GET | Config templates for radio/drone combos |
/api/edgetx |
GET | Read EdgeTX SD card config |
/api/inject |
GET/POST | Inject models onto EdgeTX SD card |
/api/analyze |
GET/POST | Full SD analysis, backup, clean-inject |
/api/simulator |
GET | Simulator info and axis mappings |
- EdgeTX 2.8+
models.ymllabels format - More radio targets (Zorro, Boxer, MT12 templates)
- VTX table management (SmartAudio / Tramp)
- Blackbox log download & viewer
- Hardware-in-the-loop test rig
PRs are welcome โ read CONTRIBUTING.md first (there are hardware-safety rules encoded from real incidents: a wrong resource pin once made Motor 4 vanish). Bug reports and feature requests via the issue templates.
If this project saves you a bricked FC or a lost weekend, a โญ helps other pilots find it.
- macOS for full hardware detection (
system_profilerUSB tree); Windows/Linux get serial-based detection - Node.js 20.9+ (Node 22 recommended)
- USB cable for radio/drone connection
MIT ยฉ SoClose Society โ SOCLOSE PTE. LTD.
Keywords: FPV drone configuration, Betaflight CLI, MSP protocol, EdgeTX SD card, ExpressLRS ELRS binding, RadioMaster TX16S, RadioMaster Pocket, drone dashboard, quadcopter setup, flight controller flashing, FPV simulator setup.






