Releases: pypa/cibuildwheel
v3.3.0
- 🐛 Fix an incompatibility with Docker v29 (#2660)
- ✨ Adds
test-runtimeoption, to customise how tests on simulated/emulated environments are run (#2636) - ✨ Adds support for new
manylinux_2_35images on 32-bit ARMarmv7l, offering better C++20 compatibility (#2656) - ✨
build[uv]is now supported on Android (#2587) - ✨ You can now install extras (such as
uv) with a simple option on the GitHub Action (#2630) - ✨
{project}and{package}placeholders are now supported inrepair-wheel-command(#2589) - 🛠 The versions set with
dependency-versionsno longer constrain packages specified by yourbuild-system.requires. Previously, on platforms other than Linux, the constraints in this option would remain in the environment during the build. This has been tidied up make behaviour more consistent between platforms, and to prevent version conflicts. (#2583) - 🛠 Improve the handling of
test-commandon Android, enabling more options to be passed (#2590) - 📚 Docs improvements (#2618)
v3.2.1
v3.2.0
- ✨ Adds GraalPy v25 (Python 3.12) support (#2597)
- 🛠 Update to CPython 3.14.0rc3 (#2602)
- 🛠 Adds CPython 3.14.0 prerelease support for Android, and a number of improvements to Android builds (#2568, #2591)
- 🛠 Improvements to testing on Android, passing environment markers when installing the venv, and providing more debug output when build-verbosity is set (#2575)
⚠️ PyPy 3.10 was moved topypy-eolin theenableoption, as it is now end-of-life. (#2521)- 📚 Docs improvements (#2574, #2601, #2598)
v3.1.4
- ✨ Add a
--clean-cachecommand to clean up our cache (#2489) - 🛠 Update Python to 3.14rc2 and other patch version bumps (#2542, #2556)
- 🛠 Update Pyodide to 0.28.2 (#2562, #2558)
- 🐛 Fix resolution with
pyodide-buildwhendependency-versionsis set (#2548) - 🐛 Set
CMAKE_FIND_ROOT_PATH_MODE_PACKAGEtoBOTHon Android (#2547) - 🐛 Add
patchelfdependency for platforms that can build Android wheels (#2552) - 🐛 Ignore empty values for
CIBW_ARCHSlike most other environment variables (#2541) - 💼 The
colorandsuggest_on_errorargparse options are now default in 3.14rc1+ (#2554) - 💼 Use the virtualenv release URL instead of blob URL (should be more robust) (#2555)
- 🧪 For iOS, lowering to macos-14 is needed for now due to issues with GitHub's runner images (#2557)
- 🧪 Split out platforms iOS and Android in our tests (#2519)
- 🧪 Fix and enable doctests (#2546)
- 📚 Improve our docs on free-threading (#2549)
v3.1.3
v3.1.2
⚠️ Add an error ifCIBW_FREE_THREADING_SUPPORTis set; you are likely missing 3.13t wheels, please use theenable/CIBW_ENABLE(#2520)- 🛠
riscv64now enabled if you target that architecture, it's now supported on PyPI (#2509) - 🛠 Add warning when using
cpython-experimental-riscv64(no longer needed) (#2526, #2528) - 🛠 iOS versions bumped, fixing issues with 3.14 (now RC 1) (#2530)
- 🐛 Fix bug in Android running wheel from our GitHub Action (#2517)
- 🐛 Fix warning when using
test-skipof"*-macosx_universal2:arm64"(#2522) - 🐛 Fix incorrect number of wheels reported in logs, again (#2517)
- 📚 We welcome our Android platform maintainer (#2516)
v3.1.1
v3.1.0
- 🌟 CPython 3.14 wheels are now built by default - without the
"cpython-prerelease"enableset. It's time to build and upload these wheels to PyPI! This release includes CPython 3.14.0rc1, which is guaranteed to be ABI compatible with the final release. (#2507) Free-threading is no longer experimental in 3.14, so you have to skip it explicitly with'cp31?t-*'if you don't support it yet. (#2503) - 🌟 Adds the ability to build wheels for Android! Set the
platformoption toandroidon Linux or macOS to try it out! (#2349) - 🌟 Adds Pyodide 0.28, which builds 3.13 wheels (#2487)
- ✨ Support for 32-bit
manylinux_2_28(now a consistent default) andmanylinux_2_34added (#2500) - 🛠 Improved summary, will also use markdown summary output on GHA (#2469)
- 🛠 The riscv64 images now have a working default (as they are now part of pypy/manylinux), but are still experimental (and behind an
enable) since you can't push them to PyPI yet (#2506) - 🛠 Fixed a typo in the 3.9 MUSL riscv64 identifier (
cp39-musllinux_ricv64->cp39-musllinux_riscv64) (#2490) - 🛠 Mistyping
--onlynow shows the correct possibilities, and even suggests near matches on Python 3.14+ (#2499) - 🛠 Only support one output from the repair step on linux like other platforms; auditwheel fixed this over four years ago! (#2478)
- 💼 We now use pattern matching extensively (#2434)
- 📚 We now have platform maintainers for our special platforms and interpreters! (#2481)
v3.0.1
v3.0.0
See @henryiii's release post for more info on new features!
-
🌟 Adds the ability to build wheels for iOS! Set the
platformoption toioson a Mac with the iOS toolchain to try it out! (#2286, #2363, #2432) -
🌟 Adds support for the GraalPy interpreter! Enable for your project using the
enableoption. (#1538, #2411, #2414) -
✨ Adds CPython 3.14 support, under the
enableoptioncpython-prerelease. This version of cibuildwheel uses 3.14.0b2. (#2390)While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.14 will be available in cibuildwheel without the flag. (#2390)
-
✨ Adds the test-sources option, and changes the working directory for tests. (#2062, #2284, #2437)
- If this option is set, cibuildwheel will copy the files and folders specified in
test-sourcesinto the temporary directory we run from. This is required for iOS builds, but also useful for other platforms, as it allows you to avoid placeholders. - If this option is not set, behaviour matches v2.x - cibuildwheel will run the tests from a temporary directory, and you can use the
{project}placeholder in thetest-commandto refer to the project directory. (#2420)
- If this option is set, cibuildwheel will copy the files and folders specified in
-
✨ Adds
dependency-versionsinline syntax (#2122) -
✨ Improves support for Pyodide builds and adds the experimental
pyodide-versionoption, which allows you to specify the version of Pyodide to use for builds. (#2002) -
✨ Add
pyodide-prereleaseenable option, with an early build of 0.28 (Python 3.13). (#2431) -
✨ Adds the
test-environmentoption, which allows you to set environment variables for the test command. (#2388) -
✨ Adds the
xbuild-toolsoption, which allows you to specify tools safe for cross-compilation. Currently only used on iOS; will be useful for Android in the future. (#2317) -
🛠 The default manylinux image has changed from
manylinux2014tomanylinux_2_28. (#2330) -
🛠 EOL images
manylinux1,manylinux2010,manylinux_2_24andmusllinux_1_1can no longer be specified by their shortname. The full OCI name can still be used for these images, if you wish. (#2316) -
🛠 Invokes
buildrather thanpip wheelto build wheels by default. You can control this via thebuild-frontendoption. You might notice that you can see your build log output now! (#2321) -
🛠 Build verbosity settings have been reworked to have consistent meanings between build backends when non-zero. (#2339)
-
🛠 Removed the
CIBW_PRERELEASE_PYTHONSandCIBW_FREE_THREADED_SUPPORToptions - these have been folded into theenableoption instead. (#2095) -
🛠 Build environments no longer have setuptools and wheel preinstalled. (#2329)
-
🛠 Use the standard Schema line for the integrated JSONSchema. (#2433)
-
⚠️ Dropped support for building Python 3.6 and 3.7 wheels. If you need to build wheels for these versions, use cibuildwheel v2.23.3 or earlier. (#2282) -
⚠️ The minimum Python version required to run cibuildwheel is now Python 3.11. You can still build wheels for Python 3.8 and newer. (#1912) -
⚠️ 32-bit Linux wheels no longer built by default - the arch was removed from"auto". It now requires explicit"auto32". Note that modern manylinux images (like the new default,manylinux_2_28) do not have 32-bit versions. (#2458) -
⚠️ PyPy wheels no longer built by default, due to a change to our options system. To continue building PyPy wheels, you'll now need to set theenableoption topypyorpypy-eol. (#2095) -
⚠️ Dropped official support for Appveyor. If it was working for you before, it will probably continue to do so, but we can't be sure, because our CI doesn't run there anymore. (#2386) -
📚 A reorganisation of the docs, and numerous updates. (#2280)
-
📚 Use Python 3.14 color output in docs CLI output. (#2407)
-
📚 Docs now primarily use the pyproject.toml name of options, rather than the environment variable name. (#2389)
-
📚 README table now matches docs and auto-updates. (#2427, #2428)