Skip to content

Releases: pypa/cibuildwheel

v3.3.0

12 Nov 19:28

Choose a tag to compare

  • 🐛 Fix an incompatibility with Docker v29 (#2660)
  • ✨ Adds test-runtime option, to customise how tests on simulated/emulated environments are run (#2636)
  • ✨ Adds support for new manylinux_2_35 images on 32-bit ARM armv7l, 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 in repair-wheel-command (#2589)
  • 🛠 The versions set with dependency-versions no longer constrain packages specified by your build-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-command on Android, enabling more options to be passed (#2590)
  • 📚 Docs improvements (#2618)

v3.2.1

12 Oct 08:24

Choose a tag to compare

  • 🛠 Update to CPython 3.14.0 final (#2614)
  • 🐛 Fix the default MACOSX_DEPLOYMENT_TARGET on Python 3.14 (#2613)
  • 📚 Docs improvements (#2617)

v3.2.0

22 Sep 20:45

Choose a tag to compare

  • ✨ 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 to pypy-eol in the enable option, as it is now end-of-life. (#2521)
  • 📚 Docs improvements (#2574, #2601, #2598)

v3.1.4

19 Aug 18:22

Choose a tag to compare

  • ✨ Add a --clean-cache command 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-build when dependency-versions is set (#2548)
  • 🐛 Set CMAKE_FIND_ROOT_PATH_MODE_PACKAGE to BOTH on Android (#2547)
  • 🐛 Add patchelf dependency for platforms that can build Android wheels (#2552)
  • 🐛 Ignore empty values for CIBW_ARCHS like most other environment variables (#2541)
  • 💼 The color and suggest_on_error argparse 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

01 Aug 16:40

Choose a tag to compare

  • 🐛 Fix bug where "latest" dependencies couldn't update to pip 25.2 on Windows (#2537)
  • 🧪 Use pytest-rerunfailures to improve some of our iOS/Android tests (#2527, #2539)
  • 🧪 Remove some GraalPy Windows workarounds in our tests (#2501)

v3.1.2

29 Jul 15:13

Choose a tag to compare

  • ⚠️ Add an error if CIBW_FREE_THREADING_SUPPORT is set; you are likely missing 3.13t wheels, please use the enable/CIBW_ENABLE (#2520)
  • 🛠 riscv64 now 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-skip of "*-macosx_universal2:arm64" (#2522)
  • 🐛 Fix incorrect number of wheels reported in logs, again (#2517)
  • 📚 We welcome our Android platform maintainer (#2516)

v3.1.1

24 Jul 18:14

Choose a tag to compare

  • 🐛 Fix a bug showing an incorrect wheel count at the end of execution, and misrepresenting test-only runs in the GitHub Action summary (#2512)
  • 📚 Docs fix (#2510)

v3.1.0

24 Jul 03:25

Choose a tag to compare

  • 🌟 CPython 3.14 wheels are now built by default - without the "cpython-prerelease" enable set. 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 platform option to android on 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) and manylinux_2_34 added (#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 --only now 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

05 Jul 18:04

Choose a tag to compare

  • 🛠 Updates CPython 3.14 prerelease to 3.14.0b3 (#2471)
  • ✨ Adds a CPython 3.14 prerelease iOS build (only when prerelease builds are enabled) (#2475)

v3.0.0

11 Jun 13:03

Choose a tag to compare

See @henryiii's release post for more info on new features!

  • 🌟 Adds the ability to build wheels for iOS! Set the platform option to ios on 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 enable option. (#1538, #2411, #2414)

  • ✨ Adds CPython 3.14 support, under the enable option cpython-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-sources into 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 the test-command to refer to the project directory. (#2420)
  • ✨ Adds dependency-versions inline syntax (#2122)

  • ✨ Improves support for Pyodide builds and adds the experimental pyodide-version option, which allows you to specify the version of Pyodide to use for builds. (#2002)

  • ✨ Add pyodide-prerelease enable option, with an early build of 0.28 (Python 3.13). (#2431)

  • ✨ Adds the test-environment option, which allows you to set environment variables for the test command. (#2388)

  • ✨ Adds the xbuild-tools option, 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 manylinux2014 to manylinux_2_28. (#2330)

  • 🛠 EOL images manylinux1, manylinux2010, manylinux_2_24 and musllinux_1_1 can no longer be specified by their shortname. The full OCI name can still be used for these images, if you wish. (#2316)

  • 🛠 Invokes build rather than pip wheel to build wheels by default. You can control this via the build-frontend option. 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_PYTHONS and CIBW_FREE_THREADED_SUPPORT options - these have been folded into the enable option 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 the enable option to pypy or pypy-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)