Seamlessly integrate marimo notebooks into JupyterLab and JupyterHub
marimo-jupyter-extension brings the power of marimo reactive notebooks to your existing Jupyter infrastructure. Launch marimo directly from JupyterLab's launcher, manage running sessions, and convert Jupyter notebooks to marimo format.
Highlights
- 🚀 Launcher Integration - marimo appears in the JupyterLab launcher with its own icon
- 🍃 First-Class Marimo Notebook Support - Double-click
_mo.pyfiles to open directly in marimo - 📊 Sidebar Panel - Monitor server status, view running sessions, and quick actions
- 🐍 Venv Selection - Choose or change a notebook's Python environment (with PEP 723 metadata)
- 📁 Context Menus - Right-click
.pyfiles to edit with marimo,.ipynbfiles to convert - 🏢 JupyterHub Compatible - Works with existing authenticators and spawners
- 🔒 Secure - Token-based authentication between proxy and marimo
- 📦 Sandbox Mode - Run marimo in isolated environments with uvx
Quick Start
uv pip install 'marimo[sandbox]>=0.23.14' marimo-jupyter-extension
Launch JupyterLab and click the marimo icon in the launcher, or use the sidebar panel.
Features
Launcher & Sidebar
Create new marimo notebooks from the launcher. The sidebar shows server status, clickable running sessions with separate shutdown buttons, and quick actions.
Joy Division-style plot from pulsar CP 1919 (PSR B1919+21) made with wigglystuff
Environment Selection
When creating a new notebook, select from available Python environments. The extension discovers Jupyter kernel specs and embeds the venv path using PEP 723 script metadata. To switch an existing notebook, right-click its .py file and choose Change Python Environment. If the notebook is running, the extension asks before restarting its session.
File Type Handling
| File Type | Double-click Behavior | "Open With" Menu |
|---|---|---|
_mo.py |
Opens in marimo | marimo available |
.py |
Opens in standard editor | marimo available |
Context Menu Actions
- Edit with marimo: Right-click any
.pyor_mo.pyfile to open it in the marimo editor - Convert to marimo: Right-click any
.ipynbfile to convert it to marimo format
Tab Restoration
Saved marimo notebooks and live unsaved notebooks are reopened when the JupyterLab page reloads. Unsaved notebooks reconnect to their existing marimo session. If that session has ended, the stale tab is discarded.
Installation
See Installation Guide for detailed setup instructions.
Single Environment
uv pip install 'marimo[sandbox]>=0.23.14' marimo-jupyter-extension
Multiple Environments (JupyterHub)
| Package | Install Location | Why |
|---|---|---|
marimo |
User's environment | Access user's packages |
marimo-jupyter-extension |
Jupyter's environment | Jupyter must import it |
Configuration
Configure in jupyterhub_config.py:
# Explicit marimo path
c.MarimoProxyConfig.marimo_path = "/opt/bin/marimo"
# Or use uvx mode (sandbox)
c.MarimoProxyConfig.uvx_path = "/usr/local/bin/uvx"
# Startup timeout (default: 60s)
c.MarimoProxyConfig.timeout = 120
# Enable marimo debug logging for spawn troubleshooting
c.MarimoProxyConfig.debug = True
# Watch files for external edits (Claude Code, Cursor, vim, etc.)
c.MarimoProxyConfig.watch = True
# Allowed CORS origins (default: same-origin only)
c.MarimoProxyConfig.allow_origins = ["*"]
# Suppress version-check network call on startup
c.MarimoProxyConfig.skip_update_check = True
# Shut down after N minutes of no browser connection
c.MarimoProxyConfig.idle_timeout = 30.0
# Keep sessions alive N seconds after websocket disconnect
c.MarimoProxyConfig.session_ttl = 300
See Configuration Guide, Troubleshooting Guide, and JupyterHub Deployment for more details.
Migrating from jupyter-marimo-proxy
pip uninstall jupyter-marimo-proxy
pip install marimo-jupyter-extension
Configuration via c.MarimoProxyConfig in jupyterhub_config.py remains the same. This package is a drop-in replacement with additional features.
Attribution
This project is based on jupyter-marimo-proxy by Jiang Yio, which provided the original server proxy implementation.
Additional inspiration from b-data/jupyter-marimo-proxy.
This fork adds:
- Full JupyterLab extension with sidebar UI
- Venv/kernel selection with PEP 723 metadata
- Context menu integration for file operations
- Notebook conversion support
- Server restart capabilities
Troubleshooting
See Troubleshooting Guide for common issues.
| Issue | Solution |
|---|---|
| marimo icon missing | Install marimo-jupyter-extension in Jupyter's environment |
| marimo fails to launch | Ensure marimo is in PATH or configure MarimoProxyConfig.marimo_path |
| Modules not found | Install marimo in the same environment as your packages |
| Sandbox features not working | Upgrade to marimo[sandbox]>=0.23.14 |
Community
- marimo Discord - Chat with the community
- GitHub Issues - Report bugs or request features
- marimo Documentation - Learn about marimo notebooks
- Contributing Guidelines - Help improve marimo
License
Release files for marimo-jupyter-extension 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| marimo_jupyter_extension-0.4.0.tar.gz | 745.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| marimo_jupyter_extension-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:830.9 kB
Release files / marimo_jupyter_extension-0.4.0.tar.gz
| Download URL | marimo_jupyter_extension-0.4.0.tar.gz |
|---|---|
| Size | 745.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9828a398a6619c410b62b5f29c7ea7f07b4dda6d8e1ac0759f729200161088da
|
|
BLAKE2b-256 checksum How to use checksums |
ac5e9c4480c82588fc45c3bcd1563637eeaac30331d094bb7f37578b5aa9d9b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.
Transparency logRelease files / marimo_jupyter_extension-0.4.0-py3-none-any.whl
| Download URL | marimo_jupyter_extension-0.4.0-py3-none-any.whl |
|---|---|
| Size | 85.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1ea2fd682a11b68a6b9c31a7bdfff613921c0a5dee1afef24073c39111838f58
|
|
BLAKE2b-256 checksum How to use checksums |
b52bdeeaba97cec602531ca5890989ae3f3ca750134be0c8383d8da7c0f04799
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.
Transparency log