Changelog#
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.36.0] - 2026/06/30#
Fixed#
Fixed several bugs in the cross-build-environment (xbuildenv) lifecycle #378:
A Python-version marker mismatch on an already-installed xbuildenv will now refresh the host packages.
Installing via
DEFAULT_CROSS_BUILD_ENV_URLis now treated like an explicit--urlinstall, so it no longer bakes a mangled, URL-derived version into the generated package index.pyodide xbuildenv useno longer raisesFileExistsErrorwhen thexbuildenvsymlink is dangling (its target was removed); the stale symlink is now cleaned up first.A failure during a later installation step no longer deletes a pre-existing, valid cached xbuildenv.
Fixed a hang when a recipe
build/scriptorbuild/postends by exiting the shell itself (e.g.exit 0). The build no longer blocks forever waiting for an environment dump that never runs; the previous environment is kept instead. #383Fixed per-package build variables (
PKGDIR,PKG_VERSION,DISTDIR, …) leaking into the cached build-environment dict, which caused later packages in a sequentialbuild-recipesrun to see the previous package’s values. #383Fixed
find_matching_wheelraisingRuntimeError("Found multiple matching wheels")for a single file. #381Fixed
pyodide clean recipesincorrectly cleaning packages taggedalways. #381Fixed a bug where boolean and non-string values in pyproject.toml crashes pyodide CLI when loading config values #381
Sanitize
Content-Disposition: filename=...header values to prevent path traversal. #382Fixed build constraints not being applied when using
uvas the installer by settingUV_BUILD_CONSTRAINTalongsidePIP_CONSTRAINTandPIP_BUILD_CONSTRAINT. #389Fixed a dead-code control flow in
pyodide skeleton pypiwhere a package whose new release ships only wheels (while the recipe used an sdist) would raise an exception rather than updating to the wheel. #384skeleton: fixed incorrect predictable URLs sdists for.zip-style sdists and packages with non-normalised names (such asruamel.yaml). #384Fixed three bugs in
pyodide venv:pyodide venv --no-download/--never-downloadbeing silently ignored, versioned pip scripts (e.g.,pip3.12) being renamed topip3, and a failedpyodide venvinvocation deleting a pre-existing destination directory. #377
Changed#
Fixed build-time scripts of unisolated packages (like
f2pyandnumpy-configfrom NumPy) not being available onPATHduring builds. #21oldest-supported-numpyis now explicitly rejected when encountered as a build-time dependency. It is deprecated since NumPy 2.0, and packages that still list it should migrate to a directnumpydependency. #392
[0.35.1] - 2026/06/13#
Fixed#
Fixed an include path issue on macOS when homebrew Python is installed: if
sys.prefixcontains a symlink (as is the case with homebrew), resolve it so that host include paths are still replaced by the cross-compile ones #375
[0.35.0] - 2026/06/09#
Added#
CrossBuildEnvReleaseSpecnow has apublished_atfield containing the UTC timestamp when the release was published on GitHub (ISO 8601 format). This is exposed inpyodide xbuildenv search --allandpyodide xbuildenv search --all --json. #349pyodide xbuildenv searchandpyodide xbuildenv installnow support--nightlyand--debugflags to search and install stable-debug, nightly, and nightly-debug cross-build environments respectively. #350, #354pyodide buildnow accepts-v/--verboseflags (stackable twice up to-vv) to increase build verbosity. At-v, installer commands and backend hook invocations are shown. At-vv, the package installers (uv/pip) additionally receive a-vflag for detailed package resolution output. #363
[0.34.4] - 2026/05/15#
Added#
We now show better error message when
pyodide buildfails to install build dependencies. #346
[0.34.3] - 2026/04/30#
Fixed#
Fixed compatibility issue with newer pypa/build >= 1.4.4 #345
[0.34.2] - 2026/04/29#
Fixed#
[0.34.1] - 2026/04/03#
Added#
pyodide configexposes variablesemsdk_dirandemscripten_dirthat point to the Emscripten SDK installation directory and Emscripten installation directory respectively in the xbuildenv (these are only available after Emscripten gets installed into the xbuildenv via thepyodide xbuildenv install-emscriptencommand). #321, #326
Changed#
Platform name for the Pyodide wheel is now
pyemscripteninstead ofpyodide, following the PEP 783 standard. If you want to use the old platform name, you can set theUSE_LEGACY_PLATFORMenvironment variable to1. #319
[0.34.0] - 2026/03/31#
Added#
pyodide xbuildenv install can skip eager installation, and cross-build packages are installed on first build-time use.
Changed#
Fixed#
--enable-new-dtagslinker flag is now filtered out. #317
[0.33.0] - 2026/02/26#
Changed#
Emscripten will now be auto installed when running
pyodide buildandpyodide build-recipesif the host system does not have emscripten installed. #293
Fixed#
Fixed
pyodide venvnot working in Windows + Python 3.14. #299
[0.32.1] - 2026/02/20#
Added#
Added
--skip-cross-build-packagesflag (andPYODIDE_SKIP_CROSS_BUILD_PACKAGESenv var) topyodide xbuildenv install, allowing users to skip installing cross-build packages (numpy, scipy, cffi, pycparser) into the host site-packages. This is useful in locked-down environments where packages need to be pre-approved, and the user is building packages that don’t depend on these at cross-compile time.Added support for
PIP_BUILD_CONSTRAINTenvironment variable for pip 26.2+ compatibility. The build system now prioritizesPIP_BUILD_CONSTRAINToverPIP_CONSTRAINTwhen determining build-time constraints, while maintaining backward compatibility.
Changed#
The feature to build packages with dependencies is now opt-in feature. It needs to be enabled by installing pyodide-build with
pip install pyodide-build[resolve]. #277
Fixed#
Fixed
pyodide venvnot working in Windows with virtualenv 20.38. #298
[0.32.0] - 2026/01/27#
Changed#
Dropped
typerdependency in favor ofclick. #287
[0.31.2] - 2026/01/26#
Added#
Added
--cleanoption to clean up temporary build files after building a package withpyodide build-recipes. #282
[0.31.1] - 2026/01/05#
Fixed#
Fixed an issue where pip inside the Pyodide venv would not correctly handle the arguments with spaces. #281
[0.31.0] - 2026/01/05#
Added#
pyodide venvnow works in Windows. It only works with Pyodide 0.29.1 and later. #274
Removed#
Removed
pyodide create-zipfilesubcommand. This command is was used only for building pyodide runtime and not for building packages. #276
Fixed#
[0.30.9] - 2025/11/11#
Added#
Added
pyodide clean recipes, a CLI command that deletes build files for chosen packages or tags. #254
[0.30.8] - 2025/10/22#
[0.30.7] - 2025/08/18#
[0.30.6] - 2025/08/16#
pyodide confignow exposesrust_emscripten_target_url. #225
[0.30.5] - 2025/06/04#
[0.30.4] - 2025/05/20#
Fixed compatibility with
virtualenv20.31 and later. The Pyodide virtual environment viapyodide venvno longer seedswheel, i.e., the--wheel/--no-wheeloptions are not available anymore. #208The default cross-build metadata URL was changed to https://pyodide.github.io/pyodide/api/pyodide-cross-build-environments.json to circumvent rate limits imposed by GitHub. It remains overridable by setting the
PYODIDE_CROSS_BUILD_ENV_METADATA_URLenvironment variable. #206
[0.30.3] - 2025/05/17#
Added
interpreterandpacakge_indexto the variables available viapyodide config get. #199
[0.30.2] - 2025/05/05#
[0.30.1] - 2025/04/25#
Added#
Fixed#
pyodide venvnow works in uv-managed environments. See issue #143. #185
[0.30.0] - 2025/04/08#
Added#
Added basic support for uv.
uv tool install pyodide-cli --with pyodide-build, oruvx --from pyodide-cli --with pyodide-build pyodide --help, or usingpyodide-buildinuv-managed virtual environments will now work. #132pyodide buildnow takes an additional--xbuildenv-pathargument and corresponding equivalentPYODIDE_XBUILDENV_PATHenvironment variable to either use an existing cross-build environment or create one at the specified path. This means that users can usepyodide xbuildenv install <...> --pathto install a cross-build environment somewhere and reuse this withpyodide build. #158Added a new config variable
xbuildenv_paththat can be left in the[tool.pyodide.build]section inpyproject.tomland retrieved throughpyodide config get xbuildenv_path. Thepyodide xbuildenvandpyodide buildcommands will setup/use cross-build environments at this path if one isn’t specified as a CLI argument or unless overridden through thePYODIDE_XBUILDENV_PATHenvironment variable. #158Added support for building without a wheel without build isolation:
pyodide buildno accepts the--no-isolation/-nand/or--skip-dependency-check/-xflags to customise the wheel building behaviour, similar topypa/build. #152
Changed#
The Rust toolchain version has been updated to
nightly-2025-01-18. #103Pyodide cross-build environments will now be installed in the user cache directory by default, which is
<home>/.cacheor XDG cache in Linux systems, and/Users/<user>/Library/Cachesin macOS. #148Removed
cmakedependency from the package. The Pyodide build system now uses thecmakepackage specified in thepyproject.tomlfile of the target package. #141
Fixed#
Fixed Pyodide venv
sys_platformmarker evaluation with pip >= 25. #108
[0.29.3] - 2025/02/04#
Added#
Added new configuration variable
default_cross_build_env_url. #85Added a new recipe key
requirement.constraintto set the package-level constraints. #97The
pyodide venvcommand now supports morevirtualenvcommand-line flags to customise the virtual environment creation behaviour (experimental) #117
[0.29.2] - 2024/11/29#
Fixed#
Fixed
pyodide venvcommand not loading the shared libraries correctly, resulting in the package load failure. This bug was introduced in version 0.28. #67
[0.29.1] - 2024/11/27#
Added#
Changed#
Source tar files are now extracted with python’s data filter #52
The
pyodide buildcommand will now raise an error if the local Python version has been changed, after the cross-build environment has been set up. #62
[0.29.0] - 2024/09/19#
Added#
The
pyodide xbuildenv searchcommand now accepts a--jsonflag to output the search results in JSON format that is machine-readable. The design for the regular tabular output has been improved. #28
Changed#
The
pyodide skeleton pypi --updatecommand and the--update-patchedvariant now validate the version and the source checksum when updating a package’s recipe. #27pyo3_config_fileis no longer available inpyodide configcommand. Pyodide now setsPYO3_CROSS_PYTHON_VERSION,PYO3_CROSS_LIB_DIRto specify the cross compilation environment for PyO3. #19
[0.28.0] - 2024/08/14#
pyodide xbuildenvsubcommand is now publicly available. #15
[0.27.3] - 2024/07/17#
It is now possible to override
_f2c_fixes.pyfile, with_f2c_fixes_wrappervariable. #8
[0.27.2] - 2024/07/11#
Changed#
[0.27.1] - 2024/06/28#
Changed#
ported f2c_fixes patch from https://github.com/pyodide/pyodide/pull/4822
[0.27.0] - 2024/06/18#
pyodide-build is now developed under https://github.com/pyodide/pyodide-build.