marimo is an open-source Python notebook that fixes the two things that always bothered me about Jupyter: hidden state and version control. It is reactive, so when you change a cell every other cell that depends on it re-runs automatically, and it stores the whole notebook as a plain Python file instead of JSON, so it diffs cleanly in git and runs as a normal script or module.

What it is

A notebook is really a dependency graph of cells. marimo tracks that graph for you: no more running cells top-to-bottom in the right order, no more stale variables from a cell you deleted ten minutes ago. Delete a cell and its variables leave with it. The result is deterministic execution with no hidden state, which is exactly what you want when a notebook has to reproduce a result later.

  • Stored as .py: clean git diffs, importable as a module, runnable as a script.
  • Reactive: change a value or cell and every dependent cell updates on its own.
  • Interactive UI: sliders, dropdowns, tables and selectable plots wired straight to Python variables, no callback boilerplate.
  • SQL cells: query Pandas, Polars, DuckDB, Postgres and more inline.
  • Runs anywhere: as a server app via the CLI, or exported to WebAssembly so it runs entirely in the browser with no backend.

Why I care

The browser/WASM angle is the interesting one for a portfolio site: a marimo notebook can ship as a self-contained interactive page, closer to a Distill article than a static export. That is the bar I want for explaining ML work, a live thing you can poke rather than a screenshot. molab (marimo's hosted playground) makes that sharing one link.

Examples worth clicking

These run live in the browser via molab, no install:

References


Coming soon: I will embed my own marimo notebook here, an interactive MRI walkthrough (mri_tes), running live in the browser.