Skip to main content

idftool

PyPI CI Coverage status Docs

The ultimate CLI tool for interacting with Espressif devices. Built on esptool and aware of the ESP-IDF partition table: flash apps, switch OTA slots, and read or write partitions by name, without working out offsets by hand.

Documentation

Highlights

Device selection on connection

No more guessing which device is on which port. Run any command without -p and idftool lists the connected devices and asks which to use:

$ idftool monitor
? Select device (↑↓ move · ↵ select · p probe · r refresh · k kill · q quit)
 » /dev/cu.usbmodem11401         ESP USB-Serial/JTAG   7c:2c:67:92:79:c0
   /dev/cu.usbmodem2101          ESP USB-Serial/JTAG   b8:f8:62:49:ea:14
   /dev/cu.PL2303G-USBtoUART10   PL2303GT
   ✎ Enter a port manually…
   ↻ Refresh
   ✕ Quit

Pick one, and it tells you how to skip the question next time:

Device: /dev/cu.usbmodem11401 — ESP USB-Serial/JTAG · 7c:2c:67:92:79:c0
Re-run with: idftool -p /dev/cu.usbmodem11401 monitor
         or: idftool -m 7c:2c:67:92:79:c0 monitor
--- esp-idf-monitor 1.10.0 on /dev/cu.usbmodem11401 115200
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H

The -m form finds the board by its MAC address, wherever it's plugged in.

It works with idf.py too. Alias it, and every flash or monitor asks which device to use:

alias idf.py='idftool idf.py'

Firmware flashing

Flash to the default (factory) or next available (OTA) app partition, with no offsets to memorise. An OTA flash switches to the new slot the way a real update would, and only the sectors that changed are rewritten.

idftool factory build/app.bin
idftool ota build/app.bin
idftool set-boot ota_1

Partition-name addressing

Read, write, erase, or hex-dump a partition by name, or a slice of one:

idftool read nvs nvs.bin
idftool write storage build/spiffs.bin
idftool view 'log[-0x1000:]'

Safety checks

Everything is checked before flash is touched:

  • Data has to fit the partition it's written to.
  • Apps have to be valid images, built for the connected chip.
  • A file name given where a partition name belongs is caught before connecting, with the corrected command.

Bundles and images

Pack several partitions (and optionally the partition table) into one ZIP and flash them in one command, or dump and restore a whole flash image.

idftool dump-bundle backup.zip
idftool write-bundle release.zip

Filesystems and NVS

Build FAT, littlefs, or SPIFFS images from a directory and flash them, or pull them off the device. The filesystem type comes from the partition table, so you don't need to say which. Generate NVS from CSV, read a key into a shell, or change one on a live device.

idftool write-fs storage assets/
serial=$(idftool get-nvs nvs storage:serial)
idftool set-nvs nvs storage:serial=SN-0001

Contributing

See CONTRIBUTING.md.

Metadata

Release files for idftool 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for idftool 1.1.0
File Size Uploaded
idftool-1.1.0.tar.gz 455.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for idftool 1.1.0
File Interpreter ABI Platform
idftool-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 564.4 kB

Release files / idftool-1.1.0.tar.gz

Download URL idftool-1.1.0.tar.gz
Size 455.6 kB
Tags Source
SHA-256 checksum
How to use checksums
960f272807474fda03ad782ffa21ac5c7b469873a30f7cdf89abf740d1304bc5
BLAKE2b-256 checksum
How to use checksums
1116b24a8721cac4871de8e2279ad21413039449776f2cd5d899535d7a910df9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release files / idftool-1.1.0-py3-none-any.whl

Download URL idftool-1.1.0-py3-none-any.whl
Size 108.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2e0c19d98ffecb209fdac44c2ae78445442f1afa825d73fe5df67e95660d9f5f
BLAKE2b-256 checksum
How to use checksums
86ce56b747805bd5ace803e9e605bcaa39e997d7095f1c00f746f4ce830ae0c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release history Release notifications | RSS feed

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

This release

1.1.0 This release

2 release files

1.0.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page