How cglacet/pyodide works
Pyodide runs Python and scientific packages in a browser through WebAssembly, exposing Python execution and JavaScript/Web API interoperability. The main workflow is browser code loading the runtime, submitting Python, and receiving results through the JavaScript-facing conversion layer. Separate capabilities include loading built-in packages, installing pure-Python wheels with micropip, and rendering Matplotlib figures to HTML canvas. The tree and excerpts support the bootstrap and conversion links shown; unsampled runtime internals are represented only where documented or named by the tree.
Main entry points: main.c Python WebAssembly · jsproxy.c JavaScript proxies · pyodide.js Runtime loader · runpython.c Python execution
Components 18
Runtime bootstrap
- Runtime loader
src/pyodide.js - Python WebAssembly
src/main.c - Worker entry
src/webworker.js - Python execution
src/type_conversion/runpython.c - Python API
src/pyodide.py
Python JavaScript bridge
- JavaScript value handles
src/type_conversion/hiwire.c - JS to Python
src/type_conversion/js2python.c - Python to JS
src/type_conversion/python2js.c - JavaScript proxies
src/type_conversion/jsproxy.c - Python proxies
src/type_conversion/pyproxy.c
Package access
- Built-in package loader
src/pyodide.js - Wheel installer
packages/micropip/micropip/micropip.py
Browser capabilities
- Canvas plotting backend
packages/matplotlib/src/wasm_backend.py
Other components
- Browser caller
- Browser Web APIs
- Package catalog
- Wheel sources
- HTML canvas
Connections 23
- Browser caller → Runtime loader: loads runtime
- Runtime loader → Python WebAssembly: loads WebAssembly
- Browser caller → Python execution: submits Python
- Runtime loader → Python execution: exposes execution
- Worker entry → Runtime loader: imports loader
- Worker entry → Python execution: dispatches script
- Python WebAssembly → JavaScript value handles: initializes handles
- Python WebAssembly → JS to Python: initializes conversion
- Python WebAssembly → Python to JS: initializes conversion
- Python WebAssembly → JavaScript proxies: initializes proxies
- Python WebAssembly → Python proxies: initializes proxies
- JavaScript proxies → JavaScript value handles: uses handles
- JavaScript proxies → Python to JS: converts arguments
- JavaScript proxies → JS to Python: converts results
- Python API → Python execution: provides Python API
- Built-in package loader → Package catalog: reads metadata
- Built-in package loader → Python WebAssembly: loads packages
- Wheel installer → Package catalog: reads built-in metadata
- Wheel installer → Wheel sources: fetches wheels
- Wheel installer → Python WebAssembly: installs wheels
- JavaScript proxies → Browser Web APIs: accesses objects
- Canvas plotting backend → HTML canvas: renders figures
- Canvas plotting backend → Browser Web APIs: uses DOM