marimo

Reactive Python notebooksOpen source

About marimo

marimo rethinks the Python notebook around a dataflow graph. Change a cell and everything that depends on it reruns, or gets marked stale. Notebooks are saved as plain .py files, so they diff cleanly in git, run as scripts and deploy as web apps. It's Apache-2.0 open source from Marimo Inc., which raised a $5M seed in 2024 and joined CoreWeave on 2025-10-30. As of 2026-10-25 it has 23,310 GitHub stars and the latest release is 0.25.2 (2026-10-20), plus a free hosted notebook service called molab.

The marimo interface

What it does

Jupyter made data work visual, but it has a few long-standing problems. First, hidden state: cells can run in any order, deleted variables linger in memory, and others can't reproduce the result. Second, the file format: .ipynb is JSON with outputs baked in, which is hard to diff or merge. Third, shipping: turning a notebook into a script, a scheduled job or an app usually means rewriting it. Creator Akshay Agrawal describes needing and resenting Jupyter in equal measure while doing research. The October 2025 post cites a study finding that over a third of 10 million Jupyter notebooks on GitHub fail to reproduce.

marimo starts from dataflow. It statically analyzes which variables each cell defines and reads, then builds a dependency graph. Run a cell and its dependents rerun automatically. Delete a cell and its variables are scrubbed from memory. For expensive notebooks, a lazy mode just marks affected cells stale instead of running them. Either way, the code on screen always matches the outputs.

The second design choice is pure Python on disk. A marimo notebook is a .py file that can be run with python notebook.py, imported as a module, tested with pytest and reviewed in git like any other code. The README pitches it as a replacement for jupyter, streamlit, jupytext, ipywidgets and papermill. That covers editing, widgets, format conversion, parameterized runs and app publishing in one tool.

Repo snapshot as of 2026-10-25: created 2023-08-15, Python with a React frontend, Apache-2.0, 23,310 stars, 1,353 forks, 601 open issues plus PRs. The current PyPI release, 0.25.2, requires Python 3.10 or newer.

On October 30, 2025, the marimo blog announced that the team was joining CoreWeave and said marimo will stay free, open source and permissively licensed.

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

marimo README

Key features

Reactive, reproducible execution. The dependency graph keeps code and outputs in sync, and deleting a cell cleans up after it. Package management is built in: dependencies can live inline in the file header, and marimo edit --sandbox opens the notebook in an isolated environment that rebuilds on any machine. Release 0.25.0 (September 24, 2026) reworked the sandbox lifecycle and added Pixi as an opt-in backend for Conda packages and non-Python runtimes. uv remains the default.

One file, many outputs. The same .py works as an interactive notebook, a read-only app via marimo run, an HTML or WebAssembly export, or a slide deck. 0.25.0 made WebAssembly exports portable. Built-in widgets (sliders, tables, dataframe editors) are wired through the graph, so there are no callbacks to write. SQL cells query dataframes and databases and return Python variables.

Working with AI. marimo pair connects Claude Code, Codex or OpenCode to a running notebook, and the editor's own assistant accepts the user's own API keys or a local model. In 2025 the team said marimo was among the first editors to implement the Agent Client Protocol. Another launch week at the end of September 2026 added two companions. marimo-lens (September 30) is a widget that lets a user mark a point or region on any output and leave a note. The agent receives the mark, the note, and the cell that produced the output along with its dependencies. marimo-studio (October 1) builds audience-specific views of a notebook, such as a lecture, an article or a dashboard. Marimo says every number traces back to its cell, and views can be prerendered as static files for GitHub Pages.

Hosted and self-hosted. molab is the free hosted notebook. Since June 1, 2026 it has run on CoreWeave in public preview: 4 CPUs and 32 GB of RAM per notebook by default, an optional NVIDIA RTX Pro 6000 Blackwell GPU with 96 GB of VRAM, and 12-hour sessions. It's free "as long as usage is reasonable," and notebooks are public but unlisted by default, like GitHub Gists. Teams that want their own infrastructure can use marimohub, open-sourced under Apache-2.0 on October 2, 2026. Storage, compute and identity are all pluggable. Storage options include S3, GCS, Azure, R2 and CoreWeave's object storage. Compute can be Kubernetes, Docker, Modal, E2B or CoreWeave Sandboxes. Identity can come from OIDC, Google IAP or Cloudflare Access. Version history, app publishing and scheduled jobs are built in.

Recent releases. The latest release, 0.25.2 (2026-10-20), is mostly fixes, plus Python 3.15 support and GeoJSON and GeoParquet downloads for geodataframes. It includes one breaking change: marimo no longer forces matplotlib, Plotly, Bokeh and HoloViews into dark mode when the notebook is dark, so dark plot themes now have to be set explicitly in code.

How it compares

Jupyter Notebook (jupyter/notebook, BSD-3-Clause, 13,458 stars on 2026-10-25) and JupyterLab (BSD-3-Clause, 15,372 stars) have kernels for dozens of languages and plenty of hosting and tutorials. marimo gives up every language but Python in exchange for no hidden state, plain-Python files and built-in app publishing. A 2025 Marimo post said its 16.6k stars were "more than Jupyter." For switching, the README documents marimo convert for .ipynb files.

Streamlit (Apache-2.0, 46,101 stars) is the popular way to build Python data apps, and it reruns the whole script on each interaction. marimo overlaps on the app side, but it's a notebook first; the app is just another way to run the same file, and only affected cells rerun.

jupytext handles notebook-to-script conversion, and papermill handles parameterized batch runs. marimo bakes both into the file format: the notebook already is a script, and the README notes script runs can be parameterized with CLI args.

All of these projects are free as open source.

Who uses it, and who it's for

A few public numbers give a sense of scale. pypistats shows 2,450,932 downloads of the marimo package in the last month (as of 2026-10-25). That includes CI runs and mirrors, so it isn't a user count. The GitHub API (2026-10-25) shows 363 linked contributors, or 374 entries with anonymous emails included. In a 2025-10-30 blog post the company itself reported more than 1M monthly downloads, 16.6k stars, nearly 200 contributors, 3k+ Discord members, a team grown from two to eight, and coverage in Nature.

On the team: according to the 2024-11-19 seed announcement, Akshay Agrawal helped grow an open-source optimization library to a million monthly downloads as a Stanford PhD student, and before that worked on TensorFlow at Google Brain, while Myles Scolnick was an engineer at Palantir and CloudKitchens. The $5M seed was led by Anthony Goldbloom and Shyam Mani of AIX Ventures, with angels including Jeff Dean, Clem Delangue, Wes McKinney and Charlie Marsh.

Who it's for

Analysts, ML practitioners and researchers who are tired of Jupyter's hidden state. Engineering teams that want notebooks in code review, under test and running as scripts in CI. Anyone who needs to turn an analysis into a small interactive app or a slide deck for colleagues. Teachers, since the WebAssembly build runs in a browser with nothing to install. And people writing analysis with Claude Code, Codex or OpenCode, since marimo pair lets the agent work inside a live notebook.

Not for

Teams deep in the Jupyter ecosystem, with kernel extensions, R or Julia kernels, or workflows built around .ipynb. marimo runs Python only, though it has SQL cells and, since 0.25, can reach R from Python through Pixi sandboxes. People who habitually reassign the same global across many cells will need to change that habit, because marimo forbids it. And teams that need a multi-user notebook platform with permissions: single-node marimo doesn't do that, so the options are self-hosting the new marimohub or another platform.

Getting started

Install and take the tour. The README's one-liner is pip install marimo && marimo tutorial intro. uv and conda work too, or skip installing entirely and open a notebook on molab.

Create or open a notebook with marimo edit notebook.py, which launches the editor in the browser. Add --sandbox to build an isolated environment from the file's inline dependencies (uv by default, Pixi optional since 0.25).

Coming from Jupyter, run marimo convert your_notebook.ipynb > your_notebook.py, or use the web converter on marimo.io. The usual follow-up errors are variables defined in more than one cell. Rename or merge them; that rule is how marimo prevents hidden state.

To ship, run python notebook.py as a plain script, or marimo run notebook.py for a read-only app, or export to HTML or WebAssembly for static hosting. The README also lists VS Code and Cursor extensions and a PyCharm plugin for IDE users.

Before deploying, don't expose edit mode with --host 0.0.0.0 on a public or shared network. Put it behind a self-managed authenticating proxy and stay on the latest release.

Pricing & license

marimo is Apache-2.0, so commercial use and redistribution are allowed, and it includes a patent grant. When the team joined CoreWeave on October 30, 2025, it wrote that marimo "is, and always will be, free, open-source, and permissively licensed." molab is currently free, GPUs included, "as long as usage is reasonable" (June 1, 2026 post). The self-hosted marimohub is Apache-2.0 as well. The site navigation has an enterprise section.

Risks & limits

On security, the repo has published 2 advisories of its own, and the GitHub Advisory Database lists 3 reviewed advisories for marimo (as of 2026-10-25).

CVE-2026-39987 (GHSA-2679-6mx9-h9xc, published 2026-04-09). GitHub rates it critical, with a CVSS 3.1 score of 9.8 and a CVSS 4.0 score of 9.3. The advisory describes a pre-auth remote code execution bug. The terminal WebSocket at /terminal/ws checks only the session mode and platform support before accepting a connection, skipping the validate_auth() call that other WebSocket endpoints such as /ws make. That hands an unauthenticated attacker a full PTY shell. The advisory body's "Affected Versions" section says 0.20.4 and earlier. The same advisory's structured range says everything before 0.23.0, and NVD's description also says before 0.23.0. The fix is 0.23.0. NVD (status Analyzed) gives its own CVSS 3.1 score of 9.8 CRITICAL and lists GitHub's CVSS 4.0 score of 9.3 CRITICAL. CISA added it to the Known Exploited Vulnerabilities catalog on 2026-04-23, with federal remediation due by 2026-05-07. Per the 0.23.0 release notes, the affected setups were an editable notebook deployed to the internet relying only on marimo's built-in auth, or edit mode run with --host 0.0.0.0 on a shared network. Setups behind a separate auth proxy, local-only use, run mode, WebAssembly notebooks and molab were not affected.

CVE-2026-54386 (GHSA-8m59-7xv8-735h, published 2026-06-18). GitHub rates it medium, with a CVSS 3.1 score of 6.1 and a CVSS 4.0 score of 5.1. The advisory describes a reflected XSS on the notebook page in versions before 0.23.9. Single quotes in the file query parameter aren't escaped before being reflected into an inline JavaScript string. A crafted link starting with __new__ bypasses the 404 check, and the injected script runs in the victim's marimo origin without CSP restrictions. The fix is 0.23.9. NVD lists it as Deferred and shows only the CNA's (VulnCheck) scores, 6.1 MEDIUM under CVSS 3.1 and 5.1 MEDIUM under 4.0, with no NVD score of its own.

GHSA-xjv7-6w92-42r7 (no CVE, published 2025-10-02). GitHub rates it medium, with no CVSS 3.1 score and a CVSS 4.0 score of 6.9. The advisory says /mpl/<port>/<route> works as an unauthenticated proxy on default installs, letting outside attackers reach any local port. The reporters' scans of public marimo servers turned up exposed services such as old CUPS instances and phpMyAdmin. Affected versions are 0.9.20 and later, up to but not including 0.16.4, which has the fix. With no CVE, there's no NVD entry.

Other limits: Python only. Redefining a variable across cells is forbidden, so migrated notebooks need edits. 0.25.2 dropped automatic dark theming for charts, which may change how existing notebooks look.

Our verdict

What sets marimo apart: it runs cells through a dependency graph, and deleting a cell scrubs its variables; notebooks are plain Python files that go into git, run under pytest, run as scripts or deploy as apps; it exports to WebAssembly and connects coding agents through marimo pair; and it is Apache-2.0. Its limits: Python only; a variable can't be defined in more than one cell; and edit mode has had a pre-auth remote code execution bug (fixed in 0.23.0) and a reflected XSS (fixed in 0.23.9).

Why it stands out

marimo is a Python notebook that fixes the problems notebooks have had for a decade. Cells run reactively, the file is plain Python you can commit and diff, and the same notebook can run as a script or be served as an interactive app.

Akshay Agrawal and Myles Scolnick came from research and data infrastructure, and it shows in the seriousness about reproducibility. The WebAssembly build means a notebook can also run entirely in the browser.

Cells run reactively, notebooks are plain Python files that diff cleanly, and the same file runs as a script, as an app, or in the browser through WebAssembly.

Sources

Official

  1. marimo-team/marimo (GitHub)GitHub · Accessed Oct 26, 2026
  2. marimo READMEGitHub · Accessed Oct 26, 2026
  3. marimo LICENSE (Apache-2.0)GitHub · Accessed Oct 26, 2026
  4. marimo-team/marimo ReleasesGitHub · Accessed Oct 26, 2026
  5. Release 0.25.2 · marimo-team/marimoGitHub
  6. Release 0.25.0 · marimo-team/marimoGitHub
  7. marimo 0.24.2 ReleaseGitHub
  8. Release 0.23.0 · marimo-team/marimoGitHub

Updates & reading