Pyodide is one of the hidden gems of the Python ecosystem. It's SO good at what it does, and it's nearly 8 years old now so it's pretty mature.
I love using Pyodide to build web UIs for trying out new Python libraries. Here's one I built a few weeks ago to exercise my pure-Python SQLite AST parser, for example: https://tools.simonwillison.net/sqlite-ast
It's also pretty easy[1] to get C or Rust libraries that have Python bindings compiled to a WebAssembly wheel that Pyodide can then load.
Maybe if browsers start shipping or downloading WASMs for python and others on request. And storing them for all sites going forward. Similar to how uv does it for for venvs it creates, there are standalone python version blobs.
iamcreasy 6 hours ago [-]
How do you call those C/Rust libraries compiled from to webassembly from Python/Pyodide?
simonw 6 hours ago [-]
You have to turn them into WebAssembly wheels, then you can import them as if they were regular Python modules.
fzumstein 5 hours ago [-]
Pyodide powers xlwings Lite, a free Excel add-in that you can install from Excel’s add-in store with a single click. It outperforms Microsoft’s official Python in Excel solution in every coceivable way: price, privacy, speed, can install packages, can access the internet, can access local files, doesn’t have a usage quota, can automate Excel and create native UDFs. See https://lite.xlwings.org
devsda 7 hours ago [-]
There's also xeus-cpp which is cpp based on wasm. Xeus-cpp and pyodide are the backends for Jupyterlite [1] kernels in browser.
It's actually a very good way to teach coding in python/c++(11, 17 or even 23), explore language features or your own library within browser and allow students to execute code by hosting just some static html pages and some assets without any backend.
It works surprisingly well in terms of writing python for native execution, and then trying to share on the web and having it Just Work TM. Unfortunately, when I want python it's because I want numpy, scipy and friends, and once you bring them on board pyodide load times are long. As an example comparison: a face turning octahedron puzzle in python + pyodide, loads in 10 seconds https://cubes.hgreer.com/fto.html . Meanwhile, a megaminx puzzle in javascript (statically generated by python) loads in 200 ms https://cubes.hgreer.com/ssg/output.html
ianberdin 6 hours ago [-]
Yea, I even built online ide based on Pyodide. Insane peace of software.
You can try here: playcode.io/python
jasiek 6 hours ago [-]
I've used it to put together a browser app to program walkie-talkies: https://codeplug.org
williamstein 4 hours ago [-]
I tried to make a version of this using Zig once, but ran out of steam: https://cowasm.org/
shevy-java 4 hours ago [-]
Everyone runs out of steam when it comes to WebAssembly. I used to wonder in the past why we hear so little about it, until I realised that nobody is really using it. Granted, there are those who use WebAssembly, but if we compare it to HTML, CSS, JavaScript, then WebAssembly is simply not existing anywhere near that level. After soon-to-be 10 years, that is very disappointing.
IshKebab 4 hours ago [-]
Plenty of people are using Webassembly. Many more will use it once GC is properly supported and you don't need a JavaScript shim layer.
yjftsjthsd-h 5 hours ago [-]
That is very cool. Has anyone made a nice beginner's learning environment out of it? Seems like it would solve some of the extra friction that makes it hard to get started.
cfu28 5 hours ago [-]
I played around with it to build a little "intro to python" walkthrough on my blog a while back. It worked surprisingly well! I had a little trouble giving users the ability to ctrl-c if they accidentally wrote an infinite loop though lol (piodide supports it I just didn't implement it): https://cfu288.com/blog/2024-05_cwc-intro-to-python/
wisty 5 hours ago [-]
Jupyterlite - a lot of jupyter trial versions use it.
yawnxyz 8 hours ago [-]
no but it works great in conjunction with observable and d3js for pretty interactives!
walterlw 3 hours ago [-]
could you please point to an example? For my project i'm currently animating matplotlib plots and walk through the video later, but rendering times are quite painful.
jacob019 8 hours ago [-]
Anyone using it with nodejs to make a sandbox for code agents?
benjamincburns 32 minutes ago [-]
Yes. More than a few times. It however is not really designed to operate as a secure sandbox environment.
ChatGPT's Canvas uses Pyodide for sandboxing, but it's not designed for coding agents. Node.js environment is usually better for agents. Pyodide restricts server-side functionality, and fetching external URLs often needs proxying due to sandbox. By the way, pyodide is still good option for interactive visualizer or deploying small webapps require data processing.
jcheng 8 hours ago [-]
For that purpose I think most people are using bubblewrap or seatbelt/sandbox-exec with CPython.
The bubblewrap readme mentions containers as binaries with binctr; I guess without overlayfs or other file-level re-deduplication due to the container fs in the binary.
Perhaps similarly, also TIL
UKI are easier for UEFI Secure Boot to check signatures on than (kernel, initrd) pairs
shevy-java 4 hours ago [-]
WebAssembly will reach a breakthrough in the same year as GNU Hurd will dominate, together with the Desktop-Linux-of-the-year.
sts153 36 minutes ago [-]
This is not funny. Sure, i have a technology that is a little bit slow, but i can run it nearly everywhere. Almost every day, there come a new desktop, OS, etc... but very soon a runtime for webassembly. It is good for that, what i call little data quick fixes.
anarhackist 8 hours ago [-]
[dead]
Rendered at 11:25:46 GMT+0000 (Coordinated Universal Time) with Vercel.
I love using Pyodide to build web UIs for trying out new Python libraries. Here's one I built a few weeks ago to exercise my pure-Python SQLite AST parser, for example: https://tools.simonwillison.net/sqlite-ast
It's also pretty easy[1] to get C or Rust libraries that have Python bindings compiled to a WebAssembly wheel that Pyodide can then load.
Here's a bit of a nutty example - the new Monty Python-like sandbox library (written in Rust) compiled to WASM and then loaded in Pyodide in the browser: https://simonw.github.io/research/monty-wasm-pyodide/pyodide...
[1] OK, Claude Code knows how to do it.
Maybe if browsers start shipping or downloading WASMs for python and others on request. And storing them for all sites going forward. Similar to how uv does it for for venvs it creates, there are standalone python version blobs.
It's actually a very good way to teach coding in python/c++(11, 17 or even 23), explore language features or your own library within browser and allow students to execute code by hosting just some static html pages and some assets without any backend.
1. https://jupyter.org/try-jupyter/lab/
https://nvd.nist.gov/vuln/detail/CVE-2025-68668
https://nvd.nist.gov/vuln/detail/CVE-2025-51464
https://nvd.nist.gov/vuln/detail/CVE-2026-25905
pydantic/monty, vercel-labs/just-bash, amla sandbox, csl-core, microsandbox, workerd, wasmtime-mte
containers/bubblewrap: https://github.com/containers/bubblewrap#sandboxing
The bubblewrap readme mentions containers as binaries with binctr; I guess without overlayfs or other file-level re-deduplication due to the container fs in the binary.
Perhaps similarly, also TIL UKI are easier for UEFI Secure Boot to check signatures on than (kernel, initrd) pairs