Skip to content

Releases: PyO3/maturin

v1.13.1

09 Apr 15:13
v1.13.1
b27b7e1

Choose a tag to compare

What's Changed

  • fix: fall back to placeholder for abi3 when found interpreters are too old by @messense in #3126

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

09 Apr 14:05
v1.13.0
e8ebb2f

Choose a tag to compare

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-stubs command and --generate-stubs build 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_directory in 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 --strip conflicting with --include-debuginfo in 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 data symlink 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_context into 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 .def file for zig + windows-gnu to export PyInit symbol 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_lookup via CARGO_ENCODED_RUSTFLAGS on macOS by @messense in #3083
  • feat: add Profile-Guided Optimization (PGO) support by @messense in #3085
  • Respect metadata_directory in build_wheel per 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 WheelRepairer trait 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

Full Changelog: v1.12.5...v1.13.0

v1.12.6

01 Mar 14:54
v1.12.6
b61a28e

Choose a tag to compare

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

28 Feb 12:18
v1.12.5
917fa7f

Choose a tag to compare

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 --sdist wheel 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/maturin so this may cause breakage if you rely on it in standard cargo target/ location

New Contributors

Full Changelog: v1.12.4...v1.12.5

v1.12.4

21 Feb 10:24
v1.12.4
8495767

Choose a tag to compare

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

19 Feb 14:54
v1.12.3
ad9021c

Choose a tag to compare

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 develop on Windows ARM with x86 Python by @messense in #3011
  • fix: exclude external_packages bindings from uniffi wheels by @messense in #3013
  • Update cargo-zigbuild to 0.22.1 by @messense in #3015
  • feat: build wheels from sdist with --sdist flag by @messense in #3014
  • feat: add include-import-lib option 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

Full Changelog: v1.12.2...v1.12.3

v1.12.2

16 Feb 13:56
v1.12.2
adb2906

Choose a tag to compare

What's Changed

Full Changelog: v1.12.1...v1.12.2

v1.12.1

16 Feb 08:09
v1.12.1
e772489

Choose a tag to compare

What's Changed

  • Add --sbom-include CLI 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_DIR assets 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

14 Feb 08:49
v1.12.0
17a008d

Choose a tag to compare

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@v14 in 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 RECORD paths (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

Full Changelog: v1.11.5...v1.12.0

v1.11.5

09 Jan 11:06
5d50051

Choose a tag to compare

1.11.5

  • Allow combining --compatibility pypi with other --compatibility values (#2928)