Web flasher
Requirements: Chrome or Edge on desktop (the Web Serial API — Firefox and Safari don’t ship it), a USB data cable (some cables only carry power), and a supported board (which one?).
⚠ Before you connect — this board needs one manual step on a first flash.
This board's USB runs on the ESP32-S3's native USB-Serial-JTAG (no bridge chip). If it is not already running LoRa Relay Chat firmware:hold the BOOT button, plug the cable in, then release BOOT once the port appears. That forces the ROM bootloader. After flashing, fully power-cycle the board (unplug every power source, wait a moment, replug) — on these boards the flash reports success but the new app won't start until a real power cycle. A board already running LoRa Relay Chat re-enters flash mode by itself via fwupdate on the console.
What it verifies before writing
Section titled “What it verifies before writing”Every release attaches per-board images, a SHA-256SUMS file, and a signed
119-byte .lrcmanifest per board (the full story).
Before flashing, this page:
- downloads the merged-flash image for your board and channel and checks
its SHA-256 against
SHA-256SUMS; - decodes the board’s
.lrcmanifestand shows you the signed firmware version, board and profile — and refuses to cross-flash if the manifest’s board id doesn’t match the board you picked; - cross-checks the manifest’s image hash against
SHA-256SUMS; - verifies the manifest’s Ed25519 signature against the release public key in-browser, where the browser’s WebCrypto supports Ed25519 (it says so honestly when it can’t);
- confirms the connected chip family matches the board you selected.
The merged image contains bootloader + partition table + app in one file
written at offset 0x0 — no offsets to get wrong.
The ESP32-S3 first-flash quirk
Section titled “The ESP32-S3 first-flash quirk”XIAO-class boards (and the Heltec V4, on its first flash) use the ESP32-S3’s native USB-Serial-JTAG — there’s no USB bridge chip driving a hardware reset line. Two consequences, straight from the user guide:
- First flash onto a board not already running LoRa Relay Chat: hold the BOOT button, plug the cable in (or tap reset while holding BOOT), release BOOT once the port shows up. That forces the ROM bootloader.
- After flashing: fully power-cycle the board. Flashing reports success, but on these boards the new app does not reliably start until every power source is disconnected and reconnected — a bare USB unplug/replug is enough if the cable is the only power source.
Boards already running LoRa Relay Chat skip all of this: fwupdate on the device
console requests download mode in software, and the Heltec V4’s CDC build
re-enters it automatically. Heltec V3 has a CP2102 bridge and never needs
the dance. The flasher shows the right steps for whichever board you pick —
before you flash, not after it fails.
CLI fallback
Section titled “CLI fallback”No Chrome? Every release is just files — flash them with esptool:
# Merged image: the whole flash in one file, offset 0x0.esptool.py --chip esp32s3 --port /dev/ttyACM0 write_flash 0x0 \ xiao_wio_sx1262-merged.bin
# Verify what you downloaded first:sha256sum -c SHA-256SUMS --ignore-missingOr build from source with PlatformIO: pio run -d firmware -e xiao_wio_sx1262 -t upload. The RAK4631 (nRF52) always takes the CLI path —
it uses the Adafruit DFU bootloader, not esptool, and no merged image is
published for it. Full instructions including manifest verification with
the lrc-manifest tool: user guide.