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