NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3778 most downloaded on PyPI
Your Gateway to Embedded Software Development Excellence. Unlock the true potential of embedded software development with PlatformIO's collaborative ecosystem, embracing declarative principles, test-driven methodologies, and modern toolchains for unrivaled success.
Last release 29 days ago
05 Sep 2026
Release timing varies
gaps range from 3 weeks to 11 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
121 releases · first in 2015
Fixed a security vulnerability where ZIP archives containing relative path traversal entries (e.g., ../ ) could alter permissions or timestamps of fil…
-p, --port option to the pio run command, allowing users to set both upload_port and monitor_port simultaneously for a more streamlined workflow (pull #5429)-e or -f options (issue #5402)Serial.end() (issue #5359)-d, --project-dir option caused pio device monitor to fail with a "FileNotFoundError" (pull #5470)pipx- and uvx-managed environments by ensuring the required pip dependency is available when installing Python-based tool packages (issue #5305)-g2) were passed to the standalone assembler, causing fatal compilation errors on .s files (issue #5005)../) could alter permissions or timestamps of files outside the destination directory (pull #5499)termios exception when running pio device monitor with redirected or non-TTY stdin, replacing the traceback with a clear user error (pull #5503)-include build flags were not resolved to absolute paths in c_cpp_properties.json, causing IntelliSense errors (issue #5449)One column per quarter.
Upgraded the Doctest testing framework to version 2.4.12, the GoogleTest to version 1.17.0, and the Unity to version 2.6.1, incorporating the latest f
rfc2217://host:port) were incorrectly treated as wildcard patterns (issue #5225)postinstall scripts and handling both list and string command formats (pull #5366).pio/libdeps folder so that leftover libraries are properly removed when the lib_deps option is empty (issue #5110)Resolved a regression issue that prevented PIO Home from opening external links ( issue #5084 )
Resolved a regression issue that prevented |PIOHOME| from opening external links (issue #5084)
Introduced the PLATFORMIO_RUN_JOBS environment variable, allowing manual override of the number of parallel build jobs ( issue #5077 )
tar.xz tarball dependencies (pull #4974)compiledb target failed to properly escape compiler executable paths containing spaces (issue #4998)--project-dir flag did not function correctly with the pio check and pio debug commands (issue #5029)Introduced the PLATFORMIO_SYSTEM_TYPE environment variable, enabling manual override of the detected system type for greater flexibility and control i
DoctestTestRunner (issue #4949)Resolved an issue where the LDF couldn't locate a library dependency declared via version control system repository ( issue #4885 )
Introduced the --json-output option to the pio test command, enabling users to generate test results in the JSON format
--json-output option to the pio test command, enabling users to generate test results in the JSON formatpyelftools dependency, enabling compatibility with lower versions and facilitating integration with a wider range of third-party tools (issue #4834)--project-dir) to the pio project init command resulted in an error (issue #4847)src_dir or include_dir are located outside the project folder (pull #4874)symlink:// package specifications , resolving an issue that caused the package manager to repeatedly reinstall dependencies (pull #4870)hexlify filter in the device monitor command, ensuring proper representation of characters with Unicode code points higher than 127 (issue #4732)Expanded support for SCons variables declared in the legacy format ${SCONS_VARNAME} ( issue #4828 )
${SCONS_VARNAME} (issue #4828)Introduced the capability to launch the debug server in a separate process ( issue #4722 )
${platformio.name} erroneously represented None as the default project name (issue #4717)COMPILATIONDB_INCLUDE_TOOLCHAIN setting was not correctly applying to private libraries (issue #4762)get_systype() inaccurately returned the architecture when executed within a Docker container on a 64-bit kernel with a 32-bit userspace (issue #4777)check_src_filters option when used in multiple environments (issue #4788)launch.json (issue #4810)Resolved a possible issue that may cause generated projects for PlatformIO IDE for VSCode to fail to launch a debug session because of a missing "objd
Resolved an issue that caused generated projects for PlatformIO IDE for VSCode to break when the -iprefix compiler flag was used
-iprefix compiler flag was usedmonitor target is not executed if any of the preceding targets, such as upload, encounter failuresRectified a regression bug that occurred when the -include flag was passed via the build_flags option as a relative path and subsequently expanded (is
-include flag was passed via the build_flags option as a relative path and subsequently expanded (issue #4683)Removed PlatformIO IDE for Atom from the documentation as Atom has been deprecated
--lint option to the pio project config command, enabling users to efficiently perform linting on the "platformio.ini" configuration file-include flag within the build_flags option, specifically when employing dynamic variables (issue #4682)Implemented a fix for shell injection vulnerabilities when converting INO files to CPP, ensuring your code is safe and secure (issue #4532)
--sample-code option to the pio project init command, which allows users to include sample code in the newly created projecta-z, numbers 0-9, and special characters _ (underscore) and - (hyphen)logs folder, making it easier to access and review device monitor logs for your projects (issue #4596)Added a new name configuration option to customize a project name (pull #4498)
99-platformio-udev.rules) part of Python's module (issue #4458)Added a new enable_proxy_strict_ssl setting to disable the proxy server certificate verification (issue #4432)
Added support for accepting the original FileNode environment in a "callback" function when using Build Middlewares (pull #4380)
cleanall target (issue #4344)Fixed a regression bug when opening device monitor without any filters (issue #4363)
Export a PIO_UNIT_TESTING macro to the project source files and dependent libraries in the Unit Testing mode
PIO_UNIT_TESTING macro to the project source files and dependent libraries in the Unit Testing modeAdded new monitor_encoding project configuration option to configure Device Monitor (issue #4350)
monitor_encoding project configuration option to configure Device Monitor (issue #4350)Automatically reconnect device monitor if a connection fails
Device Manager
monitor_flags with independent project configuration options: monitor_parity, monitor_eol, monitor_raw, monitor_echoUnit Testing
projenv, files in "src" folder)Build System
monitor target (issue #4337)env.StringifyMacro(value) helper function for the Advanced ScriptingImport("projenv") in a library extra script (issue #4305)ASPPFLAGS scopechain modePackage Management
Miscellaneous
Control Unit Testing verbosity with a new multilevel pio test -v command option (issue #4276)
Improved support for the renamed configuration options (issue #4270)
A professional collaborative platform for declarative, safety-critical, and test-driven embedded development.
A professional collaborative platform for declarative, safety-critical, and test-driven embedded development.
Please check the Migration guide from 5.x to 6.0.
Package Management
New unified Package Management CLI (pio pkg):
Package Manifest
Added support for symbolic links allowing pointing the local source folder to the Package Manager (issue #3348)
Automatically install dependencies of the local (private) project libraries (issue #2910)
Improved detection of a package type from the tarball archive (issue #3828)
Ignore files according to the patterns declared in ".gitignore" when using the pio package pack command (issue #4188)
Dropped automatic updates of global libraries and development platforms (issue #4179)
Dropped support for the "pythonPackages" field in "platform.json" manifest in favor of Extra Python Dependencies
Fixed an issue when manually removed dependencies from the "platformio.ini" configuration file were not uninstalled from the storage (issue #3076)
Unit Testing
test build configurationsocket:// and rfc2217:// protocols using test_port option (issue #4229)--ignore, --filter) do not override values defined in the "platformio.ini" configuration file (issue #3845)Static Code Analysis
Updated analysis tools:
Added support for the custom Clang-Tidy configuration file (issue #4186)
Added ability to override a tool version using the platform_packages option (issue #3798)
Fixed an issue with improper handling of defects that don't specify a source file (issue #4237)
Build System
Integration
COMPILATIONDB_INCLUDE_TOOLCHAIN) to include toolchain paths in the compilation database (issue #3735)Project Configuration
${this} pattern (issue #3953)${this.__env__} patternMiscellaneous
Improved support for private packages in PlatformIO Registry
Added support for a new headers field in library.json (declare a list of header files that can be included in a project source files using #include <.
headers field in library.json (declare a list of header files that can be included in a project source files using #include <...> directive)*_dir option from a custom project configuration environment (issue #4110)Automatically synchronize active projects between IDE and PlatformIO Home
${platformio.***_dir}) in "platformio.ini" configuration file (issue #3934)${(SOURCE.get_abspath())}) when preprocessing interpolations (issue #3933)$PROJECT_DIR variable was not properly replaced in the debug_server option (issue #4086)Override debugging firmware loading mode using --load-mode option for pio debug command
--load-mode option for pio debug commandClean a build environment and installed library dependencies using a new cleanall target (issue #4062)
cleanall target (issue #4062)builder field in a build group of library.json manifest (issue #3957)--keep-build-dir option (issue #4011)Boosted PlatformIO Debugging performance thanks to migrating the codebase to the pure Python 3 Asynchronous I/O stack
PlatformIO Debugging
Package Management
Improved a package publishing process:
Added a new option --non-interactive to pio package publish command
Build System
PROGNAME contains dot symbols (issue #3906)Static Code Analysis
Updated analysis tools:
Miscellaneous
Fixed a "The command line is too long" issue with a linking process on Windows (issue #3827)
Boosted PlatformIO Home performance thanks to migrating the codebase to the pure Python 3 Asynchronous I/O stack
--session-id option to pio home command that helps to keep PlatformIO Home isolated from other instances and protect from 3rd party access (issue #3397)--dry-run option to show data that will be removed--core-packages option to remove unnecessary core packages--platform-packages option to remove unnecessary development platform packages (issue #923)update --dry-run mode (issue #3809)Show a warning message about deprecated support for Python 2 and Python 3.5
pio --version command.ccls configuration file for Emacs, Vim, and Sublime Text integrationsAdded an error selector for Sublime Text build runner (issue #3733)
Initialize a new project or update the existing passing working environment name and its options (issue #3686)
lib_deps (issue #3715)Added support for "owner" requirement when declaring dependencies using library.json
dependencies using library.jsonMigration guide from 4.x to 5.0
Integration with the new PlatformIO Trusted Registry
Enterprise-grade package storage with high availability (multi replicas)
Secure, fast, and reliable global content delivery network (CDN)
Universal support for all packages:
Built-in fine-grained access control (role-based, teams, organizations)
New CLI commands:
Integration with the new Account Management System
New Package Management System
Build System
Upgraded build engine to the SCons 4.0 - a next-generation software construction tool
New Custom Targets
Enable "cyclic reference" for GCC linker only for the embedded dev-platforms (issue #3570)
Automatically enable LDF dependency chain+ mode (evaluates C/C++ Preprocessor conditional syntax) for Arduino library when "library.property" has "depends" field (issue #3607)
Fixed an issue with improper processing of source files added via multiple Build Middlewares (issue #3531)
Fixed an issue with the clean target on Windows when project and build directories are located on different logical drives (issue #3542)
Project Management
**" (recursive) pattern for the different commands and configuration options (pio ci, src_filter, check_patterns, library.json > srcFilter). Python 3.5+ is required-e, --environment option to pio project init command that helps to update a PlatformIO project using the existing environmentUnit Testing
Static Code Analysis
Updated analysis tools:
Added Cppcheck package for ARM-based single-board computers (issue #3559)
Fixed an issue with PIO Check when a defect with a multiline error message is not reported in verbose mode (issue #3631)
Miscellaneous
Added PlatformIO CLI Shell Completion for Fish, Zsh, Bash, and PowerShell (issue #3435)
contrib-pysite package on a target machine when pre-built package is not compatible (issue #3482)Fixed "UnicodeDecodeError: 'utf-8' codec can't decode byte" when non-Latin chars are used in project path (issue #3481)
New Account Management System (preview)
send_on_enter device monitor filter is used (issue #3452)lib_extra_dirs option in SRC_LIST for CLion (issue #3460)Fixed a SyntaxError "'return' with argument inside generator" for PIO Unified Debugger when Python 2.7 is used
lib_archive = no was not honored in "platformio.ini"Initial support for an official PlatformIO for CLion IDE plugin:
Initial support for an official PlatformIO for CLion IDE plugin:
log2file filter (issue #670)time filter (issue #981)send_on_enter filter (issue #926)hexlify filterNew standalone (1-script) PlatformIO Core Installer
Initial support for Renode simulation framework (issue #3401)
Added support for Arm Mbed "module.json" dependencies field (issue #3400)
Improved support for Arduino "library.properties" depends field
Fixed an issue when quitting from PlatformIO IDE does not shutdown PIO Home server
Fixed an issue "the JSON object must be str, not 'bytes'" when PIO Home is used with Python 3.5 (issue #3396)
Fixed an issue when Python 2 does not keep encoding when converting ".ino" (issue #3393)
Fixed an issue when "libArchive": false in "library.json" does not work (issue #3403)
Fixed an issue when not all commands in compilation database "compile_commands.json" use absolute paths (pull #3415)
Fixed an issue when unknown transport is used for PIO Unit Testing engine (issue #3422)
Improved VSCode template with special forceInclude field for direct includes via -include flag (issue #3379)
forceInclude field for direct includes via -include flag (issue #3379)Project Configuration UI for "platformio.ini"
PIO Check – automated code analysis without hassle:
Initial support for Project Manager CLI:
platformio project config --json-output (issue #3335)platformio init command to platformio project initGenerate compilation database "compile_commands.json" (issue #2990)
Control debug flags and optimization level with a new debug_build_flags option
Install a dev-platform with ALL declared packages using a new --with-all-packages option for pio platform install command (issue #3345)
Added support for "pythonPackages" in platform.json manifest (PlatformIO Package Manager will install dependent Python packages from PyPi registry automatically when dev-platform is installed)
Handle project configuration (monitor, test, and upload options) for PIO Remote commands (issue #2591)
Added support for Arduino's library.properties depends field (issue #2781)
Autodetect monitor port for boards with specified HWIDs (issue #3349)
Updated SCons tool to 3.1.2
Updated Unity tool to 2.5.0
Made package ManifestSchema compatible with marshmallow >= 3 (issue #3296)
Warn about broken library manifest when scanning dependencies (issue #3268)
Do not overwrite custom items in VSCode's "extensions.json" (issue #3374)
Fixed an issue when env.BoardConfig() does not work for custom boards in extra scripts of libraries (issue #3264)
Fixed an issue with "start-group/end-group" linker flags on Native development platform (issue #3282)
Fixed default PIO Unified Debugger configuration for J-Link probe
Fixed an issue with LDF when header files not found if "libdeps_dir" is within a subdirectory of "lib_extra_dirs" (issue #3311)
Fixed an issue "Import of non-existent variable 'projenv''" when development platform does not call "env.BuildProgram()" (issue #3315)
Fixed an issue when invalid CLI command does not return non-zero exit code
Fixed an issue when Project Inspector crashes when flash use > 100% (issue #3368)
Fixed a "UnicodeDecodeError" when listing built-in libraries on macOS with Python 2.7 (issue #3370)
Fixed an issue with improperly handled compiler flags with space symbols in VSCode template (issue #3364)
Fixed an issue when no error is raised if referred parameter (interpolation) is missing in a project configuration file (issue #3279)
PIO Check – automated code analysis without hassle:
.ccls LSP file for Emacs cross references, hierarchies, completion and semantic highlighting--no-ansi flag for PIO Core to disable ANSI control characters--shutdown-timeout option to PIO Home Server--project-conf (issue #3034)$LDSCRIPT contains a space in pathsrc_build_flags were not respected (issue #3137)Added support for multi-environment PlatformIO project for CLion IDE (issue #2824)
.ccls LSP file for Vim cross references, hierarchies, completion and semantic highlighting (issue #2952)Fixed an issue with a broken LDF when checking for framework compatibility issue #2940
Print debug tool name for the active debugging session
Deprecated --only-check PlatformIO Core CLI option for "update" sub-commands, please use --dry-run instead
Migration Guide from 3.0 to 4.0.
PlatformIO Plus Goes Open Source
Project Configuration
.pio) for PlatformIO Build System, Library Manager, and other internal services (issue #1778)***_dir options declared in platformio section have higher priority than Environment variablesLibrary Management
.pio/libdeps folder for project dependencies instead of .piolibdeps--save flag (issue #1028)includeDir and srcDir fieldsBuild System
.pio/build folder for build artifacts instead of .pioenvsrelease and debug) with a new project configuration option build_type-c, --project-conf option for platformio run, platformio debug, or platformio test commands (issue #1913)-U in build_flags does not remove macro previously defined via -D flag (issue #2508)Infrastructure
Integration
CMakeListsUser.txt fileMiscellaneous
--only-check PlatformIO Core CLI option for "update" sub-commands, please use --dry-run insteadPIO Unified Debugger: improved debugging in debug_load_mode = modified and fixed an issue with useless project rebuilding
debug_load_mode = modified and fixed an issue with useless project rebuildingProject Generator: fixed a warning "Property !!! WARNING !!! is not allowed" for VSCode (issue #2243)
--keep-build-dir optionCPPPATH (issue #1914)Project Generator: added new targets for CLion IDE "BUILD_VERBOSE" and "MONITOR" (serial port monitor) (issue #359)
--keep-build-dir option is passed (issue #2109)$PROJECT_HASH template was not expanded for the other directory ***_dir options in "platformio.ini" (Project Configuration File) (issue #2170)Improved Project Generator for Desktop IDEs:
Ignore *.asm and *.ASM files when building Arduino-based library (compatibility with Arduino builder)
Improved IntelliSense for PlatformIO IDE for VSCode via passing extra compiler information for C/C++ Code Parser (resolves issues with spurious projec
CPPPATH (issue #1914)chain+ and deep+ modes (issue #1930)Generate an include and test directories with a README file when initializing a new project
lib_deps, build_flags, etc) in “platformio.ini” (Project Configuration File)$PROJECT_HASH template variable for build_dir. One of the use cases is setting a global storage for project artifacts using PLATFORMIO_BUILD_DIR system environment variable. For example, /tmp/pio-build/$PROJECT_HASH (Unix) or %TEMP%/pio-build/$PROJECT_HASH (Windows)debug target using platformio run command or targets option in platformio.ini. The last option allows avoiding project rebuilding between "Run/Debug" modes. (issue #1833)build_unflags for the cloned environment when building a static librarypio run -t monitor always uses the first monitor_port even with multiple environments (issue #1841).clang_complete and space is used in a path (issue #1873)Print human-readable memory usage information after a build and before uploading
UNIT_TEST macro for unit test components/librariesCheck package structure after unpacking and raise error when antivirus tool blocks PlatformIO package manager (issue #1462)
Lock interprocess requests to PlatformIO Package Manager for install/uninstall operations (issue #1594)
Fixed an issue with PIO Remote when upload process depends on the source code of a project framework
Fixed an issue when srcFilter field in library.json breaks a library build (issue #1735)
Improved removing of default build flags using build_unflags option (issue #1712)
LIBS, LIBPATH, and LINKFLAGS data from project dependent libraries to the global build environmentCPPPATH data of project dependent libraries to framework's build environment (issue #1665)PlatformIO Home - interact with PlatformIO ecosystem using modern and cross-platform GUI:
#ifdef UNIT_TEST guardbuild_unflags option when a macro contains value (e.g., -DNAME=VALUE)PlatformIO Home - interact with PlatformIO ecosystem using modern and cross-platform GUI:
id:X (e.g. pio lib search id:13)Your coding agent can read these notes before it upgrades. Set up the MCP server →