Pyodide: a Python distribution based on WebAssembly

(github.com)

23 points | by tosh 3 days ago

6 comments

  • simonw 21 minutes ago
    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.

  • devsda 21 minutes 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.

    1. https://jupyter.org/try-jupyter/lab/

  • QuadmasterXLII 28 minutes ago
    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
  • jacob019 1 hour ago
    Anyone using it with nodejs to make a sandbox for code agents?
    • simonw 19 minutes ago
      I've done some experiments along those lines with Pyodide in Deno: https://til.simonwillison.net/deno/pyodide-sandbox
    • b89kim 1 hour ago
      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 1 hour ago
      For that purpose I think most people are using bubblewrap or seatbelt/sandbox-exec with CPython.
  • yawnxyz 1 hour ago
    no but it works great in conjunction with observable and d3js for pretty interactives!
  • anarhackist 1 hour ago
    [dead]