ScriptsMay 30, 2026·3 min read

Pyodide — Python Runtime for the Browser via WebAssembly

Run CPython and scientific Python packages directly in the browser with full NumPy, pandas, and scikit-learn support.

Agent ready

Ready-to-run agent install

This asset can be installed after the agent chooses its runtime, checks the plan, and runs the matching command.

Native · 98/100Policy: allow
Agent surface
Any MCP/CLI agent
Kind
Skill
Install
Single
Trust
Trust: Established
Entrypoint
Pyodide Overview
Direct install command
npx -y tokrepo@latest install b83b6852-5c02-11f1-9bc6-00163e2b0d79 --target codex

Run after dry-run confirms the install plan.

Introduction

Pyodide is the CPython interpreter compiled to WebAssembly using Emscripten, allowing Python code to run natively in web browsers and Node.js. It ships with over 100 pre-built scientific Python packages and provides seamless interoperability between Python and JavaScript.

What Pyodide Does

  • Runs the full CPython interpreter in the browser via WebAssembly
  • Includes pre-compiled packages like NumPy, pandas, Matplotlib, scikit-learn, and SciPy
  • Enables bidirectional data exchange between Python objects and JavaScript values
  • Installs pure Python packages from PyPI at runtime using micropip
  • Provides a foreign function interface so Python can call JavaScript APIs and vice versa

Architecture Overview

Pyodide compiles CPython and its C extension modules to WebAssembly using Emscripten. The resulting WASM binary runs inside the browser's sandboxed runtime. A JavaScript-to-Python bridge handles type conversion: Python dicts become JS objects, NumPy arrays share memory with TypedArrays via zero-copy transfers. The virtual filesystem emulates POSIX I/O, and a custom package loader fetches pre-built WASM wheels from a CDN or loads pure Python wheels from PyPI using micropip.

Self-Hosting & Configuration

  • Load from the official CDN or self-host the distribution files on your own server
  • Use loadPyodide() to initialize the runtime; configuration options set the index URL and environment
  • Install additional packages at runtime with await pyodide.loadPackage("package-name")
  • Use micropip for pure Python packages not in the pre-built set
  • Configure the virtual filesystem for persistent storage via IndexedDB or in-memory FS

Key Features

  • Full CPython compatibility including C extension modules compiled to WASM
  • Over 100 scientific packages pre-built and ready to load
  • Zero-copy sharing of array data between Python (NumPy) and JavaScript (TypedArray)
  • Works in Web Workers for background computation without blocking the UI
  • micropip enables runtime installation of any pure Python package from PyPI

Comparison with Similar Tools

  • RustPython — a Rust reimplementation targeting WASM; Pyodide runs the real CPython with full C extension support
  • Brython — transpiles Python to JavaScript; Pyodide runs actual CPython bytecode and supports C extensions
  • Skulpt — interprets Python in JS; limited to pure Python with no NumPy/pandas support
  • Emscripten — the compiler toolchain Pyodide uses; Pyodide adds the Python ecosystem on top
  • JupyterLite — a browser-based Jupyter built on Pyodide; Pyodide is the underlying runtime

FAQ

Q: Can I use pandas and NumPy in the browser? A: Yes. Both are pre-compiled to WASM and load in seconds. Most of the scientific Python stack is available.

Q: How large is the initial download? A: The core runtime is about 12 MB. Additional packages add to the total but are loaded on demand and cached.

Q: Can Python code access the DOM? A: Yes. Pyodide provides JavaScript proxy objects that let Python call browser APIs like document.querySelector.

Q: Is it suitable for production use? A: Yes, for appropriate use cases like interactive notebooks, data exploration tools, and educational platforms. Heavy computation should use Web Workers.

Sources

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets