Releases: PyO3/maturin
v1.13.1
What's Changed
See also v1.13.0 release highlight: https://github.com/PyO3/maturin/releases/tag/v1.13.0
Full Changelog: v1.13.0...v1.13.1
v1.13.0
maturin 1.13.0 is a feature-rich release focused on better wheel generation, improved packaging workflows, and smoother cross-platform builds. This release adds new capabilities for stub generation and PGO builds, significantly improves wheel repair support on macOS and Windows, and includes a broad set of fixes for ABI tagging, source distributions, and platform-specific build behavior.
Highlights
- Added support for Profile-Guided Optimization (PGO).
- Added PyO3 stub generation support, including a new
generate-stubscommand and--generate-stubsbuild option. - Re-implemented macOS wheel repair (delocate) and Windows wheel repair (delvewheel) in maturin, currently warn only when external shared libraries dependencies are required.
- Added support for large zip files.
- Added support for
[tool.maturin.generate-ci.github]configuration. - Improved PEP 517 compatibility by respecting
metadata_directoryin build_wheel.
This release also includes substantial internal refactoring across build orchestration, interpreter resolution, and command structure, plus dependency and CI updates that improve maintainability and reliability.
No major intentional breaking changes are expected, but users with custom CI or packaging setups may want to validate their workflows after upgrading.
What's Changed
- refactor: unified interpreter resolution pipeline by @messense in #3032
- Sync legacy_py.rs with upstream PyPI warehouse legacy.py by @messense in #3053
- refactor: decompose large modules into focused submodules by @messense in #3052
- Keep cargo build artifact at original path after staging by @messense in #3054
- Fix
--stripconflicting with--include-debuginfoin develop by @messense in #3057 - Fix abi3 wheel producing version-specific tags for CPython below minimum by @messense in #3061
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #3060
- generate-ci: use uv pip for pytest steps to fix local wheel preference by @messense in #3063
- Add
[tool.maturin.generate-ci.github]config support by @messense in #3066 - fix(sdist): handle parent workspaces and refactor sdist generation by @messense in #3055
- test: refactor integration suite and switch mixed fixtures to cffi by @messense in #3068
- Fix
datasymlink permission handling by @messense in #3069 - fix: correct bugs in audit.rs typo and module_writer by @messense in #3070
- perf: use lazy-initialized regexes instead of per-call compilation by @messense in #3071
- refactor: extract duplicated helpers and reduce code repetition by @messense in #3072
- refactor: split monster functions into focused methods by @messense in #3073
- refactor: improve type safety and API clarity by @messense in #3074
- refactor: cleanup anti-patterns by @messense in #3075
- refactor: decompose
build_contextinto focused submodules by @messense in #3076 - [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #3077
- fix: skip legacy manylinux aliases not in PyPI allow-list by @messense in #3078
- fix: auto-generate
.deffile for zig + windows-gnu to exportPyInitsymbol by @messense in #3079 - ci: upgrade run-on-arch-action to ubuntu24.04, add deadsnakes PPA for newer Python by @messense in #3081
- fix: pass
-undefined dynamic_lookupviaCARGO_ENCODED_RUSTFLAGSon macOS by @messense in #3083 - feat: add Profile-Guided Optimization (PGO) support by @messense in #3085
- Respect
metadata_directoryinbuild_wheelper PEP 517 by @messense in #3086 - [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #3088
- Fix cargo path with puccinialin for Windows by @konstin in #3093
- build(deps): bump tar from 0.4.44 to 0.4.45 by @dependabot[bot] in #3095
- build(deps): bump rustls-webpki from 0.103.9 to 0.103.10 by @dependabot[bot] in #3096
- ci: improve GitHub Actions generation logic by @messense in #3097
- refactor: split BuildOptions and BuildContext into logical sub-groups by @messense in #3098
- refactor: move subcommands to separate modules by @messense in #3099
- refactor: decouple build orchestration from BuildContext by @messense in #3100
- Upgrade pyo3 to 0.28 by @messense in #3101
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #3104
- PyO3: Adds --generate_stubs build options by @Tpt in #3105
- fix: prevent panic when no interpreters match abi3 minimum version by @messense in #3108
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #3109
- Refactor to store CPython ABI metadata in a struct combining two enums by @ngoldbaum in #3110
- refactor: introduce
WheelRepairertrait by @messense in #3112 - feat: re-implement delocate for repairing macOS wheels by @messense in #3114
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #3117
- PyO3: Adds generate-stubs command by @Tpt in #3115
- feat: re-implement delvewheel for repairing Windows wheels by @messense in #3116
- Add auditwheel Warn mode, default to Warn on macOS/Windows by @messense in #3121
- feat: Support large zip files by @EndPositive in #3118
- Release v1.13.0 by @messense in #3124
New Contributors
- @EndPositive made their first contribution in #3118
Full Changelog: v1.12.5...v1.13.0
v1.12.6
What's Changed
- Sync legacy_py.rs with upstream PyPI warehouse legacy.py (#3053)
- Keep cargo build artifact at original path after staging (#3054)
Full Changelog: v1.12.5...v1.12.6
v1.12.5
What's Changed
- feat: include debug info files (.pdb, .dSYM, .dwp) in wheels by @messense in #3024
- Fix wrong abi3 tag for conditional cargo features enabled pyo3 abi3 feature by @messense in #3029
- fix:
maturin build --sdistwheel name/layout for excluded workspace crates by @messense in #3031 - fix: preserve wheel output dir when building from unpacked sdist by @messense in #3036
- feat: add python-implementation condition to conditional features by @messense in #3038
- Update zip to 8.1 by @musicinmybrain in #3039
- Use the latest version of github actions by @Armavica in #3040
- Use renovate and pinned hashes for GitHub Actions by @konstin in #3043
- chore(deps): update taiki-e/install-action digest to 7410117 by @renovate[bot] in #3046
- Fix non-existent comment tag by @konstin in #3044
- chore(deps): update dtolnay/rust-toolchain digest to efa25f7 by @renovate[bot] in #3045
- chore(deps): update actions/attest-build-provenance action to v4 by @renovate[bot] in #3047
- Use mmap for faster warn_missing_py_init by @orlp in #2950, to be safe we now move the cargo built artifact to
target/maturinso this may cause breakage if you rely on it in standard cargotarget/location
New Contributors
- @Armavica made their first contribution in #3040
- @renovate[bot] made their first contribution in #3046
- @orlp made their first contribution in #2950
Full Changelog: v1.12.4...v1.12.5
v1.12.4
What's Changed
- Upgrade memmap2 version by @amy-kwan in #3021
- fix: platform tag detection for Android targets by @thunder-coding in #3023
- fix: only ignore maturin-generated native libraries on all platforms by @messense in #3025
- fix: ignore develop artifacts for all binding types during build by @messense in #3026
- feat: support conditional cargo features based on Python version by @messense in #3027
New Contributors
Full Changelog: v1.12.3...v1.12.4
v1.12.3
What's Changed
- docs(config): minor fixes by @mkniewallner in #3008
- ci: set crt-static for riscv64 and loongarch64 musl targets by @messense in #3009
- fix: support
maturin developon Windows ARM with x86 Python by @messense in #3011 - fix: exclude
external_packagesbindings from uniffi wheels by @messense in #3013 - Update cargo-zigbuild to 0.22.1 by @messense in #3015
- feat: build wheels from sdist with
--sdistflag by @messense in #3014 - feat: add
include-import-liboption to bundle Windows import libraries in wheels by @messense in #3017 - fix: auditwheel external lib check respects musllinux and reports symbol versions by @messense in #3019
New Contributors
- @mkniewallner made their first contribution in #3008
Full Changelog: v1.12.2...v1.12.3
v1.12.2
What's Changed
Full Changelog: v1.12.1...v1.12.2
v1.12.1
What's Changed
- Add
--sbom-includeCLI argument for additional SBOM files by @messense in #2999 - fix: resolve include patterns relative to python-source for sdist and wheel by @messense in #3000
- feat: support including
OUT_DIRassets in wheel builds by @messense in #3001 - add test case for uniffi with multiple crates by @davidhewitt in #2839
Full Changelog: v1.12.0...v1.12.1
v1.12.0
What's Changed
- Use pypi compatibility validation for own CI by @konstin in #2929
- Update toml crates for toml 1.1 support by @konstin in #2934
- Use a single location for MSRV by @konstin in #2936
- Fix editable install for binary projects with Python modules by @messense in #2938
- Release to crates.io only after the builds passed by @konstin in #2939
- Use
mymindstorm/setup-emsdk@v14in generated GitHub Actions workflow by @messense in #2941 - Use trusted publishing for crates.io by @konstin in #2943
- Filter linked_paths by KIND and linked_libs by @messense in #2949
- Update bytes to 1.11.1 by @messense in #2960
- Normalize wheel distribution names to match the PyPA spec by @artob in #2954
- Allow build loongarch64 and riscv64 for musllinux by @wojiushixiaobai in #2963
- Strip excluded cargo targets in sdist by @messense in #2964
- Normalize wheel
RECORDpaths (on Windows) by @texodus in #2965 - Bump MSRV to 1.88.0 by @messense in #2966
- Support MATURIN_STRIP env var and --strip true/false to override pyproject.toml by @messense in #2968
- fix: copy bin artifacts before auditwheel repair to avoid rerun failures by @messense in #2969
- fix: rewrite python-source in pyproject.toml when building sdist by @messense in #2972
- fix: resolve wheel include patterns relative to project root by @messense in #2973
- fix: always include workspace Cargo.toml in sdist by @messense in #2974
- refactor: simplify source_distribution.rs by @messense in #2976
- feat: support PEP 735 dependency groups in develop command by @messense in #2978
- Fix license file handling for workspace-level license files by @messense in #2970
- Support PEP 739 build-details.json when cross compiling by @messense in #2979
- Fix .libs directory name for namespace packages by @messense in #2981
- fix: exclude duplicate python source files from sdist for workspace members by @messense in #2982
- fix: remove default-members from workspace Cargo.toml in sdist by @messense in #2983
- fix: correctly filter workspace members in sdist by directory path by @messense in #2984
- feat: Add PEP 770 SBOM support by @messense in #2980
- Error when python-source is set but Python module is missing by @messense in #2986
- feat: add auditwheel SBOM for grafted shared libraries by @messense in #2985
- Fix sdist duplicate README error when readme is in both Cargo.toml and pyproject.toml by @messense in #2987
- fix: support python-source pointing outside Rust source directory by @messense in #2988
- Relax ziglang dependency version requirement by @messense in #2990
- Stop adding link-native-libraries flag by default in Emscripten platform in latest Rust by @ryanking13 in #2991
- fix: platform.system() on Android for Python 3.13+ by @thunder-coding in #2992
- fix: check external libs for glibc version when determining platform tag by @messense in #2993
- Update cargo-zigbuild to 0.22.0 by @messense in #2994
- sbom: filter to bindings crate only and upgrade to CycloneDX v1.5 by @messense in #2995
- Upgrade ureq to 3.2.0 and migrate to built-in multipart by @messense in #2997
New Contributors
- @artob made their first contribution in #2954
- @texodus made their first contribution in #2965
- @ryanking13 made their first contribution in #2991
- @thunder-coding made their first contribution in #2992
Full Changelog: v1.11.5...v1.12.0