A reactive Python notebook that's reproducible, git-friendly, and deployable as scripts or apps.
English | 简体中文
**marimo** is a reactive Python notebook: run a cell or interact with a UI element, and marimo automatically runs dependent cells (or marks them as stale), keeping code and outputs consistent. marimo notebooks are stored as pure Python, executable as scripts, and deployable as apps. **Highlights**. - 🚀 **batteries-included:** replaces `jupyter`, `streamlit`, `jupytext`, `ipywidgets`, `papermill`, and more - ⚡️ **reactive**: run a cell, and marimo reactively [runs all dependent cells](https://docs.marimo.io/guides/reactivity.html) or marks them as stale - 🖐️ **interactive:** [bind sliders, tables, plots, and more](https://docs.marimo.io/guides/interactivity.html) to Python — no callbacks required - 🔬 **reproducible:** [no hidden state](https://docs.marimo.io/guides/reactivity.html#no-hidden-state), deterministic execution, [built-in package management](https://docs.marimo.io/guides/editor_features/package_management.html) - 🏃 **executable:** [execute as a Python script](https://docs.marimo.io/guides/scripts.html), parametrized by CLI args - 🛜 **shareable**: [deploy as an interactive web app](https://docs.marimo.io/guides/apps.html) or [slides](https://docs.marimo.io/guides/apps.html#slides-layout), [run in the browser via WASM](https://docs.marimo.io/guides/wasm.html) - 🛢️ **designed for data**: query dataframes and databases [with SQL](https://docs.marimo.io/guides/working_with_data/sql.html), filter and search [dataframes](https://docs.marimo.io/guides/working_with_data/dataframes.html) - 🐍 **git-friendly:** notebooks are stored as `.py` files - ⌨️ **a modern editor**: [GitHub Copilot](https://docs.marimo.io/guides/editor_features/ai_completion.html#github-copilot), [AI assistants](https://docs.marimo.io/guides/editor_features/ai_completion.html#using-ollama), vim keybindings, variable explorer, and [more](https://docs.marimo.io/guides/editor_features/index.html) ```python pip install marimo && marimo tutorial intro ``` _Try marimo at [our online playground](https://marimo.app/l/c7h6pz), which runs entirely in the browser!_ _Jump to the [quickstart](#quickstart) for a primer on our CLI._ ## A reactive programming environment marimo guarantees your notebook code, outputs, and program state are consistent. This [solves many problems](https://docs.marimo.io/faq.html#faq-problems) associated with traditional notebooks like Jupyter. **A reactive programming environment.** Run a cell and marimo _reacts_ by automatically running the cells that reference its variables, eliminating the error-prone task of manually re-running cells. Delete a cell and marimo scrubs its variables from program memory, eliminating hidden state. **Compatible with expensive notebooks.** marimo lets you [configure the runtime to be lazy](https://docs.marimo.io/guides/configuration/runtime_configuration.html), marking affected cells as stale instead of automatically running them. This gives you guarantees on program state while preventing accidental execution of expensive cells. **Synchronized UI elements.** Interact with [UI elements](https://docs.marimo.io/guides/interactivity.html) like [sliders](https://docs.marimo.io/api/inputs/slider.html#slider), [dropdowns](https://docs.marimo.io/api/inputs/dropdown.html), [dataframe transformers](https://docs.marimo.io/api/inputs/dataframe.html), and [chat interfaces](https://docs.marimo.io/api/inputs/chat.html), and the cells that use them are automatically re-run with their latest values. **Performant runtime.** marimo runs only those cells that need to be run by statically analyzing your code. **Dynamic markdown and SQL.** Use markdown to tell dynamic stories that depend on Python data. Or build [SQL](https://docs.marimo.io/guides/working_with_data/sql.html) queries that depend on Python values and execute them against dataframes, databases, CSVs, Google Sheets, or anything else using our built-in SQL engine, which returns the result as a Python dataframe. Your notebooks are still pure Python, even if they use markdown or SQL. **Deterministic execution order.** Notebooks are executed in a deterministic order, based on variable references instead of cells' positions on the page. Organize your notebooks to best fit the stories you'd like to tell. **Built-in package management.** marimo has built-in support for all major package managers, letting you install packages on import. marimo can even [serialize package requirements](https://docs.marimo.io/guides/editor_features/package_management.html#auto-add-inline-script-metadata-uv-only) in notebook files, and auto install them in [isolated venv sandboxes](https://docs.marimo.io/guides/editor_features/package_management.html#running-marimo-in-a-sandbox-environment-uv-only). **Batteries-included.** marimo comes with GitHub Copilot, AI assistants, Ruff code formatting, HTML export, fast code completion, a [VS Code extension](https://marketplace.visualstudio.com/items?itemName=marimo-team.vscode-marimo), an interactive dataframe viewer, and [many more](https://docs.marimo.io/guides/editor_features/index.html) quality-of-life features. ## Quickstart **Installation.** In a terminal, run ```bash pip install marimo # or conda install -c conda-forge marimo marimo tutorial intro ``` **Create notebooks.** Create or edit notebooks with ```bash marimo edit ``` **Run apps.** Run your notebook as a web app, with Python code hidden and uneditable: ```bash marimo run your_notebook.py ``` **Execute as scripts.** Execute a notebook as a script at the command line: ```bash python your_notebook.py ``` **Automatically convert Jupyter notebooks.** Automatically convert Jupyter notebooks to marimo notebooks with the CLI ```bash marimo convert your_notebook.ipynb > your_notebook.py ``` or use our [web interface](https://marimo.io/convert). **Tutorials.** List all tutorials: ```bash marimo tutorial --help ``` ## Questions? See the [FAQ](https://docs.marimo.io/faq.html) at our docs. ## Learn more marimo is easy to get started with, with lots of room for power users. For example, here's an embedding visualizer made in marimo ([video](https://marimo.io/videos/landing/full.mp4)): Check out our [docs](https://docs.marimo.io), the [`examples/`](examples/) folder, and our [gallery](https://marimo.io/gallery) to learn more.Tutorial | Inputs | Plots | Layout |