The drone stack has more layers than the aircraft.

The ExpressLRS recovery story was about the radio link.

The Betaflight firmware post was about the flight controller.

The dRehmFlight post was about readable Arduino/Teensy flight-control code.

EdgeTX is the transmitter side.

It is the firmware that runs on the radio in your hands.

That means models, switches, mixes, timers, telemetry screens, Lua scripts, RF module setup, SD card content, sounds, warnings, and the user interface you actually touch before the aircraft moves.

EdgeTX is open-source firmware for RC radio transmitters. It is a community-driven continuation of the OpenTX family, focused on modern transmitter hardware, touchscreen/color radios, Lua scripting, telemetry, RF module integration, and target-specific builds.

EdgeTX GitHub Source Code EdgeTX Website EdgeTX Manual EdgeTX Releases EdgeTX Buddy EdgeTX Lua Documentation License: GPL-2.0

What is EdgeTX?

EdgeTX is firmware for RC transmitters.

It does not fly the drone directly.

It turns pilot input into channel output, module control, telemetry display, model logic, warnings, audio, scripts, and radio-side behavior.

In a normal FPV setup, the simplified chain looks like this:

your hands
  -> EdgeTX radio model, inputs, mixes, switches
  -> ExpressLRS or another RF module
  -> receiver
  -> Betaflight or another flight controller
  -> motors and servos

That is why EdgeTX deserves a separate post.

If the transmitter model is wrong, the aircraft can still behave wrong even when the receiver firmware and flight-controller firmware are both correct.

Modes, channel order, arming switch, throttle cut, failsafe expectations, telemetry warnings, and RF module settings all begin on the radio.

Why It Matters

EdgeTX is the layer where RC flying becomes programmable for the pilot.

On the flight controller, you configure the aircraft.

On the transmitter, you configure how you command the aircraft.

That includes:

  • radio profiles and models
  • inputs and mixers
  • curves and flight modes
  • logical switches and special functions
  • telemetry sensors and warnings
  • audio prompts and sound packs
  • Lua tools and widgets
  • internal and external module settings
  • simulator and desktop workflows through Companion

For FPV and RC users, that is not cosmetic.

A clean transmitter setup can make arming, mode switching, telemetry warnings, GPS rescue, turtle mode, trainer mode, and model switching safer and easier to reason about.

Repository Snapshot

I cloned and inspected:

repo: https://github.com/edgetx/edgetx
HEAD: 884b306592f3
describe: nightly-2-g884b306592
license: GPL-2.0

The current GitHub page described the project as open-source firmware for R/C radios, and the latest release shown there was EdgeTX “Queen Anne’s Revenge” v2.12.2, published on June 21, 2026.

The local checkout had active work around firmware fixes, key lock support, iFlight Commando 14 support, RadioMaster and HelloRadioSky variants, serial gimbal handling, switch handling, and generated target metadata.

The main repo areas are:

Path What It Contains
radio/ transmitter firmware source, board targets, HAL, GUI, telemetry, pulses, Lua, storage, tests
companion/ EdgeTX Companion desktop tooling and simulator integration
web/ browser-based WebAssembly simulator shell
docs/ MkDocs developer and build documentation
tools/ build scripts, target helpers, generated data validation, firmware utilities
cmake/ CMake modules, native/ARM/WASI toolchain helpers, dependency fetchers
fw.json release target index used by tooling
CMakePresets.json firmware, companion, simulator, and test presets

This is a large embedded firmware project, not a single Arduino sketch.

Tech Stack

The stack is broader than “C firmware”.

Layer Technology
Firmware languages C and C++
Build system CMake, CMake presets, Ninja-compatible workflows
Firmware toolchain arm-none-eabi for radio firmware builds
Native tooling Qt 6 for Companion and desktop simulator paths
Scripting Lua on the radio and simulator
RTOS and embedded libraries FreeRTOS, STM32 HAL, CMSIS, FatFs, LVGL on relevant targets
Target metadata hardware definition JSON/YAML generation and validation scripts
Web simulator Svelte, Vite, TypeScript, WebAssembly, WASI threads
Browser storage/runtime SharedArrayBuffer, Atomics, OPFS, WebGL LCD rendering
Documentation MkDocs

So yes: EdgeTX is embedded firmware.

But the repo also includes desktop and web tooling around that firmware.

That is what makes it different from dRehmFlight.

dRehmFlight is compact and educational.

EdgeTX is a production transmitter firmware ecosystem.

Supported Radios and Targets

The fw.json file in this checkout listed 42 firmware targets.

Examples include:

  • RadioMaster TX16S
  • RadioMaster TX16S MK3
  • RadioMaster Boxer
  • RadioMaster Pocket
  • RadioMaster Zorro
  • iFlight Commando 8
  • iFlight Commando 14
  • Jumper T15, T16, T18, T20, T22
  • FrSky Horus X10, X10 Express, X12S
  • FrSky QX7 Access
  • Flysky PL18, PL18EV, PL18U, NV14, NB4+
  • HelloRadioSky V14, V14LCD, V16

That target list matters.

Like Betaflight, EdgeTX is not just “build firmware”.

It is “build firmware for a specific board, revision, display, input layout, switches, storage, RF module assumptions, and feature set”.

The documented build flags make that explicit:

cmake --fresh -S . -B build-output -Wno-dev \
  -DPCB=X10 \
  -DPCBREV=TX16S \
  -DDEFAULT_MODE=2 \
  -DCMAKE_BUILD_TYPE=Debug

For a RadioMaster TX16S, the docs use:

PCB=X10
PCBREV=TX16S

That same idea appeared in the Betaflight post: hardware names are not decorative.

They decide the firmware you should build or flash.

Radio Protocols and ExpressLRS

EdgeTX is not ExpressLRS.

ExpressLRS is RF link firmware for transmitters and receivers.

EdgeTX is the radio operating system that can talk to internal or external RF modules.

The developer docs include external module protocol notes for:

  • PPM
  • PXX
  • ACCESS
  • DSM2
  • SBUS
  • Multiprotocol modules
  • Crossfire

The Crossfire/CRSF path is the important one for many ExpressLRS users, because ExpressLRS commonly uses the CRSF ecosystem for control and telemetry.

The repo also contains Companion-side ExpressLRS updater integration and CRSF/ELRS telemetry simulation UI references.

That makes EdgeTX a natural neighbor to the ExpressLRS post.

The radio can run EdgeTX while the external module runs ExpressLRS.

They solve different parts of the same control chain.

Companion and Buddy

EdgeTX is not only firmware.

The project also connects to two important user workflows:

Tool Role
EdgeTX Companion desktop application for model management, radio profiles, simulation, backups, and firmware-related workflows
EdgeTX Buddy browser-based flashing/updating workflow linked from the EdgeTX project

In the source tree, companion/ is the Qt desktop side.

It is useful because transmitter configuration can be complex enough that editing, backing up, comparing, and simulating models from a computer is often safer than doing everything on the radio screen.

The post-flight analogy would be:

Betaflight App configures the flight controller.
EdgeTX Companion configures and simulates the transmitter/model side.

They are not the same kind of app, but they play similar roles in their own layers.

The Web Simulator

The web/ folder is a browser-based EdgeTX radio simulator shell.

It uses:

  • Svelte
  • Vite
  • TypeScript
  • WebAssembly
  • WASI threads
  • SharedArrayBuffer
  • Atomics
  • OPFS storage
  • WebGL LCD rendering

The browser requirements are not trivial.

Threaded WebAssembly needs cross-origin isolation headers:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

That is why the web simulator is more than a static page with JavaScript.

It is still deployable as static assets, but the host must serve the right headers for SharedArrayBuffer and WASM threads.

Cloudflare Pages can do this with a _headers file, which the repo already includes under web/public/_headers.

Local Trial

I checked the local environment:

cmake: 3.28.3
python: 3.12.3
node: 22.22.0
npm: 10.9.4
ninja: present
arm-none-eabi-gcc: not present

Then I validated the firmware target index:

python3 tools/validate-json.py fw.json

That passed:

JSON syntax is valid
fw.json schema validation passed - found 42 targets
All targets are in alphabetical order
All EdgeTX fw.json validations passed

I also regenerated the web simulator radio index:

node web/scripts/gen-radios-json.js

That generated 41 radios.json entries and skipped x9e-hall because no hardware definition JSON was found for that flavor.

For a native simulator configure, I tried:

cmake --preset simu -DPCB=X10 -DPCBREV=TX16S -DDEFAULT_MODE=2

That did not complete because Qt6 development packages are not installed locally:

Could not find a package configuration file provided by "Qt6"

So the local result is:

metadata validation: passed
radio index generation: ran
native simulator configure: blocked by missing Qt6
real firmware build: not attempted because arm-none-eabi-gcc is missing

That is a fair result for this machine.

EdgeTX is a serious firmware project; the documented path expects the proper build environment or the official Docker/devcontainer setup.

How to Build the TX16S Example

The project docs use a RadioMaster TX16S example.

The shape is:

git clone --recursive -b main https://github.com/EdgeTX/edgetx.git edgetx_main
cd edgetx_main
mkdir build-output

cmake --fresh -S . -B build-output -Wno-dev \
  -DPCB=X10 \
  -DPCBREV=TX16S \
  -DDEFAULT_MODE=2 \
  -DCMAKE_BUILD_TYPE=Debug

cmake --build build-output --target arm-none-eabi-configure
cmake --build build-output --target firmware --parallel

If successful, the documented firmware binary lands under:

build-output/arm-none-eabi/firmware.bin

Do not treat that as a generic flashing command.

For a real radio, you need the correct target, the correct SD card pack, and the correct flashing path for the device.

Where It Fits in the RC Stack

The recent posts now map cleanly:

Layer Project
Radio transmitter firmware EdgeTX
Radio link firmware ExpressLRS
Flight-controller firmware Betaflight
Browser/desktop flight-controller UI Betaflight App
Flight log analysis Betaflight Blackbox Explorer
Educational custom VTOL firmware dRehmFlight

That separation matters.

EdgeTX does not replace ExpressLRS.

ExpressLRS does not replace Betaflight.

Betaflight does not configure the radio model in your hands.

dRehmFlight does not try to be the whole transmitter and FPV ecosystem.

Each project owns a different failure surface.

FAQ

Final Thoughts

EdgeTX is easy to underestimate because it is not on the aircraft.

But the radio is where intent begins.

If the radio model is wrong, the aircraft can receive the wrong command perfectly.

That makes EdgeTX one of the most important open-source projects in the RC stack.

It connects the pilot, transmitter hardware, RF module, telemetry, scripts, sounds, warnings, models, and mixes into one programmable interface.

After ExpressLRS and Betaflight, EdgeTX completes the picture from the other side of the link.