Releases: espressif/esptool
Release list
Version 4.12.0
v4.12.0 (2026-07-13)
✨ New Features
- ESP32-P4: Support ECO7 (rev3.2) (Radim Karniš - 80a98cf)
- spi_flash: Add flash reset when detecting chip (C.S.M - cb2e3d7)
- stub_flasher: Adopt new flasher stub (Radim Karniš - 2db40c8)
- espefuse: Add raw_value to JSON summary output (Peter Dragun - 7f01960)
🐛 Bug Fixes
- ESP32-H4: Make flash could run at 64MHz since 2nd stage bootloader (Song Ruo Jing - 3b895c2)
- stub_flasher: Print an explanatory error if the stub flasher files are missing (Radim Karniš - 3cf5db7)
- Resolve symlinked paths in get_usb_vid_pid (igor.udot - 80684fd)
- Use FLASH_BEGIN flag to flash encrypted data instead of separate command (Jaroslav Burian - 634a87a)
- espefuse: Add WAFER_VERSION_HI eFuse for esp32p4 revisions less than v3.0 (harshal.patil - 705e18a)
- espefuse: Remove the value description of the eFuse for ESP32-C5 (Peter Dragun - 0353102)
- Security eFuse layout for C2/C5/C61 (Radim Karniš - 0dadfd1)
Results of checking the release against common anti-virus SW
- esptool-v4.12.0-windows-amd64.zip
- esptool-v4.12.0-macos-arm64.tar.gz
- esptool-v4.12.0-macos-amd64.tar.gz
- esptool-v4.12.0-linux-armv7.tar.gz
- esptool-v4.12.0-linux-amd64.tar.gz
- esptool-v4.12.0-linux-aarch64.tar.gz
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Version 5.3.1
🐛 Bug Fixes
- Fix operations over USB-Serial/JTAG transport in Secure Download Mode (Radim Karniš - 6c9ad54)
- Preserve VID/PID lookup for symlinked ports (Jaroslav Burian - aea67cd)
- Raise FatalError instead of leaking StopIteration (Roland Dobai - 2b5bc8b)
- espefuse: Remove non-existent HMAC key purposes for ESP32-C61 (harshal.patil - ec4fc2a)
- PyInstaller: Bundle pyserial URL handlers (Lucas Saavedra Vaz - 1044f3c)
📖 Documentation
- stub flasher: Document usage of
esp-flasher-stuband announce legacy stub deprecation (Radim Karniš - ff37ef7)
Version 5.3.0
✨ New Features
- ESP32-P4: Support ECO7 (rev3.2) (Radim Karniš - 27463b2)
- ESP32-S31: Add stub flasher support (Radim Karniš - 6e14f2e)
- flasher stub: Use esp-flasher-stub as the default flasher stub
- ESP32-C61: Add large flash support (Jaroslav Burian - 29aef6a)
- esptool: Adds efuse version and pkg efuses for ESP32H4 (Konstantin Kondrashov - bc55336)
- write-flash: Fully reflash all data when fast reflash verification fails (Radim Karniš - 1c16a59)
- write-flash: Log which file is being flashed when multiple files are given (Radim Karniš - dc457d1)
- reset: Support USB-UART adapters with hardware flow control (Jeija - 9ea2c5c)
- Add support for plugin system for optionally loading stub features (Roland Dobai - e6697e4)
- Disallow erasing key recovery info flash sectors when flash encryption using KM is enabled (harshal.patil - f55cf25)
- Add transport mode detection based on USB VID:PID instead of hard-coded ROM symbols (Vojtech Piroch - 0a5fe5c)
- Improve flash chip connection verification with SFDP register check (Jan Beran - 3821d83)
- espefuse: Update ESP32-H21 eFuse table (Konstantin Kondrashov - 93ef664)
- espefuse: Update ESP32-S31 eFuses table (Konstantin Kondrashov - ffbd13f)
- espefuse: Update ESP32-H4 eFuse table (Konstantin Kondrashov - c6ef00c)
- espefuse: Add ESP32-C5 calibration eFuse fields (Konstantin Kondrashov - 66c472b)
- espefuse: Add
--afteroption to reset the chip after the operation is finished (Peter Dragun - 1b8436f)
🐛 Bug Fixes
- flasher stub: Fix
C900error during compressed upload (Radim Karniš - 73308b8) - flasher stub: Fix writing to non-4-byte aligned offsets in flash (Radim Karniš - 73308b8)
- elf2image: Correct pad length for ram-only-header flash segments (Sylvio Alves - c637749)
- esptool: Use the correct address for reading eFuses in ESP32-S31 (Konstantin Kondrashov - 9376b9d)
- esptool: Fix incorrect eFuse bit mask for
SPI_BOOT_CRYPT_CNT_MASK(harshal.patil - 2a2b86d) - logger: Declare singleton instance as ClassVar for mypy (Radim Karniš - 48e4450)
- transport: Enable USB transport modes detection in Secure Download Mode (Radim Karniš - 3714d1b)
- ESP32-H4: Fix flash running at 64MHz since 2nd stage bootloader (Song Ruo Jing - 974d975)
- ESP32: Decode
VDD_SDIOeFuse voltage like espefuse summary (Radim Karniš - 825ad97) - ESP32-S31: Fix configurable MMU page size support (armando - 2806d84)
- ESP32-P4: Fix ECO7 early guru meditation errors during boot up (Radim Karniš - 3f6cb59)
- ESP32-S31: Fix flash manipulation commands (Radim Karniš - 1d51f72)
- ESP32-C61: Warn if encryption during download is disabled (Radim Karniš - 86c4f71)
- Fix security eFuse layouts for ESP32-C2, ESP32-C5, and ESP32-S31 (Mahavir Jain - 97c20ec)
- espefuse: Add checks for eFuse names in read and write protect commands (Peter Dragun - 118fbdb)
- espefuse: Remove the value description of the eFuse for ESP32-C5 (Peter Dragun - f6722ad)
🔧 Code Refactoring
- espefuse: Move MAC field logic to base_fields.py (Peter Dragun - a3dc123)
- espefuse: Move common code of EspEfuses to base class (Peter Dragun - 5e903ce)
- espefuse: Create EfuseKeyPurposeFieldBase and unite implementations (Peter Dragun - 889a3ff)
- espefuse: Move common fields to base_fields.py (Peter Dragun - 4a2bed1)
- espefuse: Add type hints and fix formatting (Peter Dragun - cfafe84)
- Add missing ABCs to base classes (Peter Dragun - 47a43b3)
Thanks to @Jeija and others for contributing to this release!
Results of checking the release against common anti-virus SW
- esptool-v5.3.0-windows-amd64.zip
- esptool-v5.3.0-macos-arm64.tar.gz
- esptool-v5.3.0-macos-amd64.tar.gz
- esptool-v5.3.0-linux-armv7.tar.gz
- esptool-v5.3.0-linux-amd64.tar.gz
- esptool-v5.3.0-linux-aarch64.tar.gz
Any failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Note: The macOS binary archives were re-uploaded on Jun 3, 2026 after fixing notarization. Earlier downloads may crash due to incorrect notarization. Please re-download the macOS build from this release.
Version 5.2.0
✨ New Features
- write-flash: Add fast reflashing option to update changed flash sectors only or skip already flashed content (documentation) (Radim Karniš - 5aad298)
- stub flasher: Make the esp-flasher-stub stub flasher available to use (Radim Karniš - cf9cdb7)
- esptool: Add ESP32-E22 support (Radim Karniš - ce838cd)
- esptool: Add ESP32-S31 support (C.S.M - 3077627)
- esptool: Update chip description for ESP32-C2/ESP8684H (Konstantin Kondrashov - c6f1839)
- python: Support Python v3.14 (Radim Karniš - 8d201c7)
- write-flash: Enable compress and encryption together (Jaroslav Safka - 5d747d8)
- write-flash: Allow encrypted writes using key from the Key Manager (harshal.patil - aa1b04a)
- write-flash: Apply compression only if it reduces the file size (Jaroslav Safka - 188028d)
- SPI flash: Add SPI flash reset when detecting chip (C.S.M - 1b57c61)
- espefuse: Add eFuse definitions for ESP32-H2 revision 1.2 (Konstantin Kondrashov - 08f4cbb)
- espefuse: Add ESP32-E22 support (Radim Karniš - a47e86f)
- espefuse: Enable ECDSA keys burning support for ESP32-H4 (nilesh.kale - a02d858)
- espefuse: Set postpone flag by default (Konstantin Kondrashov - 23e5ec1)
- espefuse: Add eFuse flash fields for ESP32-C2/ESP8684H (Konstantin Kondrashov - b3d4e15)
- espsecure: Add --skip-padding flag to sign-data and verify-signature API (hrushikesh.bhosale - ce5a4ac)
- ESP32-H4: Add stub flasher support (Radim Karniš - cf9cdb7)
- ESP32-C5: Add ECO3 stub flasher support (Radim Karniš - fc0c984)
- ESP32-P4: Add ECO6 stub flasher support (Radim Karniš - 9393921)
- ESP32-P4: Power on SPI flash chip during the connection process on ECO6 (Radim Karniš - 21c802f)
- HSM signing: Use primitive HSM signing mechanisms (harshal.patil - a1a4e95)
- CLI: Add autocomplete for port and baud rate (Peter Dragun - 8363cae)
- port detection: Improve ports sorting when autodetection is used (Jaroslav Burian - ec84fba)
🐛 Bug Fixes
- change_baud: Disable changing baud rate on ESP32-C2 and ESP32-C5 in Secure Download Mode (Radim Karniš - 9286189)
- USB mode detection: Fix USB mode detection on ESP32-C5 and ESP32-C61 (Radim Karniš - 81bdb76)
- ESP32-H4: Fix memory map and disable unsupported watchdog reset (Radim Karniš - 7728772)
- ESP32-C6: Fix ESP32-C6FH8 package detection (Roland Dobai - d7f1adf)
- ESP32-C3: Fix USB->Serial detection on rev1.1 (Jaroslav Safka - 8bc2c50)
- logging: Require custom logger to implement the correct interface (Radim Karniš - deca775)
- logging: Fix warning log for ESP32-S31 (Roland Dobai - 5920030)
- logging: Remove warning keyword from error outputs (Roland Dobai - 30808a4)
- logging: Always flush output in stage mode (Peter Dragun - a5c9090)
- write-flash: Print correct number of bytes and flash offsets when --no-stub (Radim Karniš - e78ab87)
- write-flash: Allow --force and --erase-all to be used together (Radim Karniš - c26e58e)
- write-flash: Fix ESP32-C2 FE key validation (Konstantin Kondrashov - c02d53f)
- write-flash: Fix ESP32 FE key validation (Konstantin Kondrashov - 4f1d212)
- write-flash: Allow bootloader reflash in secure-boot-v2 scheme (Mahavir Jain - 9d0bdd5)
- erase-region: Allow erasing past 4MB in ROM and SDM mode (Radim Karniš - 06794d7)
- image cmds: Print the name of chip in full expanded form (Radim Karniš - 6b6e0f4)
- espefuse: Ensure port is closed when creating commands fails (Peter Dragun - 9646a80)
- espefuse: Fix decoding error in ESP32-C5 summary (Peter Dragun - e49c69a)
- espefuse: Fix calibration eFuses for ESP32-P4 ECO5 (Konstantin Kondrashov - a1ca6c9)
- espefuse: Fix ECDSA key purposes for ESP32-P4 (Konstantin Kondrashov - ae23ab2)
- espsecure: Fix the keyfile arg of the sign-data command by making it optional (harshal.patil - ee35dda)
- espsecure: Allow verifying multiple appended ECDSA signatures (harshal.patil - 9a207b1)
- windows: Limit rich_click version to <1.9.0 (Peter Dragun - fa97591)
Results of checking the release against common anti-virus SW
- esptool-v5.2.0-windows-amd64.zip
- esptool-v5.2.0-macos-arm64.tar.gz
- esptool-v5.2.0-macos-amd64.tar.gz
- esptool-v5.2.0-linux-armv7.tar.gz
- esptool-v5.2.0-linux-amd64.tar.gz
- esptool-v5.2.0-linux-aarch64.tar.gz
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Version 4.11.0
✨ New Features
- ESP32-P4: Add ECO6 support (Radim Karniš - 1fe1d8f)
- ESP32-P4: Power on SPI flash chip during the connection process on ECO6 (Radim Karniš - b8dd0a3)
- ESP32-C5: Add ECO3 support (Radim Karniš - 1fe1d8f)
- ESP32-C5: Add chip features (Peter Dragun - 9d91efc)
🐛 Bug Fixes
- change_baud: Disable changing baud rate on ESP32-C2 and ESP32-C5 in Secure Download Mode (Radim Karniš - 0e3adae)
- USB mode detection: Fix USB mode detection on ESP32-C5 and ESP32-C61 (Radim Karniš - 667861b)
- ESP32-C3: Fix USB->Serial detection on rev1.1 (Jaroslav Safka - 3660ff6)
- ESP32-C6: Fix ESP32-C6FH8 package detection (Roland Dobai - 70733c1)
- image-info: Sanitize app and bootloader info of null bytes (Radim Karniš - 8fccdf8)
- espefuse: Fix decoding error in ESP32-C5 summary (Peter Dragun - b3134ed)
- espefuse: Fix calibration eFuses for ESP32-P4 ECO5 (Konstantin Kondrashov - ab8ecae)
- espefuse: Fix ECDSA key purposes for ESP32-P4 (Konstantin Kondrashov - c75a3de)
- espsecure: Allow verifying multiple appended ECDSA signatures (Harshal Patil - 2856164)
Results of checking the release against common anti-virus SW
- esptool-v4.11.0-windows-amd64.zip
- esptool-v4.11.0-macos-arm64.tar.gz
- esptool-v4.11.0-macos-amd64.tar.gz
- esptool-v4.11.0-linux-armv7.tar.gz
- esptool-v4.11.0-linux-amd64.tar.gz
- esptool-v4.11.0-linux-aarch64.tar.gz
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Version 4.10.0
New Features
- ESP32-P4: Add ECO5 support (Jaroslav Safka - 2ea1fca, Konstantin Kondrashov - a2f4e66)
- ESP32-C5: Add support for >16 MB flash sizes (Roland Dobai - 0ac477a)
- espefuse: Add custom key purposes for ESP32-C6/C5/P4 (Konstantin Kondrashov - 3996e21)
- espefuse: Support burning ECDSA_384 keys (Konstantin Kondrashov - cc61acf)
- espefuse: Clean up limitation for BLOCK9 usage (Konstantin Kondrashov - dc220df)
- espefuse: Add support for burning 512-bit keys on ESP32-C5 (Konstantin Kondrashov - 599634a)
Bug Fixes
- Use correct error codes for ROM errors (Jaroslav Burian - 529ff4e)
- espefuse: Fix re-connection issue in check-error via USB-Serial/JTAG (Konstantin Kondrashov - af6ff30)
- write_flash: Make write flash memory-layout-independent (Jaroslav Safka - aee68fa)
- elf2image: Handle ELF files with zero program header counts (Tormod Volden - 2e87882)
- espefuse: Disable programming and usage of XTS-AES-256 eFuse key for ESP32-C5 (harshal.patil - 13121d4)
- ESP32-C5: Erase during flashing above 16MB (Jaroslav Burian - a977cdf)
- espsecure: Add support for
python-pkcs119.0+ (Peter Dragun - 223456f)
Results of checking the release against common anti-virus SW
- esptool-v4.10.0-windows-amd64.zip
- esptool-v4.10.0-macos-arm64.tar.gz
- esptool-v4.10.0-macos-amd64.tar.gz
- esptool-v4.10.0-linux-armv7.tar.gz
- esptool-v4.10.0-linux-amd64.tar.gz
- esptool-v4.10.0-linux-aarch64.tar.gz
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Version 5.1.0
✨ New Features
- ESP32-P4: Add ECO5 support (Jaroslav Safka - 6c10050, Konstantin Kondrashov - 40f103c)
- ESP32-C5: Add support for >16 MB flash sizes (Roland Dobai - 8e2b94e)
- espefuse: Add custom key purposes for ESP32-C6/C5/P4 (Konstantin Kondrashov - c6ce0bc)
- espefuse: Support burning ECDSA_384 keys (Konstantin Kondrashov - 4a9a3d8)
- espefuse: Clean up limitation for BLOCK9 usage (Konstantin Kondrashov - d63e3db)
- espefuse: Add support for burning 512-bit keys on ESP32-C5 (Konstantin Kondrashov - 468de5c)
🐛 Bug Fixes
- Use correct error codes for ROM errors (Jaroslav Burian - da4346b)
- ESP32-C5: Erase during flashing above 16MB (Jaroslav Burian - d65a24e)
- write_flash: Make write flash memory-layout-independent (Jaroslav Safka - d19413c)
- elf2image: Handle ELF files with zero program header counts (Tormod Volden - d27ce37)
- elf2image: Fix
--pad-to-sizeargument parsing (Peter Dragun - 66a1377) - CLI: Handle deprecated options with "=" before value (Peter Dragun - f05fb62)
- Prevent exiting immediately when being called programmatically (Fu Hanxi - d8ae230)
- espefuse: Update CLI to support
rich-click1.9.0 (Peter Dragun - 2ae5535) - espefuse: Fix re-connection issue in check-error via USB-Serial/JTAG (Konstantin Kondrashov - a160468)
- espefuse: Disable programming and usage of XTS-AES-256 eFuse key for ESP32-C5 (harshal.patil - c85a93d)
- espsecure: Fix printing key digest in signature info (Radim Karniš - 7e53596)
- espsecure: Extract public key version 1 in RAW format (Peter Dragun - 6cfced8)
- espsecure: Allow signing multiple files in one go (Peter Dragun - 0177d61)
- espsecure: Add support for
python-pkcs119.0+ (Peter Dragun - 3ea646f)
Thanks to @tormodvolden, and others for contributing to this release!
Results of checking the release against common anti-virus SW
- esptool-v5.1.0-windows-amd64.zip
- esptool-v5.1.0-macos-arm64.tar.gz
- esptool-v5.1.0-macos-amd64.tar.gz
- esptool-v5.1.0-linux-armv7.tar.gz
- esptool-v5.1.0-linux-amd64.tar.gz
- esptool-v5.1.0-linux-aarch64.tar.gz
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Version 5.0.2
🐛 Bug Fixes
- Fix compatibility with Click 8.2.0+ (Peter Dragun - 524825e)
- Fix
--port-filterargument parsing (Peter Dragun - b53a16c) - Fix buffering issues with CP2102 converter causing connection failures (Jaroslav Burian - 5338ea0)
- ESP32-S3: Fix stub flasher execution with active Secure Boot (Radim Karniš - 7ba285b)
- ESP32-C3: Disable flasher stub when Secure Boot is active (Radim Karniš - 1f1ea9a)
- espefuse: Handle error in
burn-efusecommand when no arguments are provided (Peter Dragun - 0f32306)
Results of checking the release against common anti-virus SW
- esptool-v5.0.2-windows-amd64.zip
- esptool-v5.0.2-macos-arm64.tar.gz
- esptool-v5.0.2-macos-amd64.tar.gz
- esptool-v5.0.2-linux-armv7.tar.gz
- esptool-v5.0.2-linux-amd64.tar.gz
- esptool-v5.0.2-linux-aarch64.tar.gz
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Version 4.9.1
🐛 Bug Fixes
- Fix buffering issues with CP2102 converter causing connection failures (Jaroslav Burian - 72f6b0d)
- ESP32-S3: Fix stub flasher execution with active Secure Boot (Radim Karniš - a846531)
- ESP32-C3: Disable flasher stub when Secure Boot is active (Radim Karniš - a03158c)
- elf2image: Fix support for ESP32-H4 MMU page size configuration (Jaroslav Burian - 5ae594b)
- elf2image: Validate ELF section types and addresses before processing (Jaroslav Burian - e67ec01)
- elf2image: Handle
PREINIT_ARRAYsection type in ESP32-P4 ELF files properly (Jaroslav Burian - f5404fa) - ESP32-S2: Enabled auto-detection in secure download mode (Jaroslav Burian - 624f1b6)
- ESP32-P4: Enabled
ECO5chip detection (Jaroslav Burian - e4b9675)
Results of checking the release against common anti-virus SW
- esptool-v4.9.1-windows-amd64.zip
- esptool-v4.9.1-macos-arm64.tar.gz
- esptool-v4.9.1-macos-amd64.tar.gz
- esptool-v4.9.1-linux-armv7.tar.gz
- esptool-v4.9.1-linux-amd64.tar.gz
- esptool-v4.9.1-linux-aarch64.tar.gz
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Version 5.0.1
🐛 Bug Fixes
- elf2image: Validate ELF section types and addresses before processing (Jaroslav Burian - 97a1546)
- elf2image: Handle
PREINIT_ARRAYsection type in ESP32-P4 ELF files properly (Jaroslav Burian - ec84a75) - elf2image: Fix incorrect logger call (Marek Matej - 637f0e6)
Results of checking the release against common anti-virus SW
- esptool-v5.0.0-windows-amd64.zip
- esptool-v5.0.0-macos-arm64.tar.gz
- esptool-v5.0.0-macos-amd64.tar.gz
- esptool-v5.0.0-linux-armv7.tar.gz
- esptool-v5.0.0-linux-amd64.tar.gz
- esptool-v5.0.0-linux-aarch64.tar.gz
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.