marimo as a Jupyter alternative
marimo reimagines Python notebooks with reactive execution, git-friendly storage, and Python-first design. It's most likely the Jupyter alternative you've been looking for.

marimo offers a modern notebook experience for Python, representing a fundamentally different approach to how a Python notebook operates.
Python-centric
Jupyter notebooks were originally designed to be language agnostic. marimo is not. The notebook revolves around Python users and enabling the best experience of working with data. marimo also offers first class SQL support for data science, but the assumption is that you are primarily a Python user.
This Python-first approach allows marimo to provide deeper integration with Python tooling like type checkers, linters, and formatters. The notebook environment understands Python semantics natively, enabling features such as intelligent variable tracking and automatic dependency resolution between cells.
Notebooks as Python files
marimo stores the notebook in a standard Python file while Jupyter stores everything in a JSON file. Python files have many benefits, mainly because itâs much easier to enjoy all the progress and benefits from the Python ecosystem:
- marimo notebooks run from the command-line as normal Python scripts.
- marimo notebooks contain dependencies as metadata, making them fully reproducible and easy to sandbox.
- Code formatting tools such as ruff, Black, flake8 and isort work seamlessly on marimo notebooks.
- Import Python functions from a marimo notebook and re-use them across your Python project.
- marimo detects unit tests and applies pytest to make sure everything works as expected.
This file format choice eliminates the friction that data scientists often experience when transitioning between notebook and script environments.
Git version control
One of the biggest pain points with Jupyter notebooks is version control. Rerunning a single cell in Jupyter will always cause a change in a .ipynb
file because the metadata needs to update to reflect the order in which the cells ran. JSON files with embedded output and metadata create noisy diffs that make it nearly impossible to track meaningful changes. By using Python files, marimo effectively removes this problem.
The clean file format also means you can use standard git hooks, pre-commit tools, and automated code quality checks on your notebooks without additional tooling or configuration.
Reactive execution model
Unlike Jupyterâs top-to-bottom execution model, marimo uses reactive execution. When you change a cell, marimo automatically re-runs all cells that depend on the modified variables. This design eliminates the common Jupyter problem of cells getting out of sync and producing inconsistent results.
The reactive model ensures your notebook state is always consistent, making it much easier to iterate on data analysis and maintain reproducible results. You donât need to remember to re-run dependent cells manually or restart the kernel to get a clean state.