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.3.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.3.0
File Size Uploaded
idftool-1.3.0.tar.gz 477.4 kB Details

Built distribution (wheel)

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

Total release size: 600.9 kB

Release files / idftool-1.3.0.tar.gz

Download URL idftool-1.3.0.tar.gz
Size 477.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e1b56b13516ec8c2b0cae2004092d24eb42f682256f6406a5d675c827a4863cb
BLAKE2b-256 checksum
How to use checksums
f393957bfd6e404ce4bb6ed09899292dd36368c876839cd2473179aa22070d8d
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 Oct 2, 2026.

Transparency log

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

Download URL idftool-1.3.0-py3-none-any.whl
Size 123.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4da79754475febfa0a55387e937f1df59945d7c4c56e9706365df52602331d65
BLAKE2b-256 checksum
How to use checksums
f2e0cc563beb1cc1c519f4a7fec6acb4c117426fd69569adfad0c87f4fa3baed
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 Oct 2, 2026.

Transparency log

Release history Release notifications | RSS feed

1.3.1

2 release files

This release

1.3.0 This release

2 release files

1.2.0

2 release files

1.1.0

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