simonwillison.net web signal

Pyodide Wheels Now Publish Directly to PyPI via WASM Tag

TL;DR

  • Pyodide 314.0 lets package maintainers publish WASM wheels directly to PyPI using the new pyemscripten platform tag.
  • The change removes a long-standing bottleneck where the Pyodide team manually maintained over 300 packages.
  • A BigQuery analysis found 28 packages already publishing with the pyemscripten platform tag, including onnx, pydantic_core, and typst.

Python in the browser has always had a dependency problem -- not a technical one, but a human one. Pyodide brings a full CPython runtime to the browser via WebAssembly, but getting any given library to actually work there required the Pyodide team to manually package and maintain it. That team was doing this for over 300 packages, which is a remarkable volunteer effort and a structural bottleneck all at once.

The Pyodide 314.0 release changes that. As Simon Willison writes, maintainers can now "build and publish Pyodide wheels to PyPI, just as they do for native wheels on Linux, macOS, or Windows." The mechanism is PEP 783, which defines the pyemscripten platform specification, and the supporting infrastructure was merged into PyPI's warehouse repository on April 21st. Standard tooling, standard registry, no special coordination with the Pyodide maintainers required.

Willison built a small demonstration package called `luau-wasm` to show the workflow end to end. Luau is, per the project description, "a small, fast, and embeddable programming language based on Lua with a gradual type system" developed by Roblox under an MIT license. The resulting wheel comes in at 276KB and is installable in Pyodide environments via micropip -- a working proof that the full publication path is open to third-party maintainers.

A BigQuery analysis Willison ran found 28 packages already publishing with the `pyemscripten_202*_wasm32` platform tags, including onnx, pydantic_core, typst, and several Arrow-related packages. That is a thin but credible early signal: those are not toy projects. The honest caveat is that 28 packages is a small fraction of what lives on PyPI, and what the reporting does not tell you is how quickly maintainers of the long tail of scientific and data libraries will add pyemscripten build targets to their release pipelines.

For anyone building browser-based Python tools -- educational platforms, in-browser notebooks, lightweight data apps -- the direction here is worth watching closely. The bottleneck was never WebAssembly's technical capability; it was the packaging pipeline. That pipeline is now open.

Shared on Bluesky by 2 AI experts