# platform-espressif32 is the PlatformIO definition of an ESP32 board

> platform-espressif32 is the development platform that tells PlatformIO how to build and flash Espressif ESP32 boards, and the repository is mostly data rather than application code, with a platform.json manifest, a platform.py script, a boards/ directory of board definitions, a builder/ directory of build scripts, a monitor/ directory and around twenty example projects covering both the Arduino and ESP-IDF frameworks.

**platformio/platform-espressif32** — Espressif 32: development platform for PlatformIO

- Repository: https://github.com/platformio/platform-espressif32
- Website: https://registry.platformio.org/platforms/platformio/espressif32
- Stars: 1,211 · Forks: 845
- Language: Python
- License: Apache-2.0
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/platformio-platform-espressif32

## A platform package is mostly configuration

The repository contents explain what a PlatformIO platform is, because there is very little conventional application code in it. There is a platform.json file, which is the manifest that describes the platform, and a platform.py script, which is the Python hook where the platform customises its own behaviour. There is a boards/ directory holding the board definitions, which is the list of parts PlatformIO will accept a board= line for, and a builder/ directory with the build scripts that say how a firmware image is assembled. There is a monitor/ directory, which is the serial monitor configuration. And there is an examples/ directory with the sample projects. The primary language of the repository is Python because of platform.py, but the substance is data. A platform is therefore the difference between a build system and a toolchain, since PlatformIO itself is the build system and the platform is the answer to what an ESP32 is and how to compile for it.

## What the chip brings with it

The README opens with a description of the silicon, and it is worth knowing what the integration is actually driving. ESP32 is a series of low-cost, low-power system on a chip microcontrollers with integrated Wi-Fi and Bluetooth, and the ESP32 integrates an antenna switch, RF balun, power amplifier, low-noise receive amplifier, filters, and power management modules. That list explains a good deal about the platform's shape. A radio with a switch and a balun means firmware that manages transmit power and antenna switching, and a platform package that carries the SDK configuration for it is doing real work rather than wrapping a compiler. It also explains the two frameworks in the examples, because the Arduino core and the ESP-IDF framework take different views of the same peripherals, and a project that needs the low-level control usually ends up in ESP-IDF while a quick sensor project stays in Arduino.

## Configuring a project, and the two ways to take the platform

The usage section is two steps, install PlatformIO and create a project with a platform option in platformio.ini. The stable form is a plain environment:

```ini
[env:stable]
; recommended to pin to a version, see https://github.com/platformio/platform-espressif32/releases
; platform = espressif32 @ ^6.0.1
platform = espressif32
board = ...
...
```

And the development form points the platform at the repository itself, which is how you work on the platform or test an unreleased change:

```ini
[env:development]
platform = https://github.com/platformio/platform-espressif32.git
board = ...
...
```

The difference between the two is not cosmetic. A project that says platform = espressif32 takes whatever the registry serves, and a project that says platform = espressif32 @ ^6.0.1 takes a bounded range, and the comment recommends the pin precisely because the unpinned form is a way to have a build change under you. The development form builds from a git URL, so the PlatformIO Core version has to support that source, and the resolution of the board definitions happens from the cloned tree.

## The example projects are the real specification

The examples/ directory is the most useful part of the repository, and it reads as a matrix of what the platform supports. The Arduino side has arduino-blink, arduino-ble5-advertising, arduino-wifiscan and arduino-usb-keyboard, and the ESP-IDF side is much larger, with espidf-hello-world, espidf-arduino-blink, espidf-arduino-wifiscan and espidf-ble-eddystone, which are the same features through the other framework. Then there are the platform capability examples, espidf-exceptions for the error handling model, espidf-http-request for networking, espidf-peripherals-uart and espidf-peripherals-usb for the two serial paths, espidf-sdkconfig-examples for the SDK configuration, espidf-security-secureboot for the secure boot chain, espidf-storage-sdcard and espidf-storage-spiffs for the two filesystems, and espidf-ulp-adc and espidf-ulp-pulse for the ultra low power coprocessor. The presence of secure boot and ULP examples is the signal that this platform is aimed at shipping products rather than only blinking a light.

## Boards, builder and monitor are the three directories that matter

Three directories carry the behaviour, and they are worth understanding separately. The boards/ directory is the catalogue, and it is the file a user consults when the board= line does not work, since the board name in platformio.ini has to match a definition there exactly, and the ESP32 family has a lot of near-identical variants with inconsistent names. The builder/ directory holds the scripts that turn a project into a firmware image, and it is where the framework selection, the partition table and the flash layout are decided. The monitor/ directory configures the serial monitor, with its baud rate and the filters it applies to the output, which matters for a chip whose console output arrives over the same UART you are using for other things. The platform.json manifest ties them together and declares the packages the platform needs, the toolchain and the frameworks it can install, which is why a platform package can pull in a whole SDK on first use.

## Where the platform stops, and who maintains it

The boundary is the chip family. Everything in this repository is about Espressif parts, and the board catalogue is the exact limit of what you can build with it, so a project that mixes an ESP32 with a different vendor's radio needs a different arrangement. The second boundary is the workflow. If your entire toolchain is the Arduino IDE, this platform adds an abstraction rather than removing one, and the Arduino examples show that the same goals are reachable without it. The third is the version question, because the platform ships its own toolchain versions and a new release can change the SDK underneath a project that did not pin itself. The maintenance picture is the strongest part of the repository, with v7.1.1 on 2026-09-05, v7.1.2 on 2026-09-07 and v7.1.3 on 2026-09-11, a last push on 2026-10-07, a default branch of develop, and an Apache 2.0 licence with a LICENSE file at the root. The examples workflow has its own badge, which is a hint that the examples are built continuously rather than left to rot.

## Conclusion

platform-espressif32 is the right thing to depend on if you build ESP32 firmware with PlatformIO, because it is where the board definitions and the toolchain configuration live, and because the example projects show the framework-specific settings that are otherwise buried in a build script. It is the wrong thing to reach for if you are using the Arduino IDE alone, where the chip support is already in the IDE, or if you are targeting a non-Espressif chip, since the board list is the boundary. Before you pin it, read the platform.json and check the boards/ directory for your exact part, because the naming of ESP32 variants is notoriously inconsistent, and decide whether to track the stable release or the development branch, since the two behave differently when a new toolchain version lands.

## FAQ

### How do I use the espressif32 platform in a PlatformIO project?

Install PlatformIO, create a project and set a platform option in platformio.ini, with platform = espressif32 and a board name. The repository also documents a development form that points the platform at the git URL, and the PlatformIO documentation is linked for the advanced usage, packages, boards and frameworks.

### Should I pin the platform version in platformio.ini?

The README recommends it, with the commented line platform = espressif32 @ ^6.0.1 next to the plain platform = espressif32, pointing at the releases page. Pinning keeps a build from changing under you when the registry serves a newer platform.

### What do the directories in the platform-espressif32 repository contain?

boards/ holds the board definitions, builder/ the build scripts, monitor/ the serial monitor configuration, platform.json the manifest, platform.py the Python hook, and examples/ the sample projects, which cover Arduino and ESP-IDF builds, Bluetooth LE, Wi-Fi, UART and USB peripherals, secure boot, SD card and SPIFFS storage and the ULP coprocessor.

### How current is the platform-espressif32 release?

The recent releases are v7.1.1 on 2026-09-05, v7.1.2 on 2026-09-07 and v7.1.3 on 2026-09-11, with the last push to the repository on 2026-10-07 and the default branch set to develop. The licence is Apache 2.0.

## Sources

- [License: Apache-2.0](https://github.com/platformio/platform-espressif32/blob/develop/LICENSE)
- [platformio/platform-espressif32 on GitHub](https://github.com/platformio/platform-espressif32)
- [Project website](https://registry.platformio.org/platforms/platformio/espressif32)
- [README](https://github.com/platformio/platform-espressif32/blob/develop/README.md)
- [Releases](https://github.com/platformio/platform-espressif32/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/platformio-platform-espressif32
