Interactive demonstrations of our research using marimo notebooks.
Live site: https://sciml.warwick.ac.uk
Notebooks are automatically deployed in one of two modes based on their dependencies:
- Run entirely in the browser using WebAssembly/Pyodide
- No server-side computation required
- Served as static HTML files
- Limited to pure Python packages available in Pyodide
- Run on the server with full Python environment
- Required for notebooks with native dependencies (JAX, PyTorch, watchdog, etc.)
- Each notebook runs as a separate marimo process
- Proxied through nginx with WebSocket support
- Add your notebook to
apps/(for WASM-compatible) ornotebooks/(for live) - Include dependencies in PEP 723 script metadata:
# /// script # requires-python = ">=3.12" # dependencies = [ # "marimo", # "numpy", # "matplotlib", # ] # ///
- Deploy via
./scripts/deploy-warwick.sh(requires 2FA)
The scripts/categorize_notebooks.py script determines deployment mode by checking for WASM-incompatible dependencies:
- Native extensions: jax, torch, tensorflow, watchdog, psutil, opencv-python
- Database drivers: psycopg2, mysqlclient
- Crypto libraries: cryptography, bcrypt
- And others (see script for full list)
Notebooks with any incompatible dependency are deployed as live notebooks.
# Run a notebook locally
marimo edit apps/my-notebook.py
# Test WASM compatibility check
python scripts/categorize_notebooks.py --offline
# Export to WASM HTML (for testing)
marimo export html-wasm apps/my-notebook.py -o output.html- Server: Deployed via
scripts/deploy.sh - WASM: Static files served from
/var/www/marimo-wasm/ - Live: systemd services with nginx reverse proxy
- Auth: Basic auth for live notebooks, WASM notebooks are public