Announcing marimo AI:

Get started

marimo as a Jupyter alternative

marimo reimagines Python notebooks with reactive execution, git-friendly storage, and Python-first design. It might be the Jupyter alternative you've been looking for.

marimo as a Jupyter alternative

marimo offers a modern notebook experience for Python. It is different than Jupyter in a number of ways and it really represents a fundamentally different approach in how a Python notebook operates.

marimo does Python

Jupyter notebooks were originally designed to be language agnostic. marimo is not. The whole notebook revolves around Python users who want to be productive while working with data. marimo does offer first class support for SQL-backends, but it is assumed that you are a Python user. That means that marimo is also able to specialize and offer bespoke features for the Python ecosystem.

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 like intelligent variable tracking and automatic dependency resolution between cells.

Notebooks as Python files

marimo stores the notebook in a normal 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 from the Python ecosystem. Just to name a few benefits:

  • marimo notebooks can run from the command-line as normal Python scripts.
  • marimo notebooks can contain their dependencies as metadata, making them fully reproducible and easy to sandbox.
  • Code formatting tools like ruff, Black, flake8 and isort work seamlessly on marimo notebooks.
  • You can import Python functions from a marimo notebook and re-use them across your larger Python project.
  • marimo can detect unit tests and will apply 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 is super nice!

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 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.