Technical Overview
How Pyroom runs Python in the browser — runtime, architecture, supported APIs, and available packages.
Python Runtime
Pyroom uses Pyodide — a port of CPython to WebAssembly — to run Python entirely in the browser. No server executes your code. Everything runs locally in your browser tab via a Web Worker.
The Python standard library is fully available: math, random, datetime, json, re, collections, itertools, functools, io, sys, os.path, dataclasses, typing, enum, pathlib, and more.
- Threading (
threading,multiprocessing) is not supported — WebAssembly runs single-threaded - Real filesystem access is not available —
os.listdir, file open/write are sandboxed - Raw network sockets (
socket) are not available in the browser
Architecture
Pyroom uses a two-thread model to keep the UI responsive while Python executes. The Python runtime runs inside a Web Worker (separate thread), communicating with the main UI thread via messages and SharedArrayBuffer for synchronous calls (required for Tkinter and Turtle rendering).
On iOS/iPadOS, SharedArrayBuffer is unavailable, so Pyroom falls back to running Python on the main thread. Tkinter and Turtle still work but the UI may be less responsive during execution.
Cross-Origin Isolation headers (COOP + COEP) are required for SharedArrayBuffer access. Pyroom configures these on its server deployment.
Custom Tkinter Implementation
tkinter module. It ships a custom Python-level shim that maps Tkinter API calls to browser DOM operations.
The standard tkinter is built on top of Tcl/Tk — a desktop GUI toolkit that cannot run in a browser. Pyroom implements a tkinter compatibility layer consisting of two parts:
- Python shim — a
tkintermodule written in Python that intercepts widget creation and method calls, forwarding them viatkinter_shimJS bridge - JS renderer — a TypeScript module on the main thread that translates widget operations into real DOM elements rendered inside the Preview panel
Supported Tkinter API:
Tk(),mainloop(),title(),geometry()Button,Label,Entry,Frame,Text,CanvasListbox,Scrollbar,Scale,Checkbutton,RadiobuttonMenu,menu.add_command(),menu.add_cascade(),menu.add_separator()messagebox.showinfo(),showwarning(),showerror(),askyesno(),askokcancel()filedialog.askopenfilename(),filedialog.asksaveasfilename()(browser prompt-based).pack(),.grid(row, column, columnspan, rowspan),.place(x, y, width, height).config()/.configure(),.cget(),.bind(),.focus_set()StringVar,IntVar,BooleanVar,.get()/.set()after(ms, callback),after_cancel()
Known limitations compared to desktop Tkinter:
- Advanced widget styling, custom fonts, and bitmap images have limited support
messageboxuses browseralert/confirmdialogsfiledialoguses browserprompt— no real file picker- Canvas arc, image, and bitmap items are not implemented
- Toplevel (secondary windows) is not supported
Turtle Graphics
Similar to Tkinter, Pyroom replaces the standard turtle module with a custom implementation that renders drawing commands onto an SVG canvas in the Preview panel.
- All standard movement commands:
forward(),backward(),left(),right(),goto(),setx(),sety() - Pen control:
penup(),pendown(),pencolor(),pensize(),speed() - Fill operations:
begin_fill(),end_fill(),fillcolor() - Drawing helpers:
circle(),dot(),write(),clear(),reset() - Screen:
bgcolor(),title(),screensize()
Available Packages
Pyodide bundles a large set of scientific, data, and utility packages that can be imported directly. Packages are loaded on-demand when your code first imports them, or you can pre-load them via Libs settings in the playground.
Full list: pyodide.org → Packages in Pyodide
Scientific & Math
Data & DataFrames
Visualization
Machine Learning
Networking & HTTP
Parsing & Text
Graphs & Networks
Serialization
Installing unlisted packages
Packages not bundled with Pyodide can be installed at runtime using micropip (pure-Python packages from PyPI):
import micropip
await micropip.install("package-name")
Editor
Pyroom uses Monaco Editor — the same editor that powers VS Code — for code editing. It provides:
- Python syntax highlighting
- Autocomplete and IntelliSense for Python built-ins
- Undo / redo history
- Configurable font size and theme (dark / light / auto)