Cómo publicar ruedas WASM en PyPI y qué significa para Pyodide

Con Pyodide 314 ya es posible publicar ruedas (wheels) compiladas para WebAssembly directamente en PyPI. Repasamos el cambio, el experimento luau-wasm y por qué esto importa para proyectos y equipos en América Latina.

Por Redaccion TD
Cómo publicar ruedas WASM en PyPI y qué significa para Pyodide

Qué cambió en Pyodide y PyPI

En el anuncio del lanzamiento de Pyodide 314.0 (13 de junio de 2026) se anunció una novedad que muchos esperaban: ahora es posible publicar paquetes de Python compilados para Pyodide —o cualquier runtime compatible con la plataforma PyEmscripten definida en PEP 783— directamente en PyPI y luego instalarlos en tiempo de ejecución dentro del navegador.

Hasta ahora, los mantenedores de Pyodide tenían que mantener, compilar y hospedar más de 300 paquetes por su cuenta. Esa carga administrativa ralentizaba la incorporación de nuevos paquetes porque cada subida requería revisión manual. Con el soporte incorporado en PyPI (el PR correspondiente aterrizó el 21 de abril), los autores de paquetes pueden construir y publicar ruedas (wheels) para la plataforma pyemscripten de la misma forma en que publican ruedas nativas para Linux, macOS o Windows.

Este cambio simplifica la distribución de extensiones en C o Rust compiladas a WebAssembly, algo que ya era técnicamente viable pero que carecía de un canal de distribución estándar y reproducible hasta ahora.

El experimento: luau-wasm

Simon Willison celebró la novedad empaquetando uno de sus experimentos: luau-wasm. Luau es un lenguaje derivado de Lua, desarrollado por Roblox, descrito como “pequeño, rápido y embebible” y con un sistema de tipos gradual. Está implementado en C++ y puede compilarse a WebAssembly.

Willison adaptó su prueba de concepto para empaquetarla como una rueda para Pyodide y automatizar su publicación con GitHub Actions. El resultado es luau-wasm, un paquete PyPI que publica un archivo de 276KB llamado luau_wasm-0.1a0-cp314-cp314-pyemscripten_2026_0_wasm32.whl. En Pyodide puede instalarse y usarse con el módulo micropip, por ejemplo:

import micropip
await micropip.install("luau-wasm")
import luau_wasm
print(luau_wasm.execute(r'''
 local animals = {"fox", "owl", "frog", "rabbit"}
 table.sort(animals, function(a, b) return #a < #b end)
 for i, name in animals do print(i .. ". " .. name .. " (" .. #name .. ")") end
 '''))

Ese ejemplo se puede ejecutar en la demo REPL de Pyodide; además, el repositorio de GitHub incluye los scripts de compilación y despliegue (utilizando la versión más reciente de cibuildwheel) y una página demo que carga Pyodide, instala luau-wasm y ofrece una interfaz para probarlo: https://simonw.github.io/luau-wasm/

¿Cuántos paquetes ya lo están usando?

Willison también investigó cuántos paquetes publican actualmente ruedas con las etiquetas pyemscripten_202*_wasm32. Tras ejecutar una consulta en el dataset público de PyPI en BigQuery (y compartir el JSON con los resultados), identificó 28 paquetes que ya usan las nuevas etiquetas. Entre ellos se encuentran:

luau-wasm, uuid7-rs, cmm-16bit, pyOpenTTDAdmin, imgui-bundle, numbertoolkit, bashkit, geoarrow-rust-core, arro3-io, arro3-core, arro3-compute, onnx, powerfit-em, tcod, chonkie-core, tokie, robotraconteur, pydantic_core, yaml-rs, cadquery-ocp-novtk-OCP.wasm, uuid_utils, base64_utils, pycdfpp, lib3mf-OCP.wasm, typst, toml-rs, onnx-weekly y dummy-pyodide-ext-test.

Si la consulta está correcta, son 28 paquetes a la fecha del análisis; la lista puede crecer rápidamente ahora que el mecanismo de distribución está disponible.

Implicaciones prácticas para equipos y desarrolladores

Este cambio tiene varios efectos relevantes, especialmente para equipos y comunidades de desarrollo en América Latina:

  • Menos fricción para distribuir código nativo en el navegador: proyectos que dependan de bibliotecas en C/C++ o Rust pueden empaquetarse como ruedas WASM y distribuirse desde PyPI, evitando la necesidad de que un grupo central mantenga binarios por separado.

  • Reproducibilidad y flujos CI/CD: usar PyPI como fuente única facilita pipelines automáticos y despliegues en entornos educativos, de investigación o de producto que usen Pyodide en el navegador.

  • Educación y demos interactivas: universidades, bootcamps y equipos de capacitación pueden publicar paquetes que los estudiantes instalen con micropip en entornos web, reduciendo la barrera de entrada al no requerir instalaciones locales.

  • Adopción en soluciones offline o de bajo costo: en contextos donde el acceso a infraestructura tradicional es limitado, el uso de Pyodide con ruedas en PyPI puede facilitar la entrega de aplicaciones que funcionen dentro del navegador sin necesidad de servidores complejos.

No obstante, conviene mantener buenas prácticas: documentar dependencias, probar la compatibilidad con la plataforma pyemscripten y publicar builds reproducibles para evitar problemas en producción.

Recomendaciones para empaquetar y publicar

La experiencia compartida por Willison muestra un camino claro para quienes quieran publicar ruedas WASM:

  1. Empaquetar la biblioteca compilada a WebAssembly y organizar los artefactos para que encajen en una rueda compatible con pyemscripten.
  2. Utilizar herramientas de compilación y empaquetado multiplataforma como cibuildwheel para generar las ruedas apropiadas.
  3. Automatizar la construcción y publicación con GitHub Actions (o un CI equivalente) para subir las ruedas a PyPI cuando se publiquen nuevas versiones.
  4. Probar la instalación en un entorno Pyodide (por ejemplo, la demo REPL) para verificar que micropip.install() funciona correctamente y que la API del paquete se comporta como en un entorno nativo.

El repositorio de luau-wasm incluye los scripts de build y despliegue como referencia práctica: https://simonw.github.io/luau-wasm/ (la demo y el código fuente son un buen punto de partida si están adaptando una librería propia).

Qué esperar en el corto plazo

Con PyPI soportando oficialmente el formato pyemscripten_*_wasm32, es razonable esperar un crecimiento en la cantidad de paquetes que se publican para este objetivo técnico. Para comunidades y empresas en la región, esto significa más opciones para llevar herramientas y bibliotecas al navegador sin reescribirlas por completo en JavaScript.

El cambio no elimina la necesidad de pruebas y revisión de calidad, pero reduce la carga operativa sobre los mantenedores de Pyodide y abre la puerta a una mayor contribución de la comunidad en todo el mundo.

Conclusión

La posibilidad de publicar ruedas WASM en PyPI es un avance práctico que mejora la distribución de extensiones nativas compiladas a WebAssembly para Pyodide. El ejemplo de luau-wasm demuestra que el flujo de trabajo es viable y relativamente directo usando cibuildwheel y GitHub Actions. Para desarrolladores, educadores y empresas en América Latina, la novedad puede acelerar prototipos, demos interactivas y despliegues ligeros que funcionan directamente en el navegador. Veremos cómo crece el ecosistema ahora que la infraestructura de distribución está en su lugar.

Fuente original: Simon Willison