Pants is a fast, scalable, user-friendly build system for codebases of all sizes.
Pants is an open-source project that is not owned or controlled by any one company or organization, and does incur some expenses. These expenses are managed by Pants Build, a non-profit that was established for this purpose. This non-profit's only source of revenue is sponsorship by individuals and companies that use Pants.
We offer formal sponsorship tiers for companies, as well as individual sponsorships via GitHub.
Thank you to Klaviyo for their Platinum tier support through throughout this release.
Support for the deprecated Get()/MultiGet() in the plugin API has been removed.
The plugin API's Get() and MultiGet() constructs, deprecated in 2.30, are now unsupported. If your plugin still relies on them you must migrate before upgrading to this version.
The version of Python used by Pants itself has been updated to 3.14. To support this, the Pants Launcher Binary (also known as scie-pants) now has a minimum version of 0.13.0. To update to the latest launcher binary, either:
- Use the package manager you used to install Pants. For example, with Homebrew:
brew update && brew upgrade pantsbuild/tap/pants. - Use its built-in self-update functionality:
SCIE_BOOT=update pants.
Note: Pants uses its own separately-installed Python installation to run itself. This installation is managed by the Pants Launcher Binary. The Pants choice of Python 3.14 for its own code does not limit the versions of Python that you can use to test and build your own code.
For GitHub Actions users that use the pantsbuild/actions/init-pants action with setup-python-for-plugins=true, you will need to update your GHA workflows to use v11 or newer to get the correct version of Python.
For generate-lockfiles, typos in the name of a resolve now give "Did you mean?" style suggestions.
PublishFieldSet now has a check_skip_request hook to enable preemptive skips of packaging requests for targets where the publishing will be skipped (such as when a skip_push=True field exists).
The option [docker].push_on_package can be used to prevent Docker images from being pushed during packaging, i.e. when --output contains push=True or type=registry.
Running pants publish on a docker_image target with skip_push=True will no longer package the docker_image.
When pants publish is invoked, Pants will now skip packaging for helm_chart targets if either skip_push=True or the target has no registries.
pants tailor now supports custom glob patterns for detecting Python tests. This makes it easier to get started with
Pants when your test files (e.g., *_tests.py) don't match the default patterns.
The Python Build Standalone backend (pants.backend.python.providers.experimental.python_build_standalone) has release metadata current through PBS release 220260127.
When pants publish is invoked, Pants will now skip packaging for python_distribution targets if either skip_twine=True, the target has no registries, or if [twine].skip = true.
Pants will attempt to only preserve the mypy cache when mypy returns a probably-not-a-crash exit code. This is intended as a defensive guard against propagating crash induced inconsistencies back to the "named cache" and propagated to future runs.
The default version of mypy used by Pants has been updated to 1.19.1. This includes support for the new "Fixed‑Format" cache.
The runtime field of aws_python_lambda_layer or aws_python_lambda_function now has built-in complete platform configurations for x86-64 and arm64 Python 3.14. This provides stable support for Python 3.14 lambdas out of the box, allowing deleting manual complete_platforms configuration if any.
The grpc-python-plugin tool now uses an updated v1.73.1 plugin built from <https://github.com/nhurden/protoc-gen-grpc-python-prebuilt]. This also brings macos_arm64 support.
Fixed a bug in how dependencies are validated which prevented resolve-specific interpreter constraints from taking effect when [python].default_to_resolve_interpreter_constraints was enabled. Instead, code would fall back to the global interpreter constraints which is not correct when default_to_resolve_interpreter_constraints is in use.
For the full changelog, see the individual GitHub Releases for this series: https://github.com/pantsbuild/pants/releases