Article

Updating ExpressLRS firmware: Wi-Fi, passthrough and USB flashing, and what to back up before moving to 4.x

ExpressLRS 4.0.0 came out in February 2026 and 4.1.0 followed in July. The 3.x line is still maintained: 3.6.4 was released in June 2026. So before you flash anything, decide whether to move to 4.x at all. The 4.0.0 release notes are blunt about it: version 4 is not compatible with 3.x, 2.x or 1.x and will not connect to them. Once your radio's module runs 4.x, every receiver you want to fly with that radio has to run 4.x too. If you only want bug fixes and are happy with 3.x, staying on 3.6.4 is a valid choice.

If you do move to 4.x, go straight to 4.0.1 or newer. The 4.0.1 notes tell all 4.0.0 users to update, especially those with SX1280 (2.4 GHz) receivers, because among other things it fixes some random failsafes and cases where the link would not reconnect. As of this writing 4.1.0 is the current release.

The procedures below follow the ExpressLRS documentation pages on updating receivers and transmitter modules. The ExpressLRS Configurator got a new interface in version 1.8.0 in July 2026, so the screens may look different from the descriptions, but the steps are the same.

Before moving from 3.x to 4.x

  • Back up custom settings. Version 4.0 switched the internal flash filesystem from SPIFFS to LittleFS, and there is no way to convert it in place. Custom changes from the hardware page and everything set in the Options tab of the web UI (receiver baud rate, AirPort, Wi-Fi and regulatory domain overrides) will be erased. The release notes say to back up any custom hardware.json and options.json first. hardware.json can be downloaded from the web UI before updating and put back afterwards. PWM mappings and serial protocols are not affected.
  • Check your hardware is still supported. 4.0 dropped all STM32-based devices, including all R9M hardware and Ghost devices. Those stay on 3.x.
  • Full-resolution 8 and 12 channel modes. These modes no longer skip CH5, so CH5 is a normal full channel, the old CH9 or CH13 is gone and the arming flag is on CH14. The release notes suggest shifting CH6 and up down by one or choosing a higher channel count. If you fly with one of these modes (most often with PWM receivers), check your channel mapping.
  • Receivers built into the flight controller (SPI). These cannot be updated with the ExpressLRS Configurator. Their ExpressLRS code is part of Betaflight. Betaflight 2026.6 added ExpressLRS 4 support for SPI receivers, but it still builds version 3 by default. For version 4 you add ELRSV4 in the build options of the firmware flasher, and after that the board will not work with 3.x transmitters.
  • Lua script. In 4.0 the script is called elrs.lua. Delete the old elrsV3.lua and elrsV3.luac from the SD card so you do not see two ExpressLRS tools.

Firmware options

Whichever method you use, the Configurator asks for the same options before building or flashing:

  • Regulatory domain is mandatory. For 2.4 GHz you choose between ISM_2400 and EU_CE_2400. The EU domain uses listen-before-talk, so in Poland and the rest of the EU use it on both the module and the receiver. The documentation says the receiver configuration should match the module's for the two to sync and bind.
  • Binding phrase is optional but highly recommended. If you already use one, enter exactly the same phrase, otherwise the updated receiver will no longer connect.
  • Home Wi-Fi network is optional. With it set, the device joins your home network the next time it enters Wi-Fi mode, and you do not have to switch networks on your computer or phone during flashing.

Receiver over Wi-Fi

Wi-Fi needs no cables and no taking anything apart.

  1. In the Configurator, choose the version from the official releases, then the device category and target for your receiver. Set the flashing method to Wi-Fi and fill in the options.
  2. Click "Build". A folder opens with a single file, firmware.bin.gz. Since ExpressLRS 3.3.0 and Configurator 1.6.0 there is only this one gzip file, and you upload it as it is, without unpacking.
  3. Put the receiver into Wi-Fi mode. The documentation describes two ways. Auto Wi-Fi: turn the radio and module off, power-cycle the receiver and wait at least 60 seconds. When the receiver gets no valid CRSF packets, it starts Wi-Fi on its own, and the LED blinks fast (or, on RGB receivers, breathes green). The second way is the ExpressLRS Lua script on the radio: "Wifi Connectivity", then "Enable RX WiFi". That only works when the receiver is bound and connected to the module.
  4. If you power the quad from a LiPo, give the VTX some airflow or unplug it from the flight controller for the duration.
  5. On a phone or laptop, connect to the "ExpressLRS RX" network (password expresslrs) and open 10.0.0.1 in a browser. If you set your home network in an earlier flash, the receiver joins that network instead and you open http://elrs_rx.local. When that address does not resolve, mDNS is not working on your device or network. Find the receiver's address in the router's DHCP list or with arp -a.
  6. In the "Update" tab, drag in the file and click "Update". The docs say it takes a minute or two and ends with a success message. Older firmware has no "Update" tab and the firmware upload section is further down the page.
  7. After a few seconds the receiver LED should go back to a slow blink.

If your computer and the receiver are on the same home network, the Configurator can skip the manual upload. Put the receiver in Wi-Fi mode first, then click "Flash" instead of "Build".

Plan this step when moving from 3.x to 4.x. Once the module runs 4.x, a receiver still on 3.x will not connect to it, so the Lua script method will not reach it. Use Auto Wi-Fi for those receivers, or update them before you update the module.

Receiver through the flight controller or a USB adapter

Betaflight passthrough. The receiver stays wired to the flight controller and you flash it over the flight controller's USB port. The documentation lists a few steps it calls important for success: disconnect and close Betaflight Configurator (or any other FC configurator), power-cycle the flight controller, unplug and replug the USB cable, and plug in a LiPo only if the receiver does not power up from USB. Then choose "BetaflightPassthrough" as the flashing method and click "Flash". A green bar in the Configurator means success, and the receiver LED returns to a slow blink.

UART adapter. For when the other methods fail. Disconnect the receiver from the flight controller and wire it to a USB-UART adapter (CP210x, FT232, CH340 or CH9102 chips). Hold the boot button, or bridge the boot pads to ground, and plug the adapter into the computer. A solid LED means the receiver is in bootloader mode. Choose "UART" as the method and flash. Remove the boot pad bridge afterwards. The documentation stresses that even if the LED is already solid after a failed update, you should put the receiver into bootloader mode by hand, so you know it is in the bootloader and not in a boot loop.

Transmitter module

Over Wi-Fi. The same idea as for the receiver. Build the file in the Configurator, then in the ExpressLRS Lua script choose "WiFi Connectivity" and "Enable WiFi". The radio shows "WiFi Running". Connect to the "ExpressLRS TX" network (password expresslrs), open 10.0.0.1 (or http://elrs_tx.local if the module is on your home network) and upload the file in the "Update" tab. When it finishes, exit the Lua script and open it again to check the version. The documentation says not to worry if the script shows a syntax error after you enable Wi-Fi: the module is still in Wi-Fi mode, and the error usually comes from an older radio, older EdgeTX or a mismatch between the script and the module firmware.

Internal module through EdgeTX (EdgeTXPassthrough). Available only on radios with an internal ExpressLRS module. The documentation lists minimum EdgeTX versions for each radio, so update EdgeTX first if yours is older. Then on the radio, in the system menu on the hardware page, set the USB-VCP serial port to CLI. Connect the radio to the computer and choose "USB Serial (VCP)" on the radio. On Windows, check in Device Manager that the radio shows up as an STMicroelectronics Virtual COM Port. The documentation calls this a common failure point, and without it you need the VCP driver. In the Configurator, choose "EdgeTXPassthrough" and click "Flash".

External module over USB. Connect the module to the computer with a USB data cable. The docs recommend taking it out of the radio, and some modules have to be opened to reach the USB port. Windows should list it under Ports in Device Manager. If not, install the driver for its USB-UART chip (CP210x, CH340 or CH9102). Some modules have switches or jumpers that change what the USB port connects to: the docs mention jumpers or dipswitches inside Happymodel ES24TX modules and dipswitches on the back of BetaFPV Micro modules. Set them to the position for flashing over UART. Choose "UART" in the Configurator and flash. Afterwards, set the switches back to normal operation, put the module back in the radio and check the version in the Lua script.

After flashing

  • Check the version: for the module in the Lua script, for the receiver in the web UI.
  • Do not cut power while the firmware is being written. If a receiver's LED stays solid and it will not enter Wi-Fi mode after a failed update, the documentation says it may be soft-bricked. The unbricking page describes recovery, usually through UART and bootloader mode.
  • If you backed up hardware.json before moving to 4.x, upload it back.
  • Before the first flight, test on the bench with the props off: check the stick movement in the Receiver tab of Betaflight and check that failsafe kicks in when you switch the radio off.