ScriptsApr 6, 2026·2 min read

Marimo — Reactive Python Notebook for AI Workflows

Next-generation Python notebook with reactive execution, built-in UI elements, and git-friendly .py files. No hidden state, no Jupyter pitfalls. Deploy as apps or slides. 10,000+ stars.

SC
Script Depot · Community
Quick Use

Use it first, then decide how deep to go

This block should tell both the user and the agent what to copy, install, and apply first.

pip install marimo
marimo edit  # Opens notebook editor in browser
# Notebooks are pure .py files — git-friendly!
import marimo as mo

# Reactive: change a slider, all dependent cells re-run
slider = mo.ui.slider(1, 100, value=50, label="Temperature")
slider

# Cells automatically re-execute when dependencies change
result = expensive_computation(slider.value)
mo.md(f"Result: **{result}**")

Intro

Marimo is a next-generation reactive Python notebook with 10,000+ GitHub stars that fixes the fundamental problems of Jupyter. Notebooks are stored as pure .py files (git-friendly), execution is reactive (change one cell, dependents auto-update), and there is no hidden state. Built-in UI elements like sliders, tables, and forms let you build interactive tools. Deploy notebooks as web apps, dashboards, or slides with one command. Best for data scientists and AI developers who want reproducible, shareable notebooks. Works with: any Python library. Setup time: under 1 minute.


Why Not Jupyter

Problem Jupyter Marimo
Hidden state Cells can run out of order Reactive DAG — always consistent
File format .ipynb JSON (merge conflicts) Pure .py files (git-friendly)
Reproducibility Depends on execution order Deterministic reactive execution
Interactivity Requires ipywidgets setup Built-in UI elements
Deployment Needs Voila/Streamlit marimo run notebook.py

Reactive Execution

When you change a cell, all cells that depend on it automatically re-run:

# Cell 1: Change this...
x = mo.ui.slider(1, 100, value=42)

# Cell 2: ...and this auto-updates
y = x.value ** 2
mo.md(f"x={x.value}, y={y}")

Built-in UI Elements

# Sliders, dropdowns, tables, forms, file upload...
dropdown = mo.ui.dropdown(["GPT-4", "Claude", "Llama"], label="Model")
checkbox = mo.ui.checkbox(True, label="Stream output")
text = mo.ui.text(placeholder="Enter prompt...")
table = mo.ui.table(dataframe)  # Interactive data table

Deploy as Apps

# Run as a web app
marimo run notebook.py

# Run as slides
marimo run notebook.py --mode slides

# Export to HTML
marimo export html notebook.py -o output.html

Git-Friendly

Notebooks are plain Python — diffs are readable:

- x = 42
+ x = 100

AI Integration

import marimo as mo
from anthropic import Anthropic

client = Anthropic()
prompt = mo.ui.text_area(placeholder="Ask anything...")

if prompt.value:
    response = client.messages.create(
        model="claude-sonnet-4-20250514",
        messages=[{"role": "user", "content": prompt.value}]
    )
    mo.md(response.content[0].text)

Key Stats

  • 10,000+ GitHub stars
  • Pure .py file format
  • Reactive execution (no hidden state)
  • 20+ built-in UI elements
  • Deploy as apps, dashboards, slides

FAQ

Q: What is Marimo? A: Marimo is a reactive Python notebook stored as .py files with built-in UI elements, no hidden state, and one-command deployment as web apps.

Q: Is Marimo free? A: Yes, fully open-source under Apache 2.0 license.

Q: Can I convert Jupyter notebooks to Marimo? A: Yes, run marimo convert notebook.ipynb to auto-convert.


🙏

Source & Thanks

Created by Marimo. Licensed under Apache 2.0.

marimo — ⭐ 10,000+

Thanks for finally fixing the notebook.

Discussion

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

Related Assets