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.
- Added support for
tar.xz
tarball dependencies (pull #4974) - Ensured that dependencies of private libraries are no longer unnecessarily re-installed, optimizing dependency management and reducing redundant operations (issue #4987)
- Resolved an issue where the
compiledb
target failed to properly escape compiler executable paths containing spaces (issue #4998) - Resolved an issue with incorrect path resolution when linking static libraries via the build_flags option (issue #5004)
- Resolved an issue where the
--project-dir
flag did not function correctly with the pio check and pio debug commands (issue #5029) - Resolved an issue where the LDF occasionally excluded bundled platform libraries from the dependency graph (pull #4941)
- Added support for Python 3.13
- Introduced the PLATFORMIO_SYSTEM_TYPE environment variable, enabling manual override of the detected system type for greater flexibility and control in custom build environments
- Enhanced internet connection checks by falling back to HTTPS protocol when HTTP (port 80) fails (issue #4980)
- Upgraded the build engine to the latest version of SCons (4.8.1) to improve build performance, reliability, and compatibility with other tools and systems (release notes)
- Upgraded the Doctest testing framework to version 2.4.11, the GoogleTest to version 1.15.2, and the Unity to version 2.6.0, incorporating the latest features and improvements for enhanced testing capabilities
- Corrected an issue where the incorrect public class was imported for the
DoctestTestRunner
(issue #4949)
- Resolved an issue where the LDF couldn't locate a library dependency declared via version control system repository (issue #4885)
- Resolved an issue related to the inaccurate detection of the Clang compiler (pull #4897)
- Introduced the
--json-output
option to the pio test command, enabling users to generate test results in the JSON format - Upgraded the build engine to the latest version of SCons (4.7.0) to improve build performance, reliability, and compatibility with other tools and systems (release notes)
- Broadened version support for the
pyelftools
dependency, enabling compatibility with lower versions and facilitating integration with a wider range of third-party tools (issue #4834) - Addressed an issue where passing a relative path (
--project-dir
) to the pio project init command resulted in an error (issue #4847) - Enhanced Static Code Analysis to accommodate scenarios where custom
src_dir
orinclude_dir
are located outside the project folder (pull #4874) - Corrected the validation of
symlink://
package specifications , resolving an issue that caused the package manager to repeatedly reinstall dependencies (pull #4870) - Resolved an issue related to the relative package path in the pio pkg publish command
- Resolved an issue where the LDF selected an incorrect library version (issue #4860)
- Resolved an issue with the
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)
- Added support for Python 3.12
- Introduced the capability to launch the debug server in a separate process (issue #4722)
- Introduced a warning during the verification of MCU maximum RAM usage, signaling when the allocated RAM surpasses 100% (issue #4791)
- Drastically enhanced the speed of project building when operating in verbose mode (issue #4783)
- Upgraded the build engine to the latest version of SCons (4.6.0) to improve build performance, reliability, and compatibility with other tools and systems (release notes)
- Enhanced the handling of built-in variables in "platformio.ini" configuration file during Interpolation of Values (issue #4695)
- Enhanced PIP dependency declarations for improved reliability and extended support to include Python 3.6 (issue #4819)
- Implemented automatic installation of missing dependencies when utilizing a SOCKS proxy (issue #4822)
- Implemented a fail-safe mechanism to terminate a debugging session if an unknown CLI option is passed (issue #4699)
- Rectified an issue where
${platformio.name}
erroneously representedNone
as the default project name (issue #4717) - Resolved an issue where the
COMPILATIONDB_INCLUDE_TOOLCHAIN
setting was not correctly applying to private libraries (issue #4762) - Resolved an issue where
get_systype()
inaccurately returned the architecture when executed within a Docker container on a 64-bit kernel with a 32-bit userspace (issue #4777) - Resolved an issue with incorrect handling of the
check_src_filters
option when used in multiple environments (issue #4788) - Resolved an issue where running pio project metadata resulted in duplicated "include" entries (issue #4723)
- Resolved an issue where native debugging failed on the host machine (issue #4745)
- Resolved an issue where custom debug configurations were being inadvertently overwritten in VSCode's
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 "objdump" binary when GDB is not part of the toolchain package
- Resolved a regression issue that resulted in the malfunction of the Memory Inspection feature within PIO Home
- Resolved an issue that caused generated projects for PlatformIO IDE for VSCode to break when the
-iprefix
compiler flag was used - Resolved an issue encountered while utilizing the pio pkg exec command on the Windows platform to execute Python scripts from a package
- Implemented a crucial improvement to the pio run command, guaranteeing that the
monitor
target is not executed if any of the preceding targets, such asupload
, encounter failures - Cppcheck v2.11 with new checks, CLI commands and various analysis improvements
- Resolved a critical issue that arose on macOS ARM platforms due to the Python "requests" module, leading to a "ModuleNotFoundError: No module named 'chardet'" (issue #4702)
- Rectified a regression bug that occurred when the
-include
flag was passed via the build_flags option as a relative path and subsequently expanded (issue #4683) - Resolved an issue that resulted in unresolved absolute toolchain paths when generating the Compilation database "compile_commands.json" (issue #4684)
- Added a new
--lint
option to the pio project config command, enabling users to efficiently perform linting on the "platformio.ini" configuration file - Enhanced the parsing of the "platformio.ini" configuration file to provide comprehensive diagnostic information
- Expanded the functionality of the library.json manifest by allowing the use of the underscore symbol in the keywords field
- Optimized project integration templates to address the issue of long paths on Windows (issue #4652)
- Refactored Unit Testing engine to resolve compiler warnings with "-Wpedantic" option (pull #4671)
- Eliminated erroneous warning regarding the use of obsolete PlatformIO Core when downgrading to the stable version (issue #4664)
- Updated the pio project metadata command to return C/C++ flags as parsed Unix shell arguments when dumping project build metadata
- Resolved a critical issue related to the usage of the
-include
flag within the build_flags option, specifically when employing dynamic variables (issue #4682) - Removed PlatformIO IDE for Atom from the documentation as Atom has been deprecated
- Introduced a new
--sample-code
option to the pio project init command, which allows users to include sample code in the newly created project - Added validation for project working environment names to ensure that they only contain lowercase letters
a-z
, numbers0-9
, and special characters_
(underscore) and-
(hyphen) - Added the ability to show a detailed library dependency tree only in verbose mode, which can help you understand the relationship between libraries and troubleshoot issues more effectively (issue #4517)
- Added the ability to run only the device monitor when using the pio run -t monitor command, saving you time and resources by skipping the build process
- Implemented a new feature to store device monitor logs in the project's
logs
folder, making it easier to access and review device monitor logs for your projects (issue #4596) - Improved support for projects located on Windows network drives, including Network Shared Folder, Dropbox, OneDrive, Google Drive, and other similar services (issue #3417)
- Improved source file filtering functionality for the Static Code Analysis feature, making it easier to analyze only the code you need to
- Upgraded the build engine to the latest version of SCons (4.5.2) to improve build performance, reliability, and compatibility with other tools and systems (release notes)
- Implemented a fix for shell injection vulnerabilities when converting INO files to CPP, ensuring your code is safe and secure (issue #4532)
- Restored the project generator for the NetBeans IDE, providing you with more flexibility and options for your development workflow
- Resolved installation issues with PIO Remote on Raspberry Pi and other small form-factor PCs (issue #4425, issue #4493, issue #4607)
- Resolved an issue where the build_cache_dir setting was not being recognized consistently across multiple environments (issue #4574)
- Resolved an issue where organization details could not be updated using the pio org update command
- Resolved an issue where the incorrect debugging environment was generated for VSCode in "Auto" mode (issue #4597)
- Resolved an issue where native tests would fail if a custom program name was specified (issue #4546)
- Resolved an issue where the PlatformIO Debugging solution was not escaping the tool installation process into MI2 correctly (issue #4565)
- Resolved an issue where multiple targets were not executed sequentially (issue #4604)
- Resolved an issue where upgrading PlatformIO Core fails on Windows with Python 3.11 (issue #4540)
- Added support for Python 3.11
- Added a new name configuration option to customize a project name (pull #4498)
- Made assets (templates,
99-platformio-udev.rules
) part of Python's module (issue #4458) - Updated Clang-Tidy check tool to v15.0.5 with new diagnostics and bugfixes
- Removed dependency on the "zeroconf" package and install it only when a user lists mDNS devices (issue with zeroconf's LGPL license)
- Show the real error message instead of "Can not remove temporary directory" when "platformio.ini" configuration file is broken (issue #4480)
- Fixed an issue with an incorrect test summary when a testcase name includes a colon (issue #4508)
- Fixed an issue when extends did not override options in the right order (issue #4462)
- Fixed an issue when pio pkg list and pio pkg uninstall commands fail if there are circular dependencies in the library.json manifests (issue #4475)
- Added a new enable_proxy_strict_ssl setting to disable the proxy server certificate verification (issue #4432)
- Documented PlatformIO Core Proxy Configuration
- Speeded up device port finder by avoiding loading board HWIDs from development platforms
- Improved caching of build metadata in debug mode
- Fixed an issue when pio pkg install --storage-dir command requires PlatformIO project (issue #4410)
- Added support for accepting the original FileNode environment in a "callback" function when using Build Middlewares (pull #4380)
- Improved device port finder when using dual channel UART converter (issue #4367)
- Improved project dependency resolving when using the pio project init --ide command
- Upgraded build engine to the SCons 4.4.0 (release notes)
- Keep custom "unwantedRecommendations" when generating projects for VSCode (issue #4383)
- Do not resolve project dependencies for the
cleanall
target (issue #4344) - Warn about calling "env.BuildSources" in a POST-type script (issue #4385)
- Fixed an issue when escaping macros/defines for IDE integration (issue #4360)
- Fixed an issue when the "cleanall" target removes dependencies from all working environments (issue #4386)
- 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 - Improved detection of Windows architecture (issue #4353)
- Warn about unknown device monitor filters (issue #4362)
- Fixed a regression bug when libArchive option declared in the library.json manifest was ignored (issue #4351)
- Fixed an issue when the pio pkg publish command didn't work with Python 3.6 (issue #4352)
- Added new
monitor_encoding
project configuration option to configure Device Monitor (issue #4350) - Allowed specifying project environments for pio ci command (issue #4347)
- Show "TimeoutError" only in the verbose mode when can not find a serial port
- Fixed an issue when a serial port was not automatically detected if the board has predefined HWIDs
- Fixed an issue with endless scanning of project dependencies (issue #4349)
- Fixed an issue with LDF when incompatible libraries were used for the working project environment with the missed framework (pull #4346)
- Device Manager
- Automatically reconnect device monitor if a connection fails
- Added new pio device monitor --no-reconnect option to disable automatic reconnection
- Handle device monitor disconnects more gracefully (issue #3939)
- Improved a serial port finder for Black Magic Probe (issue #4023)
- Improved a serial port finder for a board with predefined HWIDs
- Replaced
monitor_flags
with independent project configuration options: monitor_parity, monitor_eol, monitor_raw, monitor_echo - Fixed an issue when the monitor filters were not applied in their order (issue #4320)
- Unit Testing
- Updated "Getting Started" documentation for GoogleTest testing and mocking framework
- Export Unit Testing flags only to the project build environment (
projenv
, files in "src" folder) - Merged the "building" stage with "uploading" for the embedded target (issue #4307)
- Do not resolve dependencies from the project "src" folder when the test_build_src option is not enabled
- Do not immediately terminate a testing program when results are received
- Fixed an issue when a custom pio test --project-config was not handled properly (issue #4299)
- Fixed an issue when testing results were wrong in the verbose mode (issue #4336)
- Build System
- Significantly improved support for Pre & Post Actions
- Allowed to declare actions in the PRE-type scripts even if the target is not ready yet
- Allowed library maintainers to use Pre & Post Actions in the library extraScript
- Documented Stringification – converting a macro argument into a string constant (issue #4310)
- Added new pio run --monitor-port option to specify custom device monitor port to the
monitor
target (issue #4337) - Added
env.StringifyMacro(value)
helper function for the Advanced Scripting - Allowed to
Import("projenv")
in a library extra script (issue #4305) - Fixed an issue when the build_unflags operation ignores a flag value (issue #4309)
- Fixed an issue when the build_unflags option was not applied to the
ASPPFLAGS
scope - Fixed an issue on Windows OS when flags were wrapped to the temporary file while generating the Compilation database "compile_commands.json"
- Fixed an issue with the LDF when recursively scanning dependencies in the
chain
mode - Fixed a "PermissionError" on Windows when running "clean" or "cleanall" targets (issue #4331)
- Significantly improved support for Pre & Post Actions
- Package Management
- Fixed an issue when library dependencies were installed for the incompatible project environment (issue #4338)
- Miscellaneous
- Warn about incompatible Bash version for the Shell Completion (issue #4326)
- Control Unit Testing verbosity with a new multilevel pio test -v command option (issue #4276)
- Follow symbolic links during searching for the unit test suites (issue #4288)
- Show a warning when testing an empty project without a test suite (issue #4278)
- Improved support for Asking for input (prompts)
- Fixed an issue when the build_src_flags option was applied outside the project scope (issue #4277)
- Fixed an issue with debugging assembly files without preprocessor (".s")
- Improved support for the renamed configuration options (issue #4270)
- Fixed an issue when calling the built-in pio device monitor filters
- Fixed an issue when using Interpolation of Values and merging str+int options (issue #4271)
Please check the Migration guide from 5.x to 6.0.
- Package Management
- New unified Package Management CLI (
pio pkg
):- pio pkg exec - run command from package tool (issue #4163)
- pio pkg install - install the project dependencies or custom packages
- pio pkg list - list installed packages
- pio pkg outdated - check for project outdated packages
- pio pkg search - search for packages
- pio pkg show - show package information
- pio pkg uninstall - uninstall the project dependencies or custom packages
- pio pkg update - update the project dependencies or custom packages
- Package Manifest
- Added support for "scripts" (issue #485)
- Added support for multi-licensed packages using SPDX Expressions (issue #4037)
- Added support for "dependencies" declared in a "tool" 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)
- New unified Package Management CLI (
- Unit Testing
- Refactored from scratch Unit Testing solution and its documentation
- New: Test Hierarchy (issue #4135)
- New: Doctest testing framework (issue #4240)
- New: GoogleTest testing and mocking framework (issue #3572)
- New: Semihosting (issue #3516)
- New: Hardware Simulators for Unit Testing (QEMU, Renode, SimAVR, and custom solutions)
- New:
test
build configuration - Added support for a custom testing framework
- Added support for a custom testing command
- Added support for a custom Unity library (issue #3980)
- Added support for the
socket://
andrfc2217://
protocols using test_port option (issue #4229) - List available project tests with a new pio test --list-tests option
- Pass extra arguments to the testing program with a new pio test --program-arg option (issue #3132)
- Generate reports in JUnit and JSON formats using the pio test command (issue #2891)
- Provide more information when the native program crashed on a host (errored with a non-zero return code) (issue #3429)
- Improved automatic detection of a testing serial port (issue #4076)
- Fixed an issue when command line parameters (
--ignore
,--filter
) do not override values defined in the "platformio.ini" configuration file (issue #3845) - Renamed the "test_build_project_src" project configuration option to the test_build_src
- Removed the "test_transport" option in favor of the Custom "unity_config.h"
- Static Code Analysis
- Updated analysis tools:
- Cppcheck v2.7 with various checker improvements and fixed false positives
- PVS-Studio v7.18 with improved and updated semantic analysis system
- 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)
- Updated analysis tools:
- Build System
- Show project dependency licenses when building in the verbose mode
- Fixed an issue when LDF ignores the project lib_deps while resolving library dependencies (issue #3598)
- Fixed an issue with calling an extra script located outside a project (issue #4220)
- Fixed an issue when GCC preprocessor was applied to the ".s" assembly files on case-sensitive OS such as Window OS (issue #3917)
- Fixed an issue when LDF ignores build_src_flags in the "deep+" mode (issue #4253)
- Integration
- Added a new build variable (
COMPILATIONDB_INCLUDE_TOOLCHAIN
) to include toolchain paths in the compilation database (issue #3735) - Changed a default path for compilation database compile_commands.json to the project root
- Enhanced integration for Qt Creator (issue #3046)
- Added a new build variable (
- Project Configuration
- Extended Interpolation of Values with
${this}
pattern (issue #3953) - Embed environment name of the current section in the "platformio.ini" configuration file using
${this.__env__}
pattern - Renamed the "src_build_flags" project configuration option to the build_src_flags
- Renamed the "src_filter" project configuration option to the build_src_filter
- Extended Interpolation of Values with
- Miscellaneous
- Pass extra arguments to the native program with a new pio run --program-arg option (issue #4246)
- Improved PIO Remote setup on credit-card sized computers (Raspberry Pi, BeagleBon, etc) (issue #3865)
- Finally removed all tracks to the Python 2.7, the Python 3.6 is the minimum supported version.
See PlatformIO Core 5.0 history.
See PlatformIO Core 4.0 history.
See PlatformIO Core 3.0 history.
See PlatformIO Core 2.0 history.
See PlatformIO Core 1.0 history.