Bindings for ESP-IDF (Espressif's IoT Development Framework)
402
stars
535
commits
Rust
primary language
Sep 8, 2026
updated
cargo driven and automatically downloads & configures everything by default; no need to download the ESP IDF SDK manually, or set up a C toolchainYou might want to also check out the type safe Rust wrappers built on top of these raw bindings:
Note
esp-idf-sys's build script will download the esp-idf, its gcc toolchain, and build it. To show progress and build information about this process run cargo with the-vv(very verbose) flag, so that build script output is also displayed. This is especially useful since the initial build will take a while.
Please note that all esp-idf-* crates are a community effort, in that Espressif puts little to no paid developer time in these.
So while ESP-IDF itself is very popular and well tested, the esp-idf-* crates:
For a HAL which is officially supported by Espressif (as in - with paid developer time), please look at esp-hal. Keep in mind that esp-hal is no_std-only, does not use ESP-IDF and requires async programming.
Follow the Prerequisites section in the esp-idf-template crate.
Read the documentation here.
The examples could be built and flashed conveniently with cargo-espflash. To run e.g. std_basics on an e.g. ESP32-C3:
(Swap the Rust target and example name with the target corresponding for your ESP32 MCU and with the example you would like to build)
with cargo-espflash:
$ MCU=esp32c3 cargo espflash flash --target riscv32imc-esp-espidf --example std_basics --monitor
| MCU | "--target" |
|---|---|
| esp32c2 | riscv32imc-esp-espidf |
| esp32c3 | riscv32imc-esp-espidf |
| esp32c5 | riscv32imac-esp-espidf |
| esp32c6 | riscv32imac-esp-espidf |
| esp32c61 | riscv32imac-esp-espidf |
| esp32h2 | riscv32imac-esp-espidf |
| esp32p4 | riscv32imafc-esp-espidf |
| esp32 | xtensa-esp32-espidf |
| esp32s2 | xtensa-esp32s2-espidf |
| esp32s3 | xtensa-esp32s3-espidf |
Use the esp-idf-template project. Everything would be arranged and built for you automatically - no need to manually clone the ESP IDF repository.
For more information, check out:
ESP IDF can’t be compiled on filesystems without support for symbolic links (e.g. FAT)
projects that use a custom partitions.csv:
CONFIG_PARTITION_TABLE_CUSTOM=y, CONFIG_PARTITION_TABLE_[CUSTOM_]FILENAME in your sdkconfig.defaults. The build would not use your custom partitions - nor does it need to.espflash flash [...] --partition-table partitions.csvRust
87.0%
C
11.9%
CMake
1.1%
Bindings for ESP-IDF (Espressif's IoT Development Framework)
402
stars
535
commits
Rust
primary language
Sep 8, 2026
updated
cargo driven and automatically downloads & configures everything by default; no need to download the ESP IDF SDK manually, or set up a C toolchainYou might want to also check out the type safe Rust wrappers built on top of these raw bindings:
Note
esp-idf-sys's build script will download the esp-idf, its gcc toolchain, and build it. To show progress and build information about this process run cargo with the-vv(very verbose) flag, so that build script output is also displayed. This is especially useful since the initial build will take a while.
Please note that all esp-idf-* crates are a community effort, in that Espressif puts little to no paid developer time in these.
So while ESP-IDF itself is very popular and well tested, the esp-idf-* crates:
For a HAL which is officially supported by Espressif (as in - with paid developer time), please look at esp-hal. Keep in mind that esp-hal is no_std-only, does not use ESP-IDF and requires async programming.
Follow the Prerequisites section in the esp-idf-template crate.
Read the documentation here.
The examples could be built and flashed conveniently with cargo-espflash. To run e.g. std_basics on an e.g. ESP32-C3:
(Swap the Rust target and example name with the target corresponding for your ESP32 MCU and with the example you would like to build)
with cargo-espflash:
$ MCU=esp32c3 cargo espflash flash --target riscv32imc-esp-espidf --example std_basics --monitor
| MCU | "--target" |
|---|---|
| esp32c2 | riscv32imc-esp-espidf |
| esp32c3 | riscv32imc-esp-espidf |
| esp32c5 | riscv32imac-esp-espidf |
| esp32c6 | riscv32imac-esp-espidf |
| esp32c61 | riscv32imac-esp-espidf |
| esp32h2 | riscv32imac-esp-espidf |
| esp32p4 | riscv32imafc-esp-espidf |
| esp32 | xtensa-esp32-espidf |
| esp32s2 | xtensa-esp32s2-espidf |
| esp32s3 | xtensa-esp32s3-espidf |
Use the esp-idf-template project. Everything would be arranged and built for you automatically - no need to manually clone the ESP IDF repository.
For more information, check out:
ESP IDF can’t be compiled on filesystems without support for symbolic links (e.g. FAT)
projects that use a custom partitions.csv:
CONFIG_PARTITION_TABLE_CUSTOM=y, CONFIG_PARTITION_TABLE_[CUSTOM_]FILENAME in your sdkconfig.defaults. The build would not use your custom partitions - nor does it need to.espflash flash [...] --partition-table partitions.csvRust
87.0%
C
11.9%
CMake
1.1%