Pyodide 0.20 is a major release focused on improving our system for building and packaging Python modules.

We upgraded to Python 3.10. This comes with a speed boost of around 15% in Firefox and 22% in Chrome.

We updated almost every package to the most recent release, and moved closer to using upstream Emscripten. Pyodide 0.20 also includes many small bug fixes and usability improvements.

For the complete list of changes see the changelog.

Build system

We dramatically reworked our build system backend. The result is simpler, more powerful, and less error prone.

We now produce Python wheels for packages instead of Emscripten file packager archives. These are much easier to work with: they can be processed with any software that handles zip files and also by all of the Python tools for handling wheels. We now use wheels directly from PyPI for most pure Python packages.

We updated our system to use pypa/build, including (mostly) isolated builds. This way packages can use custom build systems, including different versions of setuptools.

We added support for C++ exception handling in packages and made other many minor tweaks to make it easier to port packages.

Upstreaming patches into Python 3.11

We worked with the CPython upstream to include our patches into Python 3.11. Experimental builds of Pyodide based on tip-of-tree Python confirm that everything works without patches.

Emscripten Update

We upgraded from Emscripten 2.0.16 to Emscripten 2.0.27. We are still a fair distance behind the newest Emscripten release due to a bug in Firefox versions 95 – 98 but fixed in Firefox 99beta.

Emscripten 2.0.27 is a major improvement over Emscripten 2.0.16, particularly with regards to linking: many linker errors have been changed from call-time errors to load-time errors or compile-time errors. In particular, this allowed us to fix tons of bugs in our port of Scipy. Almost all of Scipy v1.8.0 works correctly in Pyodide v0.20.0!

Acknowledgements

Thanks to everyone who contributed code to this release and to all users who reported issues and provided feedback. Thanks to the Emscripten team, particularly Alon Zakai and Sam Clegg, for developing Emscripten, providing technical advice about its use, and for reviewing and merging our patches. Thanks to the Python team, particularly Christian Heimes and Brett Cannon, for their work adding upstream support for the Emscripten platform.

The following people commited to Pyodide in this release:

Boris Feld, Christian Staudt, Gabriel Fougeron, Gyeongjae Choi, Henry Schreiner, Hood Chatham, Jo Bovy, Karthikeyan Singaravelan, Leo Psidom, Liumeo, Luka Mamukashvili, Madhur Tandon, Paul Korzhyk, Roman Yurchak, Seungmin Kim, Thorsten Beier, Tom White, and Will Lachance