Checking browser support…
Flash ESP32 / ESP8266 firmware straight from your browser — detect the chip, write .bin files, back up flash. No IDE, no esptool install.
Talks to your board locally over Web Serial — firmware never leaves your browser.
Checking browser support…
This ESP firmware flasher talks to an ESP32 or ESP8266 over USB directly from your browser using the Web Serial API, so there is nothing to install — no Python, no esptool, no Arduino IDE. It is built on esptool-js, Espressif's own official flashing library (Apache-2.0), so the underlying protocol is the same one the command-line esptool.py uses. Connect your board, and the tool auto-detects the chip family (ESP32, S2, S3, C3, C6, H2 and the ESP8266), the flash size, and negotiates a fast baud rate for you.
A full ESP firmware is usually three files written to three different flash offsets: the bootloader, the partition table and the app. This tool pre-fills the standard offsets for the detected chip — bootloader at 0x1000 on the original ESP32/S2 (or 0x0 on newer USB-Serial-JTAG parts), partition table at 0x8000, and the app at 0x10000 — and explains each one inline so you are never guessing. If your download is a single ESP-Web-Tools style merged binary, switch to merged mode and drop in the one file: it is written whole at 0x0 with no addresses to set.
Flashing overwrites whatever is on the chip. Before you write anything, use the read-back tool to dump the current flash to a .bin file you can keep — if the new firmware does not work out, you can write that backup straight back. You can also read the chip's flash ID and MAC address, and run a full-chip erase (a destructive operation gated behind a double confirmation).
esptool-js flashes images that already exist; it does not compile or convert. It cannot turn an ELF into a .bin (use the ESP-IDF toolchain for that), and it does not include espefuse or espsecure — there is no eFuse burning and no secure-boot / flash-encryption key handling here, by design. Those operations are irreversible and belong in a controlled desktop environment, not a web page.
Writing the wrong image, or a good image to the wrong address, can leave a board that will not boot. This is almost always recoverable: hold the BOOT/IO0 button (or strap it low) while connecting to force the ROM download mode, then flash a known-good firmware or your backup. A board is only truly bricked if you damage eFuses — which this tool deliberately cannot do.
The tool relies on esptool-js's own chip auto-detection, which covers the ESP32, ESP32-S2, ESP32-S3, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-H2 and the ESP8266. The chip family, flash size and MAC are read straight from the chip after you connect, so you never pick the wrong target. Chips not yet verified on real hardware are listed honestly in the support notes rather than claimed as tested.
Any Chromium browser with Web Serial: Chrome, Edge and Opera on desktop, plus Chrome 148+ on Android. Safari and Firefox do not implement Web Serial and have no announced plans to, so they cannot open a serial port at all — open this page in Chrome or Edge instead.
For a standard three-file build: the bootloader goes at 0x1000 on the original ESP32 and ESP32-S2, or at 0x0 on newer chips with USB-Serial-JTAG (S3, C3, C6, H2); the partition table goes at 0x8000; and the app goes at 0x10000. The tool pre-fills these for the detected chip and explains each. If in doubt, use a single merged binary, which needs no addresses.
A merged (or combined) binary is a single .bin that already contains the bootloader, partition table and application stitched together at their correct offsets. Projects like WLED and Tasmota ship these for one-click installs. In merged mode you drop in the one file and it is written whole at 0x0 — no per-file addresses to set.
Flashing the wrong image or writing to the wrong address can stop a board booting, but it is almost always recoverable: force ROM download mode (hold BOOT/IO0 low while connecting) and re-flash a known-good firmware or the backup you made. Take a full read-back backup before flashing so you always have a way home. True, permanent bricking requires damaging eFuses, which this tool cannot do.
No — and that is deliberate. esptool-js does not bundle espefuse or espsecure, so there is no eFuse writing, secure-boot enabling or flash-encryption key handling here. Those operations are irreversible and should be done from a controlled desktop toolchain, not a browser.
Yes. The read-back tool dumps a range of flash (or the whole chip) to a .bin file you download and keep. It is the single most important thing to do before flashing anything new — if the update goes wrong, you can write that exact image straight back.
After flashing, open the monitor to watch your board boot →
Want one-click WLED / Tasmota / ESPHome instead? Use the installer →