marimo

A reactive Python notebook that's reproducible, git-friendly, and deployable as scripts or apps.

Tool
PyPI
v0.24.0
22,393stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
90/100Excellent
Development Activity100
Maintenance100
Community68
Maturity52
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
85/100Excellent
Architecture90
Code Quality88
Innovation92
Learning Curve70

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.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search