PlatformIO project helper
Build, explain, and lint platformio.ini files — resolve extends, [env] inheritance, and ${…} interpolation per environment, pick boards with real IDs, and get the pio and Arduino CLI commands for each environment.
Added · updated 28 October 2026
Works with
- ESP32 partition table editor IoT and embeddedUse in PlatformIO there sets board_build.partitions and flash size here and keeps the CSV to save
How to use it
Builder
Each chip at the top is one [env:NAME]. Choose a board: type to search, or click a row on
the Boards tab. Choosing a board fills in its platform (pinned to a version) and a framework
it supports. The board card shows the MCU, clock, flash, RAM, upload speed, and the Arduino CLI
FQBN. The form covers build flags, build_src_filter, lib_deps (with a list of popular
libraries), upload and monitor settings, monitor filters, ESP32 partition tables and
filesystems, f_cpu, debug probes, test and check tools, and extra scripts. Anything else goes
in Other options and is copied as written.
The platformio.ini on the right updates as you type. With Move shared options into [env]
on, options that are identical in every environment are written once into [env].
Each lib_deps line is explained below the list: ^1.2.3 allows compatible updates
(>=1.2.3 <2.0.0, but only patch updates for 0.x versions), ~1.2.3 allows patch updates
(<1.3.0), and a bare version is exact. For Git dependencies, pin a tag or commit with
#v1.2.3.
Explain and lint
Paste or open an existing platformio.ini. The tool parses it the way PlatformIO’s
configparser does: indented continuation lines, ; and # comments (inline ones need a
space before them), and keys that are not case-sensitive. For each environment it lists every
option’s final value, the section it came from, and any values it overrode. Lookup follows
PlatformIO’s walk_options: first the environment, then the sections it extends (the last
one listed is checked first), then [env]. ${section.option}, ${env.option},
${this.option}, ${this._env_} and ${sysenv.NAME} are expanded. Add environment
variables to see sysenv values; ${PROJECT_DIR}-style built-ins are left for build time.
The linter flags:
-
unknown options, and options in the wrong section
-
deprecated names (
src_build_flags,src_filter,env_default,monitor_flags,test_build_project_src), with a note onlib_extra_dirs -
missing platform or board, a board that belongs to another platform, or a framework the board does not support
-
unknown upload protocols, debug tools, and monitor filters
-
unpinned platforms and libraries
-
bad
build_src_filtersyntax -
broken
extends, missing references, and infinite recursion -
Serial.begin()speeds in the pasted code that don’t matchmonitor_speed(the default is 9600)
Load into builder flattens each environment into the builder.
Commands
For the chosen environment, this tab lists the pio commands to build, upload, upload the
filesystem, erase the flash, open menuconfig (ESP-IDF), use the serial monitor (with the env’s
speed and filters), test, check, debug, and manage packages. Where the board has an Arduino
core, it also lists the equivalent arduino-cli commands: the board-manager URL, core install,
library installs, compile, upload, and monitor.
Data and limits
ESP32 boards come from the platform-espressif32 6.10 board manifests (Arduino core 2.0.17).
The other boards (AVR, SAMD, Renesas, RP2040, STM32, Teensy, nRF52, ESP8266) are a curated set
of common IDs. pio boards knows more than 1,500. The official platform supports the
ESP32-C6 with ESP-IDF only; for Arduino 3.x use the community pioarduino platform. The
Pico W and Pico 2 need Max Gerhardt’s platform-raspberrypi with
board_build.core = earlephilhower. The option list follows PlatformIO Core 6. FQBNs for clone
boards can differ between core versions.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.