marimo
A reactive Python notebook that's reproducible, git-friendly, and deployable as scripts or apps.
Repository Health
Technical Analysis
marimo is an open-source reactive Python notebook: run a cell or interact with a UI element and it automatically re-runs the dependent cells (or marks them stale), keeping code and outputs consistent with no hidden state. Notebooks are stored as pure Python files with first-class SQL support, so they are git-friendly, executable as scripts, and deployable as interactive web apps.
Designed as a batteries-included replacement for Jupyter, Streamlit, ipywidgets, papermill, and jupytext, marimo pairs a reactive Python runtime with a modern web frontend. It offers built-in interactivity (sliders, tables, plots), data tooling for dataframes and SQL, package management, and AI-native editor features.
What You Get
- A reactive runtime that reruns dependent cells automatically and eliminates hidden state
- Notebooks stored as pure Python (.py) files that are git-friendly and executable as scripts
- Built-in interactive UI elements (sliders, tables, plots, forms) bound to Python without callbacks
- First-class SQL support for querying dataframes, databases, and warehouses
- One-command deployment of notebooks as interactive web apps
Common Use Cases
- Building reproducible data-science and analysis notebooks without hidden execution state
- Creating and sharing interactive data apps and dashboards from a single Python file
- Running notebooks as scripts or automated pipelines in CI and production
Under The Hood
Architecture - marimo is split into a Python backend (the marimo package) and a TypeScript/React frontend (frontend/, built via pnpm/turbo). The backend models a notebook as a directed acyclic graph of cells: it statically analyzes each cell’s variable definitions and references to build a dependency graph, then a reactive kernel reruns exactly the downstream cells affected by a change. A Starlette + uvicorn web server, communicating over WebSockets, connects the kernel to the browser UI; notebooks serialize to plain .py files. The marimo._cli.cli:main entrypoint exposes edit, run, and related commands.
Tech Stack - Python 3 with click (CLI), Starlette and uvicorn (web server), websockets, jedi (completion), markdown/pymdown-extensions/pygments (rendering), tomlkit and pyyaml (config/frontmatter), narwhals (dataframe abstraction), and optional extras for SQL (duckdb, polars, sqlglot) and sandboxed kernels (pyzmq). The frontend is a pnpm workspace of TypeScript/React packages bundled with turbo.
Code Quality - The repository is mature and well-organized, with a dedicated tests/ suite, CODEOWNERS, contribution and governance docs, a Makefile, and codecov integration. Dependencies are deliberately kept minimal with carefully documented version bounds to avoid clashing with user environments. Development is very active with a large contributor base.
API Design - marimo prioritizes ergonomics: cells are ordinary Python, UI elements bind to values without callbacks, and the reactive model removes manual re-run bookkeeping. The CLI is small and discoverable (edit/run), documentation is extensive (docs.marimo.io, examples, gallery), and SQL and dataframe support are first-class, keeping boilerplate low for data work.