Skip to content

Releases: espressif/esptool

Version 5.6.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 15:06

v5.6.0 (2026-10-15)

✨ New Features

  • stub_flasher: Update flasher stub to v1.4.1 (Peter Dragun - 0ffcfea)
  • espefuse: Adds ADC weight eFuse fields for ESP32-S31 (Konstantin Kondrashov - 62fdad2)

🐛 Bug Fixes

  • espefuse: Replace the bitstring dependency with a minimal local module (Roland Dobai - 402ec4b)
  • espefuse: Update ESP32-H21 eFuse definitions for ECO3 (Konstantin Kondrashov - bcfd059)
  • espefuse: Update ESP32-H4 eFuse definitions to V0.5 (Konstantin Kondrashov - 4f53ac6)
  • esp32h2: Identify chip variant and embedded flash (Konstantin Kondrashov - a6a4ea0)
  • Declare the license as an SPDX expression (Peter Dragun - ea9a60d)

Thanks to all contributors!

Version 5.5.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 08:55

v5.5.0 (2026-10-08)

✨ New Features

  • stub_flasher: Update flasher stub to v1.4.0 (Jaroslav Burian - 3fa0a3c)
  • ESP32-H21: Add support for flasher stub (Vojtech Piroch - 7f5da4d)
  • cli: Accept 64m and 32m flash frequencies (Jaroslav Burian - bf85060)
  • espefuse: Add eFuse calibration data for ESP32-S31 (Konstantin Kondrashov - cbabcc6)

🐛 Bug Fixes

  • load-ram: Warn when the image is incompatible with the chip (Jaroslav Burian - 8041d2b)
  • write-flash: Only reject incompatible bootloader images (Jaroslav Burian - d2c6246)
  • usb-otg: Limit block size to 0x800 for uploading stub without VID/PID (Peter Dragun - e781a1c)
  • xmc: Print boot-up fix success only when the re-check passes (Jaroslav Burian - 04783ea)
  • ESP32-C5: Identify chip variant and embedded flash/PSRAM in chip description (Jan Beran - 679f8be)
  • ESP32-C5: Enable baud rate change in Secure Download Mode (Jaroslav Burian - 470f0b3)
  • ESP32-H4: Correct target definitions (Jaroslav Burian - 5a3b860)
  • ESP32-H21: Correct target definitions (Vojtech Piroch - 605c7fd)
  • ESP32-S31: Fix addresses for disabling watchdogs when using USB-Serial/JTAG (Peter Dragun - 3c4c026)
  • espsecure: Report missing EC_PARAMS attribute of HSM ECDSA key (Jaroslav Burian - 184699a)
  • espsecure: Select HSM ECDSA parameters from key curve (Shubham-Padkonde - 30ff22a)
  • espefuse: Warn when ESP32-P4 Secure Download Mode leaves flash unwritable (Jaroslav Burian - b4b4c58)
  • Reject custom --spi-connection pins on unsupported chips (Jaroslav Burian - 88d0213)
  • Mimic how ROM computes crystal freq when stub enabled in ESP32 (Jan Beran - 6fcb061)

📖 Documentation

  • SDM: Show baud rate change limitation only for ESP32-C2 (Jaroslav Burian - ef38b3e)
  • test: License fixtures under CC0 and document their origin (Jakub Kocka - b08d06b)
  • contributing: Rewrite the contributions guide and add AGENTS.md (Roland Dobai - b6d1bb4)
  • Generate flash frequency encodings from target classes (Jaroslav Burian - 8aefcac)
  • Expose USB and reset capabilities from target classes (Peter Dragun - d1f8230)
  • Derive bootloader offset and flash frequency from target classes (Peter Dragun - b669113)
  • Remove boot pins values and fix IDF links (Vojtech Piroch - 2d7c29b)

🔧 Code Refactoring

  • targets: Add FLASH_32BIT_ADDR_SUPPORTED target capability (Jaroslav Burian - 589c349)
  • espefuse: Generalize calibration eFuse naming (Konstantin Kondrashov - 9d52132)

Thanks to all contributors!

Version 5.4.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 10:32

✨ New Features

  • stub_flasher: Update flasher stub to v1.2.2 (Jaroslav Burian - 4b64d42)
  • esptool: Add Secure Debug Controller commands (Aditya Patwardhan - 92842ee)
  • espsecure: Add support for Secure Debug Controller commands (Aditya Patwardhan - ba57b82)
  • espefuse: Adds eFuse token dump (Konstantin Kondrashov - a634b47)
  • Extract connect_esp function to cmds (Nebojša Cvetković - 9a6c5cb)
  • Migrate esp_rfc2217_server to use esp-pylib and rich_click (Peter Dragun - 8ec37d3)
  • Migrate esptool to use esp-pylib (Peter Dragun - bd052d6)

🐛 Bug Fixes

  • espefuse: Correct eFuse error and date register offsets (Roland Dobai - 464304e)
  • esp32-c61: Identify in-package flash and PSRAM variants (Roland Dobai - bed2388)
  • espefuse: Close the summary file after writing the JSON output (Peter Dragun - 9f5d8b0)
  • espefuse: Remove adc_tp class for irrelevant fields (Konstantin Kondrashov - e7f3ca8)
  • Unlocked cryptography bounds for Intel Mac (Jakub Kocka - c4fc382)
  • Budget stub erase work in compressed flash timeouts (Jaroslav Burian - 1040eea)
  • Raise default erase_region_timeout_per_mb to 40s (Jaroslav Burian - b1594ce)
  • satisfy mypy after adding esp-pylib to pre-commit (Peter Dragun - c4eb420)

📖 Documentation

  • troubleshooting: Make Secure Boot limitations only visible for ESP32-C3 (Peter Dragun - 18cd4c7)
  • contributing.rst: Add section about reusing shared code (esp-pylib) (Peter Dragun - 82d7d7a)
  • Add ESP32-S31 target to documentation (Peter Dragun - 9a35108)
  • Fix missing ESP32-C61 in chip list for 32MB+ flash access (Peter Dragun - cd5c428)
  • Fix supported flash sizes for esp32p4, esp32c5, esp32c61 and esp32h4 (Peter Dragun - 863c2b5)
  • Add documentation for color output and CLI help themes (Peter Dragun - 0315a10)

Thanks to @nebkat, and others for contributing to this release!

Results of checking the release against common anti-virus SW

The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.

Version 4.12.0

Choose a tag to compare

@github-actions github-actions released this 14 Jul 08:36

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

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

Choose a tag to compare

@github-actions github-actions released this 29 Jun 06:34
v5.3.1
0d2dfef

🐛 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

Version 5.3.0

Choose a tag to compare

@github-actions github-actions released this 01 Jun 15:21
v5.3.0
c94e362

✨ 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 --after option to reset the chip after the operation is finished (Peter Dragun - 1b8436f)

🐛 Bug Fixes

  • flasher stub: Fix C900 error 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_SDIO eFuse 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

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

Choose a tag to compare

@github-actions github-actions released this 18 Feb 16:10

✨ 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

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

Choose a tag to compare

@github-actions github-actions released this 27 Jan 13:17

✨ 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

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

Choose a tag to compare

@github-actions github-actions released this 16 Sep 09:55

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-pkcs11 9.0+ (Peter Dragun - 223456f)

Results of checking the release against common anti-virus SW

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

Choose a tag to compare

@github-actions github-actions released this 16 Sep 05:26

✨ 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-size argument 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-click 1.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-pkcs11 9.0+ (Peter Dragun - 3ea646f)

Thanks to @tormodvolden, and others for contributing to this release!

Results of checking the release against common anti-virus SW

The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.