NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #5397 most downloaded on PyPI
Build Python wheels on CI with minimal configuration.
Last release 29 days ago
05 Sep 2026
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
5 versions withdrawn
withdrawn after publishing
10 years old
154 releases · first in 2017
🐛 Fix a bug that caused missing wheels on Windows when a test was skipped using CIBW_TEST_SKIP
24 Dec 2022
🐛 Fix a bug that caused missing wheels on Windows when a test was skipped using CIBW_TEST_SKIP (#1377)
🛠 Updates CPython 3.11 to 3.11.1 (#1371)
🛠 Updates PyPy to 7.3.10, except on macOS which remains on 7.3.9 due to a bug on that platform. (#1371)
📚 Added a reference to abi3audit to the docs (#1347)
✨ Improves the 'build options' log output that's printed at the start of each run
One column per quarter.
CIBW_TEST_COMMAND option - not specifying path using the {project} placeholder (#1336)🛠 Updates CPython 3.11 to 3.11.0 - final release
MACOSX_DEPLOYMENT_TARGET on arm64 (#1312)🛠 Updates to the latest manylinux images, and updates CPython 3.10 to 3.10.8.
13 October 2022
🌟 Adds support for cross-compiling Windows ARM64 wheels. To use this feature, add ARM64 to the CIBW_ARCHS option on a Windows Intel runner.
ARM64 to the CIBW_ARCHS option on a Windows Intel runner. (#1144)cp38-macosx_arm64 wheels on a native arm64 runner. To do this, you'll need to preinstall the (experimental) universal2 version of CPython 3.8 on your arm64 runner before invoking cibuildwheel. Note: it is not recommended to build x86_64 wheels with this setup, your wheels will have limited compatibility wrt macOS versions. (#1283)🐛 Fix a bug that caused win32 identifiers to fail when used with --only.
win32 identifiers to fail when used with --only. (#1282)auto/auto64/auto32 archs when targeting a different platform to the one that you're running cibuildwheel on. (#1266)🐛 Fix a bug that stopped environment variables specified in TOML from being expanded.
18 September 2022
🌟 Adds support for building wheels on Cirrus CI. This is exciting for us, as it's the first public CI platform that natively supports macOS Apple Sili
arm64) runners. As such, it's the first platform that you can natively build and test macOS arm64 wheels. It also has native Linux ARM (aarch64) runners, for fast, native builds there. (#1191)x86_64, but now that we have Cirrus CI we can run our test suite and officially support running cibuildwheel on arm64. (#1191)--only command line option, to specify a single build to run. Previously, it could be cumbersome to set all the build selection options to target a specific build - for example, you might have to run something like CIBW_BUILD=cp39-manylinux_x86_64 cibuildwheel --platform linux --archs x86_64. The new --only option overrides all the build selection options to simplify running a single build, which now looks like cibuildwheel --only cp39-manylinux_x86_64. (#1098)CIBW_CONFIG_SETTINGS option, so you can pass arguments to your package's build backend (#1244)🌟 CPython 3.11 wheels are now built by default - without the CIBW_PRERELEASE_PYTHONS flag. It's time to build and upload these wheels to PyPI! This re
🐛 Fix a bug when building CPython 3.8 wheels on an Apple Silicon machine where testing would always fail. cibuildwheel will no longer attempt to test
✨ You can now run cibuildwheel on Podman, as an alternate container engine to Docker (which remains the default). This is useful in environments where
✨ You can now run cibuildwheel on Podman, as an alternate container engine to Docker (which remains the default). This is useful in environments where a Docker daemon isn't available, for example, it can be run inside a Docker container, or without root access. To use Podman, set the CIBW_CONTAINER_ENGINE option. (#966)
✨ Adds support for building py3-none-{platform} wheels. This works the same as ABI3 - wheels won't be rebuilt, but tests will still be run across all selected versions of Python.
These wheels contain native extension code, but don't use the Python APIs. Typically, they're bridged to Python using a FFI module like ctypes or cffi. Because they don't use Python ABI, the wheels are more compatible - they work across many Python versions.
Check out this example ctypes project to see an example of how it works. (#1151)
🛠 cibuildwheel will now error if multiple builds in a single run produce the same wheel filename, as this indicates a misconfiguration. (#1152)
📚 A few docs improvements and updates to keep things up-to-date.
🌟 Added support for the new manylinux_2_28 images. These new images are based on AlmaLinux, the community-driven successor to CentOS, unlike manylinux
manylinux_2_28 images. These new images are based on AlmaLinux, the community-driven successor to CentOS, unlike manylinux_2_24, which was based on Debian. To build on these images, set your CIBW_MANYLINUX_*_IMAGE option to manylinux_2_28. (#1026)🛠 Update the prerelease CPython 3.11 to 3.11.0b3
7 June 2022
🌟 Added the ability to test building wheels on CPython 3.11! Because CPython 3.11 is in beta, these wheels should not be distributed, because they mig
--prerelease-pythons or CIBW_PRERELEASE_PYTHONS to test. This version of cibuildwheel includes CPython 3.11.0b1. (#1109)✨ Added support for building ABI3 wheels. cibuildwheel will now recognise when an ABI3 wheel was produced, and skip subsequent build steps where the p
cibuildwheel mypackage-1.0.0.tar.gz. For more details, check the --help output (#1096)--allow-empty is passed (#1086)✨ cibuildwheel now supports running locally on Windows and macOS (as well as Linux). On macOS, you'll have to install the versions of Pythons that you
[project] table, because that takes precedence over setup.py and setup.cfg. Check out the setuptools docs and the project metadata specification for more info.🐛 Setting pip options like PIP_USE_DEPRECATED in CIBW_ENVIRONMENT no longer adversely affects cibuildwheel's ability to set up a Python environment
PIP_USE_DEPRECATED in CIBW_ENVIRONMENT no longer adversely affects cibuildwheel's ability to set up a Python environment (#956)14 December 2021
🐛 Setting pip options like PIP_USE_DEPRECATED in CIBW_ENVIRONMENT no longer adversely affects cibuildwheel's ability to set up a Python environment (#956)
📚 Docs fixes and improvements
If this causes an issue with your project, setting environment variable PIP_USE_DEPRECATED=out-of-tree-build is available as a temporary flag to resto…
CIBW_ENVIRONMENT_PASS_LINUX for the details. (#914){project} in before_build or {dest_dir} in repair_wheel_command. This allows bash syntax like ${SOME_VAR} to passthrough without being interpreted as a placeholder by cibuildwheel. See this section in the docs for more info. (#889)PIP_USE_DEPRECATED=out-of-tree-build is available as a temporary flag to restore the old behaviour. However, be aware that this flag will probably be removed soon. (#881)python3 within a build on Windows (#917)🐛 Fix bug in the GitHub Action step causing a syntax error
26 October 2021
🛠 Added a config-file option on the GitHub Action to specify something other than pyproject.toml in your GitHub Workflow file.
config-file option on the GitHub Action to specify something other than pyproject.toml in your GitHub Workflow file. (#883)🛠 Added a config-file option on the GitHub Action to specify something other than pyproject.toml in your GitHub Workflow file.
config-file option on the GitHub Action to specify something
other than pyproject.toml in your GitHub Workflow file. (#883)🌟 Added support for musllinux. Support for this new wheel format lets projects build wheels for Linux distributions that use musl libc, notably, Alpin
🌟 Added support for musllinux. Support for this new wheel format lets projects build wheels for Linux distributions that use musl libc, notably, Alpine Docker containers. (#768)
Musllinux builds are enabled by default. If you're not ready to build musllinux, add *-musllinux_* to your CIBW_SKIP/skip option. Or, you might have to make some changes to your options - to simplify that process, you can use...
🌟 TOML option overrides! This provides much greater flexibility in configuration via pyproject.toml. (#854)
You can now set build options for any subset of your builds using a match pattern. So, for example, you can customise CPython 3.8 builds with an override on cp38-* or musllinux builds by selecting *musllinux*. Check out the docs for more info on the specifics.
🛠 Added support for building PyPy wheels on macOS 11 CI runners. (#875)
🛠 Setting an empty string for the CIBW_*_IMAGE option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matricies. (#829)
🛠 Support for TOML 1.0 when reading config files, via the tomli package. (#876)
22 October 2021
Musllinux builds are enabled by default. If you're not ready to build musllinux, add -musllinux_ to your CIBW_SKIP / skip option. Or, you might have to make some changes to your options - to simplify that process, you can use...
You can now set build options for any subset of your builds using a match pattern. So, for example, you can customise CPython 3.8 builds with an override on cp38-* or musllinux builds by selecting musllinux . Check out the docs for more info on the specifics.
🛠 Added support for building PyPy wheels on macOS 11 CI runners. (#875)
🛠 Setting an empty string for the CIBW_*_IMAGE option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matrices. (#829)
🛠 Support for TOML 1.0 when reading config files, via the tomli package. (#876)
Note: This version is not available on PyPI due to some missing resources in the release files. Please use a later version instead.
_Currently in prerelease. The below release notes will be condensed into a single entry on final release._
Currently in prerelease. The below release notes will be condensed into a single entry on final release.
v2.2.0b1 (19 October 2021)
🌟 TOML option overrides. This provides much greater flexibility in configuration via pyproject.toml.
You can now set build options for any subset of your builds using a match pattern. So, for example, you can customise CPython 3.8 builds with an override on cp38-* or musllinux builds by selecting *musllinux*. Check out the docs for more info on the specifics.
v2.2.0a1 (23 September 2021)
🌟 Added support for musllinux. Support for this new wheel format lets projects build wheels for Linux distributions that use musl libc, notably, Alpine Docker containers.
Musllinux builds are enabled by default. To disable them on your project, add *-musllinux_* to your CIBW_SKIP/skip
option. (#768)
🛠 Setting an empty string for the CIBW_*_IMAGE option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matricies. (#829)
_Currently in prerelease. The below release notes will be condensed into a single entry on final release._
Currently in prerelease. The below release notes will be condensed into a single entry on final release.
v2.2.0a1 (23 September 2021)
🌟 Added support for musllinux. Support for this new wheel format lets projects build wheels for Linux distributions that use musl libc, notably, Alpine Docker containers.
Musllinux builds are enabled by default. To disable them on your project, add *-musllinux_* to your CIBW_SKIP/skip
option. (#768)
🛠 Setting an empty string for the CIBW_*_IMAGE option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matricies. (#829)
🛠 Updated CPython 3.10 to the 3.10.0 final release.
6 October 2021
🛠 Updated CPython 3.10 to 3.10.0rc2
14 September 2021
🛠 Updated CPython 3.10 to 3.10.0rc2
📚 Multiple docs updates
🐛 Improved warnings when built binaries are bundled into the container on Linux. (#807)
✨ Corresponding with the release of CPython 3.10.0rc1, which is ABI stable, cibuildwheel now builds CPython 3.10 by default - without the CIBW_PRERELE
<sup>Note: v2.1.0 was a bad release, it was yanked from PyPI.</sup>
Nothing published for this version
🛠 Dependency updates, including delocate 0.9.0.
25 July 2021
📚 Docs improvements (#767)
🛠 Dependency updates, including delocate 0.9.0.
🌟 You can now configure cibuildwheel options inside your project's pyproject.toml! Environment variables still work of course. Check out the documenta
pyproject.toml! Environment variables still work of course. Check out the documentation for more info.CIBW_BUILD_FRONTEND option.--prerelease-pythons or CIBW_PRERELEASE_PYTHONS to test. (#675) This version of cibuildwheel includes CPython 3.10.0b4.Nothing published for this version
Nothing published for this version
_This release is currently in prerelease. The below release notes will be condensed into a single entry when we do a final release._
This release is currently in prerelease. The below release notes will be condensed into a single entry when we do a final release.
v2.0.0a4 (25 Jun 2021)
CIBW_BUILD_FRONTEND option.v2.0.0a3 (22 Jun 2021)
pyproject.toml! Environment variables still work of course. Check out the documentation for more info.v2.0.0a2 (1 Jun 2021)
--prerelease-pythons or CIBW_PRERELEASE_PYTHONS to test. (#675)_This release is currently in prerelease. The below release notes will be condensed into a single entry when we do a final release._
This release is currently in prerelease. The below release notes will be condensed into a single entry when we do a final release.
v2.0.0a3 (22 Jun 2021)
pyproject.toml! Environment variables still work of course. Check out the documentation for more info.v2.0.0a2 (1 Jun 2021)
--prerelease-pythons or CIBW_PRERELEASE_PYTHONS to test. (#675)_This version is currently in prerelease. The below release notes will be condensed into a single entry when we do a final release._
This version is currently in prerelease. The below release notes will be condensed into a single entry when we do a final release.
v2.0.0a2 (1 Jun 2021)
--prerelease-pythons or CIBW_PRERELEASE_PYTHONS to test. (#675)Nothing published for this version
✨ Adds support building universal2/arm64 wheels on Python 3.8.
22 June 2021
Nothing published for this version
✨ cibuildwheel is now part of the PyPA!
📚 Lots of docs improvements! (#650, #623, #616, #609, #606)
DISTUTILS_USE_SDK=1 and MSSdk=1. This is because Microsoft have stopped distributing Visual C++ Compiler for Python 2.7. See this FAQ entry for more details. (#649)which command (#641).Nothing published for this version
✨ Added manylinux_2_24 support. To use these new Debian-based manylinux images, set your manylinux image options to manylinux_2_24.
manylinux_2_24 support. To use these new Debian-based manylinux images, set your manylinux image options to manylinux_2_24. (#595)MACOSX_DEPLOYMENT_TARGET in before running CIBW_BEFORE_ALL. This is useful when using CIBW_BEFORE_ALL to build a shared library. (#590)CIBW_BUILD option is now the same as being unset i.e, *. This makes some build matrix configuration easier. (#588)🌟 Added support for Apple Silicon wheels on macOS! You can now cross-compile universal2 and arm64 wheels on your existing macOS Intel runners, by sett
🌟 Added support for Apple Silicon wheels on macOS! You can now cross-compile universal2 and arm64 wheels on your existing macOS Intel runners, by setting CIBW_ARCHS_MACOS. Xcode 12.2 or later is required, but you don't need macOS 11.0 - you can still build on macOS 10.15. See this FAQ entry for more information. (#484)
🌟 Added auto-detection of your package's Python compatibility, via declared requires-python in your pyproject.toml, or python_requires in setup.cfg or setup.py. If your project has these set, cibuildwheel will automatically skip builds on versions of Python that your package doesn't support. Hopefully this makes the first-run experience of cibuildwheel a bit easier. If you need to override this for any reason, look at CIBW_PROJECT_REQUIRES_PYTHON. (#536)
🌟 cibuildwheel can now be invoked as a native GitHub Action! You can now invoke cibuildwheel in a GHA build step like:
- name: Build wheels
uses: joerick/cibuildwheel@v1.9.0
with:
output-dir: wheelhouse
# env:
# CIBW_SOME_OPTION: value
This saves a bit of boilerplate, and you can use Dependabot to keep the pinned version up-to-date.
✨ Added auto64 and auto32 shortcuts to the CIBW_ARCHS option. (#553)
✨ cibuildwheel now prints a list of the wheels built at the end of each run. (#570)
📚 Lots of minor docs improvements.
🌟 Added support for emulated builds! You can now build manylinux wheels on ARM64aarch64, as well as ppc64le and 's390x'. To build under emulation, reg
aarch64, as well as ppc64le and 's390x'. To build under emulation, register QEMU via binfmt_misc and set the CIBW_ARCHS_LINUX option to the architectures you want to run. See this FAQ entry for more information. (#482)CIBW_TEST_SKIP option. This allows you to choose certain builds whose tests you'd like to skip. This might be useful when running a slow test suite under emulation, for example. (#537)curly-{brace,bracket,paren} style globbing to CIBW_BUILD and CIBW_SKIP. This gives more expressivity, letting you do things like CIBW_BUILD=cp39-manylinux_{aarch64,ppc64le}. (#527)--allow-empty on the command line. (#545)🐛 Fix the PyPy virtualenv patch to work on macOS 10.14
2 January 2021
🛠 Added a patch for Pypy to ensure header files are available for building in a virtualenv.
🛠 Update dependencies, notably wheel==0.36.2 and pip==20.3.3, and CPython to their latest bugfix releases
🛠 Update manylinux2010 image to resolve issues with 'yum' repositories
3 December 2020
✨ New logging format, that uses 'fold groups' in CI services that support it.
🐛 Fix crash on Appveyor during nuget install due to old system CA certificates. We now use certifi's CA certs to download files.
31 October 2020
🐛 Fix missing SSL certificates on macOS
12 October 2020
🐛 Fix missing SSL certificates on macOS (#447)
🛠 Update OpenSSL Python 3.5 patch to 1.1.1h on macOS (#449)
✨ Python 3.9 updated to the final release version - v3.9.0
9 October 2020
✨ Python 3.9 updated to the final release version - v3.9.0 (#440)
🛠 Pypy updated to v7.3.2, adding alpha support for Python 3.7 (#430)
🛠 Add PPC64LE manylinux image supporting Python 3.9.
20 September 2020
🛠 Add PPC64LE manylinux image supporting Python 3.9. (#436)
📚 Add project URLs to PyPI listing (#428)
🌟 Add Python 3.9 support! This initial support uses release candidate builds. You can start publishing wheels for Python 3.9 now, ahead of the officia
9 September 2020
Minor note - if you're building PPC64LE wheels, the manylinux image pinned by this version is still on Python 3.9b3 , not a release candidate. We'd advise holding off on distributing 3.9 ppc64le wheels until a subsequent version of cibuildwheel.
🌟 Add Gitlab CI support. Gitlab CI can now build Linux wheels, using cibuildwheel. (#419)
🐛 Fix a bug that causes pyproject.toml dependencies to fail to install on Windows (#420)
📚 Added some information about Windows VC++ runtimes and how they relate to wheels.
🐛 Fix a bug that would cause command substitutions in CIBW_ENVIRONMENT to produce no output on Linux
22 July 2020
🐛 Fix a bug that would cause command substitutions in CIBW_ENVIRONMENT to produce no output on Linux (#411)
🐛 Fix regression (introduced in 1.5.3) which caused BEFORE_BUILD and BEFORE_ALL to be executed in the wrong directory (#410)
🐛 Fix a bug that would cause command substitutions in CIBW_ENVIRONMENT variables to not interpret quotes in commands correctly (#406, #408)
19 June 2020
🛠 Internal refactoring of Linux build, to move control flow into Python
19 July 2020
🛠 Update CPython 3.8 to 3.8.3 (#405)
🛠 Internal refactoring of Linux build, to move control flow into Python (#386)
🐛 Fix an issue on Windows where pyproject.toml would cause an error when some requirements formats were used.
8 July 2020
🐛 Fix an issue on Windows where pyproject.toml would cause an error when some requirements formats were used. (#401)
🛠 Update CPython 3.7 to 3.7.8 (#394)
🐛 Fix "OSError: [WinError 17] The system cannot move the file to a different disk drive" on GitHub Actions (#388, #389)
25 June 2020
🌟 Add CIBW_BEFORE_ALL option, which lets you run a command on the build machine before any wheels are built. This is especially useful when building o
24 June 2020
🌟 Add CIBW_BEFORE_ALL option, which lets you run a command on the build machine before any wheels are built. This is especially useful when building on Linux, to make something external to Python, or to yum install a dependency. (#342)
✨ Added support for projects using pyproject.toml instead of setup.py (#360, #358)
✨ Added workaround to allow Python 3.5 on Windows to pull dependencies from pyproject.toml. (#358)
📚 Improved GitHub Actions examples and docs (#354, #362)
🐛 Ensure pip wheel uses the specified package, and doesn't build a wheel from PyPI (#369)
🛠 Internal changes: using pathlib.Path, precommit hooks, testing improvements.
Your coding agent can read these notes before it upgrades. Set up the MCP server →