NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3431 most downloaded on PyPI
A serial utility for flashing, provisioning, and interacting with Espressif SoCs.
Last release 1 months ago
02 Sep 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 53 of 54 stable releases
4 versions withdrawn
withdrawn after publishing
10 years old
92 releases · first in 2016
stub_flasher : Update flasher stub to v1.2.2 (Jaroslav Burian - 4b64d42 )
Thanks to @nebkat, and others for contributing to this release!
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
One column per quarter.
stub flasher : Document usage of esp-flasher-stub and announce legacy stub deprecation (Radim Karniš - ff37ef7 )
esp-flasher-stub and announce legacy stub deprecation (Radim Karniš - ff37ef7)ESP32-P4 : Support ECO7 (rev3.2) (Radim Karniš - 27463b2 )
--after option to reset the chip after the operation is finished (Peter Dragun - 1b8436f)C900 error during compressed upload (Radim Karniš - 73308b8)SPI_BOOT_CRYPT_CNT_MASK (harshal.patil - 2a2b86d)VDD_SDIO eFuse voltage like espefuse summary (Radim Karniš - 825ad97)Thanks to @Jeija and others for contributing to this release!
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.
Nothing published for this version
Nothing published for this version
Nothing published for this version
write-flash : Add fast reflashing option to update changed flash sectors only or skip already flashed content ( documentation ) (Radim Karniš - 5aad29
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
CLI: Handle deprecated options with "=" before value *(Peter Dragun - f05fb62)*
--pad-to-size argument parsing (Peter Dragun - 66a1377)rich-click 1.9.0 (Peter Dragun - 2ae5535)python-pkcs11 9.0+ (Peter Dragun - 3ea646f)Thanks to @tormodvolden, and others for contributing to this release!
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Nothing published for this version
Fix compatibility with Click 8.2.0+ *(Peter Dragun - 524825e)*
--port-filter argument parsing (Peter Dragun - b53a16c)burn-efuse command when no arguments are provided (Peter Dragun - 0f32306)The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
elf2image: Validate ELF section types and addresses before processing *(Jaroslav Burian - 97a1546)*
PREINIT_ARRAY section type in ESP32-P4 ELF files properly (Jaroslav Burian - ec84a75)The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
In this major release, esptool was refactored, and some breaking changes were introduced. See the `v5` Migration Guide article in the documentation fo…
In this major release, esptool was refactored, and some breaking changes were introduced. See the v5 Migration Guide article in the documentation for a detailed list of changes and guidance on adapting existing workflows and scripts to ensure compatibility when updating from v4.*.
See the esptool: Updates about the v5 major release developer portal article for an overview of some of the new features and changes.
args object) (Radim Karniš - ba36933) (Peter Dragun - d7da0f8)esptool, espefuse, espsecure now use click for CLI argument parsing and rich-click for nice CLI rendering (Peter Dragun - d40fefa)_) with dashes (-) (e.g., flash_id -> flash-id). Old names will print deprecation warnings (Peter Dragun - 3cecd6d).py suffix from scripts (e.g., esptool.py flash-id -> esptool flash-id). Using .py will print deprecation warnings (Peter Dragun - 635cde1)EsptoolLogger class, allowing easy redirection (Radim Karniš - 1ce02db)--version 1 output format (Radim Karniš - 3f625c3)KeyboardInterrupt handling (Radim Karniš - 0864e17)make-image command in favor of other workflows (Radim Karniš - 955a7c8)execute-scripts in favor of the new public API (Peter Dragun - ff72b26)ESP32-C5(beta3), ESP32-C6(beta), ESP32-H2(beta1/2), ESP32-S3(beta2) are no longer supported (Radim Karniš - 8f1c206)--verify option (Radim Karniš - dbf3d1c)--trace with more info and more readable formatting (Radim Karniš - 0beee77)ESP32-C5 (Konstantin Kondrashov - 9104038)ESP32-P4 (Konstantin Kondrashov - c102510)ecdsa module, using cryptography instead (Radim Karniš - e132f6f)k, M suffix for flash sizes (Peter Dragun - 6f0d779)flash_size check (Radim Karniš - e6bfc3b)Unsupported detection protocol stage (Radim Karniš - 05553a4)sys.stdout is not available (Radim Karniš - 5176b67)ECO5 chip detection (Jaroslav Burian - 0b3460f)Thanks to @stevanStevic, @Jason2866, and others for contributing to this release!
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Nothing published for this version
Nothing published for this version
ESP32-P4 : Support ECO7 (rev3.2) (Radim Karniš - 80a98cf )
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Nothing published for this version
Nothing published for this version
Nothing published for this version
ESP32-P4: Add ECO6 support *(Radim Karniš - 1fe1d8fbd0291f4e2fc4eb4f7d520d47cb6f36b3)*
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Nothing published for this version
Nothing published for this version
ESP32-P4: Add ECO5 support *(Jaroslav Safka - 2ea1fcaa37da745d3d8a0bb929c48d07fe0c8c81, Konstantin Kondrashov - a2f4e66c69a1a12b97a8e43927b81e034f8d3b
python-pkcs11 9.0+ (Peter Dragun - 223456f5d195eb669957343bd3b475e5738953db)The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Nothing published for this version
Nothing published for this version
ESP32-P4: Enabled USB-OTG in flasher stub
watchdog_reset option working even in USB modesESP32-C5 ECO2ESP32-C61 ECO3encrypt_flash_data() and decrypt_flash_data()ESP32-H2PSRAM_CAP efuse fieldESP32-C61, ESP32-C5, and ESP32-P4ESP32-C5 ECO2 flash writesESP32-C5 ECO2 and ESP32-C61 ECO3flash_size checks if we can't read flash sizeset_flash_voltageJTAG_SEL_ENABLE to GPIO34 strapping pin on ESP32-P4--flash-mmu-page-config for all chipsThanks to @chromalock, @befeleme, and others for contributing to this release!
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
packaging: Fixed failing esptool imports on Windows
Thanks to @befeleme and @matthuisman for contributing to this release!
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
--ram-only-header (Tiago Medicci Serrano - 5d9d5be)ESP32-P4: Enabled USB-Serial/JTAG in flasher stub
wafer and pkg_version fieldsread_flash_sfdp command to read the flash chip SFDP registerkey_purpose fieldsesp instancesadc_info command for all chipscoding scheme == 3burn_efuse cmdcheck_error --recover chip even if there are errorsburn_key of ECDSA_KEYno_reset mode on Windowsesp_rfc2217_server into a standalone subpackageThanks to @befeleme, @klondi, @gnought, @greendoescode, @BoryaGames, @andrewleech, @bryghtlabs-richard, @2opremio, and others for contributing to this release!
The failures are probably false positives. You can mark esptool as safe in your anti-virus SW, or install esptool from source.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
spi_connection: Support --spi-connection on all chips, allowing connection of an external flash
Thanks to @20162026, @rretanubun, and others for contributing to this release!
Nothing published for this version
Nothing published for this version
Nothing published for this version
ESP32-H2, ESP32-C6: Fixed byte order in MAC address.
ESP32-H2, ESP32-C6: Fixed byte order in MAC address.C900: Too much data: Fixed occasional compressed upload failures.CH9102F USB-to-UART: Suggest installing new serial drivers if writing to RAM fails on MacOS.ESP32-C2, ESP32-H2, and ESP32-C6.ESP32-S3 USB-Serial/JTAG: Fix incorrect RTC WDT registers to avoid resets during flashing.
ESP32-S3 USB-Serial/JTAG: Fix incorrect RTC WDT registers to avoid resets during flashing.Added the option to specify ALL as a size argument in read_flash and erase_region to perform said operation until the end of the flash memory.
ALL as a size argument in read_flash and erase_region to perform said operation until the end of the flash memory. (https://github.com/espressif/esptool/issues/461)image_info: Display the WP pin state in human-readable form. (https://github.com/espressif/esptool/pull/874)image_info: Display chip type based on Chip ID, if available. (https://github.com/espressif/esptool/pull/874)ESP32-C6 and ESP32-H2: Added support for reading 64-bit MAC address.ECDSA_KEY: Added support for burning from PEM file.burn_key and burn_key_digest: Hide sensitive info during burning by default.esp instance. (https://github.com/espressif/esptool/issues/873)ESP32-H2: Added RF Calibration Information.01060000: Operation or feature not supported error by setting flash parameters even with --flash_size keep.USB-Serial/JTAG: Autofeed super watchdog (SWD) to avoid resets during flashing.USB-Serial/JTAG: Fixed failing reset sequence on COM ports >= 10 due to PID detection error. (https://github.com/espressif/esptool/pull/880)ESP32-C6: Fixed get_pkg_version and get_{major,minor}_chip_version. (https://github.com/espressif/esptool/pull/867)image_info: Removed check that reserved bytes in the image header are zero, which would break chip type autodetection.bootdesc to the top of the RAM segment.cryptography>=40.reedsolo package versions.ESP32-C2: Fixed BLOCK_KEY0 summary view when SB + FE keys are burnt.ESP32-C3, ESP32-C6, ESP32-S3, ESP32-H2: Prevent burning XTS_AES and ECDSA keys into BLOCK9 (BLOCK_KEY5).ARM and ARM64.Thanks to @paravoid, @xingrz, @hasheddan, @fuzeman, @Massimiliano-solutiontech, and others for contributing to this release!
Nothing published for this version
ESP32-S3: Temporarily disabled increasing CPU frequency in the stub flasher (https://github.com/espressif/esptool/issues/832, https://github.com/espre
ESP32-S3: Temporarily disabled increasing CPU frequency in the stub flasher (https://github.com/espressif/esptool/issues/832, https://github.com/espressif/esptool/issues/848, https://github.com/espressif/esptool/issues/842).esp_rfc2217_server: Updated reset sequences.esp_rfc2217_server: Registered as a script (https://github.com/espressif/esptool/issues/846).pyinstaller: Fixed glibc dependency on gnu/linux (https://github.com/espressif/esptool/issues/843).host_test marker for the test suite to allow running tests without real hardware (https://github.com/espressif/esptool/issues/838).Thanks to @DCSBL and others for contributing to this release!
--erase-all option (radim.karnis - d0af65f)<div align="center"> <small> <b> <a href="https://www.github.com/espressif/cz-plugin-espressif">Commitizen Espressif plugin</a> </b> <br> <sup><a href="https://www.espressif.com">Espressif Systems CO LTD. (2025)</a><sup> </small> </div>
This release aims to fix most of the major issues with resetting into the download mode, flashing in the USB-Serial/JTAG mode, and working with large-
This release aims to fix most of the major issues with resetting into the download mode, flashing in the USB-Serial/JTAG mode, and working with large-capacity flash memory chips.
Configuration file: Added the option to configure internal variables (such as timeouts and delays) and to implement a custom reset sequence (see the related documentation).Bootloader reset: Added a new reset strategy to make resetting into the download mode more reliable on MacOS and Linux systems (https://github.com/espressif/esptool/issues/712).ESP32-S3: Added support for >32MB octal flash chips (https://github.com/espressif/esptool/issues/795, https://github.com/espressif/esptool/issues/745).ESP32-H2: Added full esptool and flasher stub support.ESP32-C6: Added full flasher stub support.flash_id: Print the flash memory chip type (quad vs. octal) if available (https://github.com/espressif/esptool/issues/730).elf2image: Added --pad-to-size <size> option to specify a size to which the generated binary image must be aligned.write_flash: Added a security check to prevent bricking the device when flash encryption is active.USB-Serial/JTAG: Fixed randomly failing transfers when writing/reading large binaries.ESP32-S3: Fixed crashing stub flasher when using in USB-Serial/JTAG mode (https://github.com/espressif/esptool/issues/808)ESP32: Recalculate the crystal clock to compensate for the chips baud rate setting as a workaround to avoid ESP32 CK_8M frequency drift.ESP32-S3: Fixed v0.0 chip being detected as vX.8.StopIteration: Fixed several possible errors when stub flasher is being uploaded and added better error messages for other cases (https://github.com/espressif/esptool/issues/824).write_flash: Fixed the --erase-all option corrupting flash (https://github.com/espressif/esptool/issues/805).write_flash: Fixed security checks when min_rev and max_rev_full are specified in the image.bitstring>=4 package.reedsolo when using Python 3.10 and Cython (https://github.com/espressif/esptool/issues/711).espefuse fails (https://github.com/espressif/esptool/issues/803).Thanks to @256dpi, @StevenMacias, @fennecbutt, and others for contributing to this release!
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
bitstring: Added a workaround for breaking changes of bitstring==4
flasher_stub: Increased read/write speeds over USB-JTAG/Serial or USB-OTG modes, making some operations nearly twice as fast.espsecure.py: Improved AES-XTS encryption speed. (https://github.com/espressif/esptool/pull/783)ESP32-S3 v0.0: Fixed chip revision detection.bitstring: Added a workaround for breaking changes of bitstring==4get_default_connected_device: Fixed to close unused serial ports.flash_freq: Fall back to a chip-specific default flash frequency when no flash_freq arg is specified.ESP32-C6: Fixed chip type detection and SPI flash communication.Thanks to @Emill and others for contributing to this release!
image_info: Added image type autodetection, specifying --chip is no longer needed
image_info: Added image type autodetection, specifying --chip is no longer neededimage_info: Added the ability to display application info if a valid app image is detectedwrite_flash: Added the ability to recover from serial errors when flashing, effectively making data transfers more robust (https://github.com/espressif/esptool/issues/182)write_flash: Added checks to prevent flashing if an incompatible chip type or chip revision is used, --force can be used to override this restrictionvX.Yespefuse.py: Fixed burning of ENABLE_SECURITY_DOWNLOAD eFuseExperimental support for ESP32-C6 has been added (--no-stub only). Burning eFuses is not recommended. This SoC is not generally available, so it is not fully supported in this release. Official support will be added in a later release.
Thanks to @johnboiles, @Jason2866, @Robsteranium, and others for contributing to this release!
Your coding agent can read these notes before it upgrades. Set up the MCP server →