[HN Gopher] Pyodide: a Python distribution based on WebAssembly
       ___________________________________________________________________
        
       Pyodide: a Python distribution based on WebAssembly
        
       Author : tosh
       Score  : 168 points
       Date   : 2026-03-13 17:34 UTC (4 days ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | jacob019 wrote:
       | Anyone using it with nodejs to make a sandbox for code agents?
        
         | jcheng wrote:
         | For that purpose I think most people are using bubblewrap or
         | seatbelt/sandbox-exec with CPython.
        
           | westurner wrote:
           | From https://news.ycombinator.com/item?id=47171887 re:
           | [agent] sandboxing :
           | 
           | 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
        
         | b89kim wrote:
         | 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.
        
         | simonw wrote:
         | I've done some experiments along those lines with Pyodide in
         | Deno: https://til.simonwillison.net/deno/pyodide-sandbox
        
         | benjamincburns wrote:
         | Yes. More than a few times. It however is not really designed
         | to operate as a secure sandbox environment.
         | 
         | 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
        
       | yawnxyz wrote:
       | no but it works great in conjunction with observable and d3js for
       | pretty interactives!
        
         | walterlw wrote:
         | 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.
        
       | QuadmasterXLII wrote:
       | 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
        
       | simonw wrote:
       | 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.
       | 
       | 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.
        
         | iamcreasy wrote:
         | How do you call those C/Rust libraries compiled from to
         | webassembly from Python/Pyodide?
        
           | simonw wrote:
           | You have to turn them into WebAssembly wheels, then you can
           | import them as if they were regular Python modules.
        
         | VagabundoP wrote:
         | The who python web feels underused to be honest.
         | 
         | 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.
        
           | bnchrch wrote:
           | At the same time it feels like the python is overused.
           | 
           | If I could wave a magic wand to reset any programming
           | language adoption at this point I would choose Python over
           | Javascript.
           | 
           | I think Pythons execution model, deep OO behaviour, and
           | extremely weak guarantees have done a lot of damage to the
           | soundness and performance of the technology world.
        
             | limagnolia wrote:
             | What do you mean by "extremely weak guarantees"?
        
             | LtWorf wrote:
             | python at least won't cast numbers to strings when adding
             | them.
        
         | wiseowise wrote:
         | Serious question: why would you use Python on the web? Unless
         | you have some legacy code that you want to reuse. Performance
         | is somehow worse than CPython, C-extensions are missing, dev
         | experience is atrocious.
        
           | simonw wrote:
           | C extensions aren't missing, the key ones are available in
           | Pyodide already and you can compile others to WASM wheels if
           | you need them.
           | 
           | You use Python on the web because there's existing software
           | written in Python that you want to run in a browser.
        
           | infamia wrote:
           | The web is the only major platform that has a language
           | monoculture to its detriment (i.e., not all problems are
           | Javascript shaped). IMO the web ought to become multilingual
           | (and become JS optional_ to further ensure its continued
           | longevity and agility. Hopefully one day browser vendors will
           | offer multiple runtime downloads (or something similar
           | capability).
        
             | wiseowise wrote:
             | > i.e., not all problems are Javascript shaped
             | 
             | I'm having trouble coming up with a single Python-shaped
             | problem that can't be contained within JavaScript-shaped
             | ecosystem.
        
         | joezydeco wrote:
         | Could you share the UI repo? This is really interesting stuff.
        
           | hashtag-til wrote:
           | Should be this one
           | https://github.com/simonw/research/blob/main/monty-wasm-
           | pyod...
        
             | joezydeco wrote:
             | Thanks!
        
       | devsda wrote:
       | 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.
       | 
       | 1. https://jupyter.org/try-jupyter/lab/
        
       | ianberdin wrote:
       | Yea, I even built online ide based on Pyodide. Insane peace of
       | software. You can try here: playcode.io/python
        
       | jasiek wrote:
       | I've used it to put together a browser app to program walkie-
       | talkies: https://codeplug.org
        
       | yjftsjthsd-h wrote:
       | 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.
        
         | wisty wrote:
         | Jupyterlite - a lot of jupyter trial versions use it.
        
         | cfu28 wrote:
         | 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/
        
       | fzumstein wrote:
       | 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
        
       | williamstein wrote:
       | I tried to make a version of this using Zig once, but ran out of
       | steam: https://cowasm.org/
        
         | shevy-java wrote:
         | 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 wrote:
           | 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.
        
           | circuit10 wrote:
           | Why does it make sense to compare it to HTML, CSS and
           | JavaScript?
           | 
           | You could say "Granted, there are those who use the webcam
           | capture API, but if we compare it to HTML, CSS, JavaScript,
           | then the webcam capture API is simply not existing anywhere
           | near that level."
           | 
           | Like how not every website needs to use a webcam, not every
           | website needs to port existing code to the web or accelerate
           | heavy computation, which is what WASM is meant for... that
           | doesn't mean it's not useful for ones that do. It's not
           | supposed to replace any of HTML/CSS/JS
        
             | wiseowise wrote:
             | Because at the time of WebAssembly announcement all the
             | doomsayers were screaming at the top of their lungs: "JS/TS
             | are dead! _Serious_ developer would never choose it!
             | Finally I can have my  <x> in the browser!"
        
               | circuit10 wrote:
               | That isn't (currently) a goal of WebAssembly:
               | 
               | https://webassembly.org/docs/faq/
               | 
               | "Is WebAssembly trying to replace JavaScript?
               | 
               | No! WebAssembly is designed to be a complement to, not
               | replacement of, JavaScript. While WebAssembly will, over
               | time, allow many languages to be compiled to the Web,
               | JavaScript has an incredible amount of momentum and will
               | remain the single, privileged (as described above)
               | dynamic language of the Web."
        
               | wiseowise wrote:
               | Good luck convincing JS haters.
        
           | tegmentum wrote:
           | It's getting there. There have been a lot of developments in
           | WebAssembly in the past few years. I've felt the same pain so
           | I just released a library to make it easier to run it in Java
           | 
           | https://news.ycombinator.com/item?id=47393000
        
       | shevy-java wrote:
       | WebAssembly will reach a breakthrough in the same year as GNU
       | Hurd will dominate, together with the Desktop-Linux-of-the-year.
        
         | sts153 wrote:
         | 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.
        
       | mcintyre1994 wrote:
       | Love all the tools mentioned in the comments, Pyodide is a fun
       | tool. I built https://pyground.vercel.app with it a few years
       | ago, as a quick way to run Python on a CSV/JSON file locally in
       | the browser. For a while Python/Matplotlib was what I was most
       | comfortable writing quick and simple analysis scripts with, and
       | this was my go to for one-off data analysis work. You can drag-
       | drop a file in, then some 'clever' code makes it available as
       | `data` in the Python script so you don't have to write any
       | parsing code yourself.
       | 
       | Now I'd probably just get Claude Code to write something locally,
       | but there might be some value in a version of pyground that can
       | use an LLM to write the Python code for you (and give it the data
       | shape) but keeps the local execution setup the same.
        
       | screamingninja wrote:
       | https://marimo.app/
       | 
       | A reactive notebook for Python that runs in browser, powered by
       | Pyodide. I have been using it extensively for teaching Python to
       | non-STEM students that do not need the added friction of
       | navigating the CLI or filesystem hierarchy.
        
         | akshayka wrote:
         | Hello from the original creator of marimo. Do you have teaching
         | materials to share? I would love to see how one might teach
         | Python with a reactive notebook
        
           | screamingninja wrote:
           | sending you an email!
        
           | luke-stanley wrote:
           | Hey akshayka, I'm not that teacher, but I am a fan, and I
           | notice that marimo sharing would be easier if export and
           | import from normal boring Spyder/Jupyter percent formatted
           | .py files worked by default, instead of indented `@app.cell`
           | decorated functions, and same for for plain Markdown, where
           | right now it has "{.python.marimo}" code blocks with triple
           | backticks, that would normally just say Python. Import and
           | export that used more normal metadata (like comments) would
           | be amazing and would make pointing people to marimo easier.
           | Any chance of this?
        
       | Archit3ch wrote:
       | Hoping for a Julia version.
        
       | ipunchghosts wrote:
       | REMUS RLF reader runs pyodide to parse underwater drone mission
       | files in the browser
       | 
       | https://isaacgerg.github.io/remus-rlf-reader/webapp/
        
       | ndr wrote:
       | related self plug: I built https://codeglf.com on Pyodide, a
       | weekly Python code golf site where every submission runs locally
       | in the browser.
       | 
       | WebAssembly's isolation means you get sandboxing for free without
       | any server infrastructure. Of course users could cheat and submit
       | code that doesn't actually pass the tests, but so far everybody
       | has been friendly and I haven't needed to validate results
       | server-side. Hopefully sharing the link here doesn't make that
       | worse!
        
       | strujillo wrote:
       | It's impressive how mature Pyodide has become -- running Python
       | scientific tools in the browser opens up a lot of possibilities.
       | 
       | I've been working on a small (~800-line) Python system that uses
       | sparse regression to discover physical laws from raw data. It was
       | able to estimate the Sun's rotation (~25.1 days vs 27 days
       | actual) and found a temperature ~ velocity^3.40 relationship in
       | solar wind data.
       | 
       | Having this kind of lightweight stack in the browser could make
       | exploratory science much more accessible.
        
       ___________________________________________________________________
       (page generated 2026-03-17 23:01 UTC)