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 ota build/app.bin
? 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 ota build/app.bin
         or: idftool -m 7c:2c:67:92:79:c0 ota build/app.bin
...
Writing 'my-app v1.2.0' to partition 'ota_1'...
Setting boot partition to 'ota_1'...

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

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.0.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.0.0
File Size Uploaded
idftool-1.0.0.tar.gz 447.7 kB Details

Built distribution (wheel)

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

Total release size: 553.3 kB

Release files / idftool-1.0.0.tar.gz

Download URL idftool-1.0.0.tar.gz
Size 447.7 kB
Tags Source
SHA-256 checksum
How to use checksums
81ad47baf979359aa0ecd25f483687b4c6072694863b0e837abe8d6933fe4879
BLAKE2b-256 checksum
How to use checksums
e72545468293d80daec3e0e075eec6ab3dca799dda6fbd05cb5f917a2d7c52ca
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 29, 2026.

Transparency log

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

Download URL idftool-1.0.0-py3-none-any.whl
Size 105.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e6c4a5800572636d8f8c5653c003a60e573fce7173bde894bd16b074f0d3940b
BLAKE2b-256 checksum
How to use checksums
64bc76b8ff5a4546aa67dce9430f0c8c2315d1f0c5fc309390ee8b9bbac05209
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 29, 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

1.1.0

2 release files

This release

1.0.0 This release

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