FlashESP is a web-based tool allowing the development of Arduino sketches and firmware flashing for ESP32 and ESP8266 hardware platforms.
I initially thought it was similar to ESP Web Tools for flashing firmware from the web and used by projects like ESPHome, but it goes further than that, and it looks like an Arduino Web IDE for ESP32/ESP8266 instead, since users can select boards, write code, load libraries, and flash the resulting firmware from a compatible web browser without installing anything else on their computer.
FlashESP key features:
- Cloud Compilation – Real-time compilation with live logs.
- Auto Configuration – Intelligent board and library detection.
- One-Click Flash – Web Serial integration. Connect your ESP via USB and…
FlashESP is a web-based tool allowing the development of Arduino sketches and firmware flashing for ESP32 and ESP8266 hardware platforms.
I initially thought it was similar to ESP Web Tools for flashing firmware from the web and used by projects like ESPHome, but it goes further than that, and it looks like an Arduino Web IDE for ESP32/ESP8266 instead, since users can select boards, write code, load libraries, and flash the resulting firmware from a compatible web browser without installing anything else on their computer.
FlashESP key features:
- Cloud Compilation – Real-time compilation with live logs.
- Auto Configuration – Intelligent board and library detection.
- One-Click Flash – Web Serial integration. Connect your ESP via USB and flash directly from a compatible browser (WebSerial support needed) without any drivers or downloads.
- Public Explorer – Discover community projects.
- Flexible Visibility – Create private projects for your team, public for the world, or unlisted for sharing specific links.
- Build Analytics – Track compilation time, resource usage, and build success rate.
Let’s head over to the FlashESP website to give it a try in Google Chrome (Firefox won’t work since it lacks WebUSB/WebSerial). I happen to have an M5Stack CardPuter Adv ESP32-S3 mini computer in my office, so I’ll use that.
The easiest way to start is to go to the demo. The platform is set to ESP8266, but I thought it would ask me to select the hardware once I click the “Flash Device Now” button. However, after selecting the serial device, I was promptly informed that the installation failed with a message reading: “Your ESP32-S3 board is not supported”.
I would need an ESP8266 board for a quick test, but I don’t have any where I am right now. So I explored public projects and found a few ESP32-S3-based ones, including the XIAO-WIFI-BLINK-AP, which creates an open WiFi access point to monitor a blinking LED on the XIAO ESP32S3 board.
Logging in requires an account, so I created one, and I could then click “Flash to Device” to proceed with the installation on the CardPuter Adv.
After a power cycle, I clicked the Flash to Device button again to access the serial log, and we can see the XIAO WiFi Blink AP demo is running.
Since the hardware is different, the LED on the Stamp-S3A module on the CardPuter Adv is not blinking, but I could confirm the access point and web interface were accessible.
At this point, I decided I wanted to change the code to make the LED work on the CardPuter Adv. So I opened the main.ino right from the web browser, but a message popped up “Cannot edit in read-only editor”. There’s no option to make a copy of a public project either, so I just created a new project called “CardPuter-Adv-Blink-RGB-AP” for the M5CardPuter board.
I then created a main.ino file, copied the code from the “XIAO-WiFi-Blink-AP” project, and started modifying it.
I needed the FastLED library. The user interface provides a Library Manager, similar to the one in the Arduino IDE, so I searched for the library and installed it.
Time to build the code. I took five tries to get something building successfully. It’s easy to debug as we can access the live build logs. I could open multiple windows to access the source code and the build interface.
The final step should be easy (so I thought), so I just clicked “Flash Device”, but it failed to work.
I spent around 45 minutes trying to fix it, trying again, and eventually reproducing the board configuration from the CardPuter Adv documentation website.
But no luck. I eventually downloaded the firmware.bin from the interface and flashed it with esptool:
| 12345678910111213141516171819 | jaufranc@CNX-LAPTOP-5:/Downloads$ python3 -m venv /esptool-envjaufranc@CNX-LAPTOP-5:/Downloads$ source /esptool-env/bin/activate(esptool-env) jaufranc@CNX-LAPTOP-5:/Downloads$ pip install esptool(esptool-env) jaufranc@CNX-LAPTOP-5:/Downloads$ ~/esptool-env/bin/esptool –chip esp32s3 –port /dev/ttyACM0 –baud 2000000 write_flash 0x0 firmware.binWarning: Deprecated: Command ‘write_flash’ is deprecated. Use ‘write-flash’ instead.esptool v5.1.0Connected to ESP32-S3 on /dev/ttyACM0:Chip type: ESP32-S3 (QFN56) (revision v0.2)Features: Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded Flash 8MB (GD)Crystal frequency: 40MHzUSB mode: USB-Serial/JTAGMAC: d0:cf:13:0d:c4:d8Stub flasher running.....98.8% 589824/596938 byteWrote 942800 bytes (596938 compressed) at 0x00000000 in 6.4 seconds (1183.3 kbit/s).Hash of data verified.Hard resetting via RTS pin... |
Flashing worked that way. However, looking at the log, there’s a SHA-256 comparison error.
I’ll stop here. I also noticed uncaught runtime errors when changing the zoom level in the code editor. It’s quite an interesting tool with most features implemented, but it’s still new, and more work is needed to polish it. As a side note, it is somewhat similar to the FlashMyPico website for Raspberry Pi Pico/Pico 2 boards, which supports C/C++ and MicroPython programming.

Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress. We also use affiliate links in articles to earn commissions if you make a purchase after clicking on those links.