Releases: PyO3/maturin
v1.14.0
What's Changed
- Support parent-relative pyproject metadata in sdists by @Copilot in #3182
- Update PyPI platform tag validation by @messense in #3187
- maint: update setup emsdk action in generate-ci by @ManonMarchand in #3194
- fix: only shim bin wheels during auditwheel repair by @messense in #3197
- fix: avoid editable ELF truncation from stale hardlinks by @messense in #3199
- Fix Pyodide Emscripten platform tags by @messense in #3191
- build(deps): bump openssl from 0.10.79 to 0.10.80 by @dependabot[bot] in #3200
- Use pax instead of GNU headers for tar by @konstin in #3203
- feat: add default exclude pycache and *.pyc files by @GuYeying in #3202
- Documentation: fix the update_readme script by @ManonMarchand in #3186
- Fix python versions used in integration_pyo3_mixed_conda by @ngoldbaum in #3208
- Add support for finding free-threaded interpreters for --find-interpreters by @ngoldbaum in #3206
- build(deps): bump tar from 0.4.45 to 0.4.46 by @dependabot[bot] in #3209
- Stubs: also generate them for mixed PyO3 projects by @Tpt in #3211
- Don't depend on CFFI on PyPy by @ngoldbaum in #3213
- resolve_platform_tags: remove a redundant case by @Tpt in #3214
- GeneratorOutput::additional_files remove Option by @Tpt in #3215
- Support pyo3 abi3t features on Python3.15 and PyO3 0.29 by @ngoldbaum in #3113
New Contributors
Full Changelog: v1.13.3...v1.14.0
v1.13.3
v1.13.2
What's Changed
- fix: resolve test failures in distro packaging environments by @messense in #3129
- fix: redirect tracing output to stderr to avoid breaking PEP 517 by @chrisburr in #3131
- fix: skip interpreters with empty output for WSL2 cross-compile by @plusls in #3137
- fix: set explicit lib_name in pyo3 config for Android abi3 cross-compilation by @messense in #3130
- chore: add sysconfig/cpython-freebsd-15.0-amd64.txt by @fleetingbytes in #3140
- fix: two-phase bridge detection for conditional abi3 features by @messense in #3144
- Treat pyo3 0.29.0+ as having Windows import lib support (raw-dylib) by @messense in #3145
- Fix bin bindings with external shared library dependencies by @messense in #3147
- Upgrade MSRV to 1.89.0 by @messense in #3149
- build(deps): bump rustls-webpki from 0.103.12 to 0.103.13 by @dependabot[bot] in #3154
- Musllinux oci image by @Joshix-1 in #3152
- Remove Cirrus CI for FreeBSD by @messense in #3156
- perf: defer stage_artifact copy-back, finalize via rename when unpatched by @pratyush618 in #3155
- perf: eliminate stage_artifact double-copy, drop was_patched flag by @messense in #3157
- Fix release pipeline by @messense in #3158
- auditwheel: copy unpatched cargo output back before in-place patching by @messense in #3159
- develop: fail loudly when pip leaves a stale
~install behind (#1922) by @pratyush618 in #3161 - Provide a link for the
lib.namein Cargo.toml by @Xuanmizhen in #3167 - Fix duplicated version in changelog by @robsdedude in #3171
- Switch to actions/attest from attest-build-provenance by @scop in #3169
- Switch generation to actions/attest action, upgrade to v4 by @scop in #3170
- fix: avoid duplicate
--interpreterpanic in PEP 517 backend by @messense in #3175 - Add trusted publishing options to
generate-ciby @messense in #3176 - fix(sdist): handle symlinked
Cargo.tomlpointing outside project root by @messense in #3178 - fix: support pixi-managed virtualenvs in maturin develop by @eyupcanakman in #3165
- Support PEP 783
pyemscripten_*_wasm32wheel platform tag by @messense in #3163
New Contributors
- @chrisburr made their first contribution in #3131
- @plusls made their first contribution in #3137
- @Joshix-1 made their first contribution in #3152
- @pratyush618 made their first contribution in #3155
- @Xuanmizhen made their first contribution in #3167
- @scop made their first contribution in #3169
- @eyupcanakman made their first contribution in #3165
Full Changelog: v1.13.1...v1.13.2
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