ESP Flasher is a free, open-source desktop app for flashing firmware to Espressif ESP32, ESP32-S2/S3/C3/C6/H2, and ESP8266 microcontrollers. It wraps the official esptool in a native JavaFX GUI — no command line needed.
Works on macOS (Apple Silicon + Intel) and Windows. Flash Tasmota, ESPHome, WLED, MicroPython, Arduino, and custom ESP-IDF firmware from a single .bin file. A modern alternative to Tasmotizer and the Espressif Flash Download Tool that runs natively on Mac.
- Native
.dmgand.msiinstallers — no Python GUI required to launch - Popular firmware catalog — one-click flash of Tasmota and Tasmota SML (ottelo9); auto-downloads the correct factory binary for your chip and caches it locally
- Explore Popular Projects view — browse supported firmware with logos and open project repositories directly
- Custom Binary mode for any
.bin(ESPHome, WLED, MicroPython, Arduino, ESP-IDF) - Automatic ESP32/ESP8266 serial port detection (CP210x, CH340, FTDI)
- Selectable chip type, baud rate up to 921600, and custom flash offset
- Live progress bar and real-time
esptoollog output - Factory Mode — auto-flashes every ESP board the moment it is plugged in
- Inline Settings view: detected Python/esptool paths, custom path overrides, optional flash-log CSV with MAC-address audit trail
- One-click
esptoolinstall viapipif it is missing - Automatic light / dark theme based on system appearance
- Persistent flash counter for production runs
- 100% open source — MIT license, no telemetry
| Platform | Installer |
|---|---|
| macOS (Apple Silicon & Intel) | ESP.Flasher-1.0.4.dmg |
| Windows | ESP.Flasher-1.0.4.msi |
macOS: Drag to Applications. If Gatekeeper blocks it:
xattr -cr "/Applications/ESP Flasher.app"Windows: Run the .msi. If SmartScreen warns you, choose More info → Run anyway.
Both installers are currently unsigned.
- Python 3 — required by
esptool. Install from python.org or Homebrew. esptool— the app detects it and offers to install viapipon first launch.- USB drivers — boards with CP210x or CH340 USB-to-serial chips may need vendor drivers on Windows and older macOS.
- Set Source to a catalogued project (e.g. Tasmota or Tasmota SML (ottelo9)). The latest version is shown next to the dropdown.
- Pick your Chip — the chip list is filtered to variants the project actually ships.
- Select the Port and Baud Rate.
- Click Flash Once. The app downloads the matching factory binary, caches it under
~/.esp-flasher/firmware-cache, and flashes. Switching chips later reuses the cache until a new version is released.
Tip: click Explore Popular Projects → next to the Source dropdown to see all supported firmware with logos and open their GitHub pages.
- Set Source to Custom Binary.
- Click Browse... and pick your firmware
.binfile (ESPHome, WLED, MicroPython, Arduino, ESP-IDF, etc.). - Select the Chip (or leave on
autoto letesptooldetect it). - Select the Port — click Refresh if your board isn't listed.
- Choose a Baud Rate —
460800is a safe default;921600is faster if your USB-serial chip supports it. - Set the Flash Offset:
0x0for merged ESP32 binaries and all ESP8266,0x1000for ESP32 bootloader-only,0x10000for application-only. - Click Flash Once.
For flashing the same firmware onto many boards in sequence (production runs, classroom kits, repair shops):
- Select firmware, chip, baud rate, and offset.
- Click Factory Mode — the app waits for a device.
- Plug in a board. It flashes automatically.
- Unplug when done (green bar + chime), plug in the next one.
- Click Stop Factory when finished. The Flashed: counter tracks your total.
auto (autodetect), ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6, ESP32-H2, ESP8266.
Works with NodeMCU, Wemos D1 Mini, ESP32 DevKitC, ESP32-S3 DevKitC, ESP32-C3 SuperMini, M5Stack, Seeed XIAO ESP32, LilyGO T-Display, Adafruit Feather ESP32, Sonoff Basic/Mini, and most generic Espressif modules.
Requires JDK 17+ and Maven (or the included mvnw wrapper).
# Run from source
./mvnw clean package
java -jar target/espflasher-1.0.4.jar
# Build native installer (DMG on macOS, MSI on Windows)
./mvnw clean package
./mvnw jpackage:jpackage
# Output: target/dist/| Symptom | Fix |
|---|---|
| "Python not found" | Install Python 3 from python.org and restart. |
| "esptool not found" | Click the status label, or run python3 -m pip install esptool. |
| No ports listed | Install your board's USB-serial driver (CP210x, CH340, FTDI), then click Refresh. |
| "Timed out connecting to ESP" | Hold BOOT while plugging in. Try a lower baud rate (e.g. 115200). |
| macOS: "App is damaged and can't be opened" | xattr -cr "/Applications/ESP Flasher.app" |
| Firmware doesn't run after flash | Check the flash offset — many ESP32 images need 0x1000 or 0x10000. |
The full esptool output is visible in the log area — include it when filing an issue.
Open an issue before starting work. See CONTRIBUTING.md for setup and conventions.
MIT — © 2026 Ajinkya Gokhale
- Espressif Systems —
esptool - Fazecast —
jSerialComm - OpenJFX — JavaFX runtime
Keywords: ESP32 flasher, ESP8266 flasher, esptool GUI, flash ESP32 firmware Mac, Tasmotizer alternative macOS, Tasmota flasher, ESPHome flash tool, WLED flasher, ESP32-C3 flasher, ESP32-S3 flasher, factory flash ESP32, mass flashing tool, ESP firmware upload tool.

