Jupyter vs marimo: Which Python Notebook?
Jupyter or marimo? One keeps notebooks as JSON files, the other as reactive Python scripts. Compared on execution, git, apps, install, and when to pick each.
Choose Jupyter for the ecosystem and for sharing notebooks that people already know how to open; choose marimo when you want notebooks that stay consistent, diff cleanly in git and can run as scripts or apps. They solve the same job, exploratory computing in cells, with different guarantees.
At a glance
| Jupyter (JupyterLab / Notebook) | marimo | |
|---|---|---|
| Execution | Cells run in the order you run them | Reactive: dependent cells re-run automatically |
| File format | .ipynb (a JSON notebook format) | Plain Python .py |
| Hidden state | Possible, since cell order and deleted cells matter | Designed out: deleting a cell removes its variables |
| Git diffs | Noisy; outputs are stored in the file | Reads like code |
| Run as a script | Needs conversion or tooling | python your_notebook.py |
| Run as an app | Needs extra tools | marimo run your_notebook.py |
| Languages | Many kernels (IPython, IRkernel, IJulia and others) | Python, with SQL cells |
| Maturity/ecosystem | Long established, very large | Newer, smaller |
Jupyter
Project Jupyter is an umbrella for tools and standards for interactive computing with notebooks: shareable documents that combine code, plain-language descriptions, data and visualisations. There are two main editing applications. Jupyter Notebook is the simpler, lightweight interface; JupyterLab is the fuller interface, with tabbed multi-notebook editing and a customisable layout. Notebooks run on kernels, which is how Jupyter supports several languages, including IPython for Python, IRkernel for R and IJulia for Julia.
pip install jupyterlab
jupyter lab
# or the classic interface
pip install notebook
jupyter notebook
Its strengths are familiarity and reach: most tutorials, courses and data-science teams already use it, and many tools open .ipynb files directly. Its weakness is the one marimo was built around. Cells can be run in any order, so what’s on screen may not match what a fresh top-to-bottom run produces.
marimo
marimo describes itself as an open-source reactive Python notebook.
- Reactive execution. In marimo’s words, run a cell and it automatically runs the cells that reference its variables. Execution follows variable references rather than cell position. For expensive notebooks, it can instead mark dependent cells as stale.
- No hidden state. Delete a cell and marimo scrubs its variables from program memory.
- Pure Python files. Every notebook is stored as a
.pyfile, so it is git-friendly. - Scripts and apps.
python your_notebook.pyruns it as a script, andmarimo run your_notebook.pyserves it as a web app, with the source code hidden from the browser by default. - SQL. Notebooks can include SQL cells that run against dataframes, databases and CSVs, returning a Python dataframe, and the notebook stays pure Python.
pip install marimo && marimo tutorial intro
marimo edit # create or edit notebooks
marimo run your_notebook.py # run as a web app
marimo convert your_notebook.ipynb > your_notebook.py # from Jupyter
With uv, uv add marimo && uv run marimo tutorial intro does the same without activating an environment. Installing marimo[recommended] adds extras such as SQL cells and AI completion.
The practical differences
Reproducibility. The classic notebook failure is a result that depends on a cell you deleted or ran out of order. marimo removes that class of bug by tying execution to variable dependencies. The trade-off is a rule you have to follow: each variable should be defined in one place, because the order of execution comes from references, not position.
Version control. An .ipynb file is a JSON document that can also hold outputs, so reviewing a change usually means filtering the noise. A marimo notebook is Python, so a pull request reads like any other code change. Teams that review notebooks in pull requests feel this most.
Sharing. Anyone with Jupyter can open an .ipynb file, and hosted tools render it. marimo’s apps and scripts are better for handing someone a working tool rather than an exploration.
Ecosystem. Jupyter’s extensions, kernels and integrations are far broader. If a workflow depends on a Jupyter-specific tool, check that it works before moving.
Which should you pick?
- Learning data science from courses and tutorials: Jupyter, because that is what the material uses.
- Existing team and notebooks: stay on Jupyter; try marimo for one new project.
- Notebooks reviewed in git, or that must always be reproducible: marimo.
- Turning an analysis into a small shareable app: marimo’s
runmode. - Using R or Julia in the same environment: Jupyter’s kernels.
- Not sure: install both. Both are a
pip installaway, andmarimo convertlets you bring an existing notebook across to compare.
For the tools these notebooks usually sit on top of, see Polars vs Pandas and Matplotlib vs Seaborn vs Plotly, and for the editor side, the best Python IDEs.
Frequently Asked Questions
What is the difference between Jupyter and marimo?
Jupyter notebooks run cells in whatever order you choose and are stored as .ipynb files. marimo notebooks are reactive: running a cell automatically runs the cells that depend on its variables, and each notebook is stored as a plain Python file.
What is a reactive notebook?
One where cells are linked by the variables they use. In marimo, running a cell makes it automatically run the cells that reference its variables, and deleting a cell removes its variables from memory, so the outputs on screen stay consistent with the code.
Is marimo a replacement for Jupyter?
It can be for new work, and marimo can convert a notebook with marimo convert. Jupyter has a much larger ecosystem of kernels, extensions and existing notebooks, so many teams run both.
Does marimo work with git?
Yes, by design. marimo says every notebook is stored as pure Python, so diffs read like code. Jupyter’s .ipynb format is a JSON document that also holds outputs, which is why diffs are noisier.
How do I install Jupyter and marimo?
Jupyter: pip install jupyterlab, then jupyter lab (or pip install notebook and jupyter notebook for the classic interface). marimo: pip install marimo, then marimo edit. With uv, uv add marimo and uv run marimo edit.
Can marimo notebooks be run as apps?
Yes. marimo run your_notebook.py serves the notebook as a web app. By default the Python source code is not sent to the browser. A marimo notebook can also be run as a plain script with python your_notebook.py.