Repository navigation
Releases: pypa/cibuildwheel
Release list
v4.3.4
- 🔐 Warns when a uv build frontend is selected and the host uv is older than 0.13.4, which still trusts the compromised eMudhra CA roots (#3021)
- 🔐 Uses cibuildwheel's CA bundle for pip on Python 3.9, where pip uses its bundled certifi, which still trusts the compromised eMudhra roots (#3017)
- 🔐 Uses cibuildwheel's CA bundle for pip on GraalPy, where truststore is not supported (#3019)
- 🔐 Uses cibuildwheel's CA bundle in Android, iOS, and Pyodide cross venvs, where pip uses the host's OpenSSL CA file (#3020)
- 🐛 Seeds build's isolated environment with the pinned pip on macOS and Windows, fixing GraalPy 25.0 builds (#3018)
- 💼 Stops Azure cache growth from
restoreKeys(#3022)
v4.3.3
v4.3.2
- 🔐 Updates our dependency pins to certifi==2026.10.19, following the eMudhra Intermediate CA Compromise. Linux builds may still be vulnerable through manylinux images - a patch release will soon follow if so.
v4.3.1
v4.3.0
- ✨ Extends option inheritance to every configuration layer, so global and platform-specific settings can append or prepend to existing values, including cibuildwheel's defaults. Environment variables can also extend earlier settings using
CIBW_INHERIT. (#2928) - ✨ Adds PyPy 3.12 support and updates PyPy 3.11 to v8.0.0, available with the
pypyenableflag (#2998) - ✨ Adds GraalPy 3.13 (v25.3) support on Linux, Windows, and macOS arm64, available with the
graalpyenableflag (#2982) - ✨ Adds
log-fold-modeto override CI log folding, includingCIBW_LOG_FOLD_MODE=disabledto keep build steps expanded (#2972) - ✨ Adds a
python-pathinput to the GitHub Action to choose the Python interpreter used to run cibuildwheel, and falls back to systempython3on runner architectures unsupported bysetup-python, such as native riscv64 (#2990) - 🐛 Fixes Windows command execution when paths or arguments contain shell metacharacters, including dependency specifiers containing
<or>(#2978) - 🛠 Improves readability of logged commands whose arguments contain quotes (#2993)
- 🛠 Updates Pyodide to 0.27.8, 0.29.5, and 314.0.7, and updates its build tooling, including auditwheel-emscripten 0.3.0 (#2996)
- 🛠 Updates dependencies and container pins, including CPython 3.15.0rc3 (#2986, #3003)
- 📚 Corrects references to
--archsin CLI help, error messages, and documentation (#2992)
v4.2.1
- 🐛 Respects the NuGet package sources configured on the machine when installing CPython on Windows, instead of always falling back to nuget.org (#2966)
- 🐛 Fixes a
NameErroron Pyodide when an already-compatible wheel was reused, which made the test step fail (#2968) - 🛠 Updates the Android Python versions, and the Android testbed's Gradle version, making it compatible with Java 25 (#2962)
- 🛠 Updates dependencies including CPython 3.15.0rc2 (#2965, #2970, #2976, #2981, #2985)
v4.2.0
- 🌟 CPython 3.15 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.15.0rc1, which is guaranteed to be ABI compatible with the final release. (#2944) - ✨ Adds Pyodide 3.15 support with the
cp315-pyodide_wasm32build identifier, using Pyodide 315.0.0a2. These are also stable wrt. the final release. (#2958) - 🐛 Retries a failed download six times with exponential backoff, so short network outages no longer stop a build. A
4xxresponse is still reported at once. (#2953) - 🐛 Accepts
defaultas abuild-frontendvalue on Pyodide, and acceptspyodide-buildin the top-level table and in overrides (#2951) - 🛠 Holds pip back on GraalPy, where newer pip breaks the build (#2955)
- 🛠 Updates Pyodide to 314.0.4 (#2949, #2952)
- 🛠 Updates dependencies and container pins (#2952, #2960)
- 💼 Updates CI action pins (#2948, #2954)
- 🧪 Uses pp311 for the abi3 test, and deletes
test_overridden_pip_constraint, which is not necessary since #2583 (#2956, #2957)
v4.1.1
- ✨ Adds
pyodide-buildas a separatebuild-frontend, now the default frontend for Pyodide, with verbosity flags handling. Any other frontend is ignored with a warning on Pyodide. (#2609, #2945) - 🔐 Uses digests instead of tags for pinned container images, strengthening supply-chain security. The human-readable tags remain as comments in
pinned_docker_images.cfg. (#2915) - 🐛 Fixes platform-specific
test-runtimeenvironment variables (e.g.CIBW_TEST_RUNTIME_ANDROID) not being honored (#2941) - 🐛 Fixes quoting of
test-requiresandaudit-requiresso PEP 508 specifiers containing spaces work (#2913) - 🐛 Makes
archsparsing case-insensitive and platform-aware, so e.g.arm64works on Windows (#2920) - 🐛 Uses an absolute path for the
{project}placeholder inconfig-settings(#2934) - 🐛 Validates the
pyodide-versionoption against the build identifier with a clear error (#2925) - 🐛 Fixes PyPy installs on macOS after PyPy switched its downloads from
.tar.bz2to.tar.gz(#2939) - 🐛 Makes a matching
python3-configavailable in the build and test venvs on macOS (#2922) - 🛠 Updates dependencies and container pins (#2917, #2935, #2939)
- 🛠 Updates Android tests to current Python versions and the new test repository URL (#2933)
- 🛠 Drops the
orjsondependency, no longer used by mypy 2+ (#2923) - 📚 Builds the docs with properdocs, a MkDocs fork (#2946)
- 📚 Adds the missing
cp314-pyodide_wasm32entry to the build identifier table (#2947) - 📚 Removes outdated notes about the
pip wheelbuild frontend and ClearLinux (#2926) - 💼 Adds a "CI: PyPy EoL" PR label to run PyPy EoL tests on PRs (#2930)
- 💼 Updates CI action pins and pre-commit hooks (#2914, #2932, #2938, #2940, #2942, #2943)
v4.1.0
- ✨ Updates Pyodide to the final 314.0.0 release, so Pyodide 3.14 wheels now build by default without the
pyodide-prereleaseenableflag. (#2906) - 🐛 Raises clear errors when a build produces no wheel, instead of failing later with a confusing message (#2909)
- 🛠 Speeds up CLI startup through lazy imports on Python 3.15 (#2797)
- 📚 Adds an FAQ section on caching cibuildwheel's downloaded tools with
CIBW_CACHE_PATH(#2842) - 📚 Documentation improvements: clarifies which shell is used for command options, clarifies environment variable precedence, and fixes a dead Pyodide env info link (#2904, #2905, #2911)
v4.0.0
See @henryiii's release post for more info on new features!
-
🌟 Adds wheel auditing with
abi3auditas a default after the repair step, with newaudit-requiresandaudit-commandoptions (#2805) -
🌟 Adds
pyemscriptenplatform tag support (PEP 783), updates Pyodide to 314.0.0a2, and adds apyodide-eolenableflag for building end-of-life Pyodide versions (#2812, #2848) -
🌟 Sets up
delvewheelas the defaultrepair-wheel-commandfor Windows, so extension module DLLs are now bundled automatically. Skip by setting it to empty if not needed. (#2831) -
✨ Adds CPython 3.15 support, under the
enableoptioncpython-prerelease. This version of cibuildwheel uses 3.15.0b2. (#2833, #2850)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.15 will be available in cibuildwheel without the flag.
-
✨ Adds CPython 3.15 support for iOS and Android (#2857, #2858)
-
✨ Adds Android improvements for building NumPy and related packages, including auditwheel support, pkg-config and Fortran configuration, and the
xbuild-filesoption (#2695) -
✨ Adds
CIBUILDWHEEL_BUILD_IDENTIFIERenvironment variable set to the current build identifier (e.g.cp311-manylinux_x86_64) during per-build steps (#2872) -
✨ Adds
{project}and{package}placeholders toconfig-settings(#2827) -
⚠️ Drops support for Python 3.8 (#2686) -
⚠️ Removes the experimental CPython 3.13 free-threading builds and thecpython-freethreadingenableoption. CPython 3.14+ free-threading support remains available without the enable flag. (#2684) -
⚠️ Drops support for Cirrus CI, which is shutting down June 1, 2026 (#2817) -
⚠️ Drops GraalPy 3.11 (gp311) support, as agreed in #2741, and removes GraalPy 24-only workarounds (#2895) -
🔐 Adds SHA256 verification for direct downloads of Python interpreters, virtualenv, and python-build-standalone assets (#2873)
-
🔐 Adds tarfile extraction filter for safe archive extraction (#2856)
-
🐛 Fixes
UV_PYTHONnot being set forbefore-buildon Linux when usinguvas thebuild-frontend(#2830) -
🐛 Fixes detection of musl libc when downloading python-build-standalone, which previously always selected the gnu asset on musl hosts like Alpine (#2889)
-
🐛 Fixes
config-settingsexpansion when{project}or{package}contains spaces or backslashes (#2886) -
🐛 Prevents deadlock when
linux32fails and forwards platform args to the sanity check (#2880, #2888) -
🐛 Fixes container resource leaks on start failure and during teardown (#2879, #2887)
-
🐛 Removes potential partial cache-population in case of error (#2892)
-
🐛 Raises a clear error when
ANDROID_API_LEVELis not an integer (#2891) -
🐛 Replaces assert with proper exception in python-build-standalone (#2859)
-
🐛 Uses ConfigurationError when
package_diris outside cwd instead of a generic Exception (#2898) -
🛠 Updates dependencies and container pins (#2893, #2882, #2874, #2868, #2862, #2884, #2845, #2837, #2818, #2810, #2838, #2813)
-
🛠 Updates Android to Python 3.13.13 and 3.14.4 (#2821)
-
🛠 Applies Pyodide-specific patches to the Emscripten toolchain installation (#2800)
-
🛠 Uses
python -V -Vfor Windows build diagnostics (#2832) -
🛠 Simplifies pinned container image lookup (#2897)
-
🛠 Minor fixups across error messages, OCI container, and options (#2860)
-
💼 Adds PEP 723 metadata for
bin/scripts and drops thebindependency group (#2819) -
💼 Improves Azure test reliability with retries and caching (#2890)
-
💼 Fixes Windows GitLab CI test running (#2870)
-
💼 Updates CI action pins and dev dependencies (#2902, #2867, #2851, #2843, #2826, #2823, #2820, #2807)
-
💼 Adds agent and copilot setup files (#2861)
-
🧪 Fixes Android tests using the
uvfrontend (#2809) -
🧪 Fixes the update-dependencies workflow to use
uvto runnox(#2808) -
🧪 Adds unit tests for
OCIContainer._get_platform_args(#2878) -
📚 Updates documentation for delvewheel as the default Windows
repair-wheel-command, including the build diagram, schema defaults, and legal note (#2877, #2853, #2891) -
📚 Documents platform-specific
before-buildconfiguration (#2834) -
📚 Updates the "How it works" diagram with details of Android, iOS, and Pyodide builds (#2816)
-
📚 Adds Pyodide icon and regenerates working examples data for Android, iOS, and Pyodide (#2815, #2811)
-
📚 Adds intersphinx support for external documentation linking (#2871)
-
📚 Adds instructions for building CUDA wheels and fixes manylinux container references in FAQ (#2896, #2900)
-
📚 Links back to source in docs (#2806)
-
📚 Removes outdated numpy info (#2855)