marimo-team / marimo

A reactive notebook for Python — run reproducible experiments, execute as a script, deploy as an app, and version with git.
https://marimo.io
Apache License 2.0
5.31k stars 155 forks source link
artificial-intelligence dag data-science data-visualization dataflow developer-tools machine-learning notebooks pipeline python reactive web-app

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

Docs · Discord · Examples

**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**. - **reactive**: run a cell, and marimo automatically runs all dependent cells - **interactive**: bind sliders, tables, plots, and more to Python — no callbacks required - **reproducible**: no hidden state, deterministic execution - **executable**: execute as a Python script, parametrized by CLI args - **shareable**: deploy as an interactive web app, or run in the browser via WASM - **git-friendly**: stored as `.py` files ```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. **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. **Synchronized UI elements.** Interact with UI elements like sliders, dropdowns, and dataframe transformers, 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. **Compatible with expensive notebooks.** You can optionally disable expensive cells to prevent them from automatically running, or configure the runtime to be lazy and mark affected stales as stale instead of automatically running them. **Batteries-included.** marimo comes with GitHub Copilot, Black code formatting, HTML export, fast code completion, a [VS Code extension](https://marketplace.visualstudio.com/items?itemName=marimo-team.vscode-marimo), and many more quality-of-life features. ## Quickstart **Installation.** In a terminal, run ```bash pip install marimo # or conda install -c conda-forge marimo marimo tutorial intro ``` **Or run in Gitpod.** Click this link to open the repo in a Gitpod Workspace: [https://gitpod.io/#https://github.com/marimo-team/marimo](https://gitpod.io/#https://github.com/marimo-team/marimo) **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/` folder, and our [gallery](https://marimo.io/@public) to learn more.
Tutorial Inputs Plots Layout
## Contributing We appreciate all contributions! You don't need to be an expert to help out. Please see [CONTRIBUTING.md](https://github.com/marimo-team/marimo/blob/main/CONTRIBUTING.md) for more details on how to get started. > Questions? Reach out to us [on Discord](https://discord.gg/JE7nhX6mD8). ## Community We're building a community. Come hang out with us! - 🌟 [Star us on GitHub](https://github.com/marimo-team/marimo) - 💬 [Chat with us on Discord](https://discord.gg/JE7nhX6mD8) - 📧 [Subscribe to our Newsletter](https://marimo.io/newsletter) - ☁️ [Join our Cloud Waitlist](https://marimo.io/cloud) - ✏️ [Start a GitHub Discussion](https://github.com/marimo-team/marimo/discussions) - 🐦 [Follow us on Twitter](https://twitter.com/marimo_io) - 🕴️ [Follow us on LinkedIn](https://www.linkedin.com/company/marimo-io) ## Inspiration ✨ marimo is a **reinvention** of the Python notebook as a reproducible, interactive, and shareable Python program, instead of an error-prone JSON scratchpad. We believe that the tools we use shape the way we think — better tools, for better minds. With marimo, we hope to provide the Python community with a better programming environment to do research and communicate it; to experiment with code and share it; to learn computational science and teach it. Our inspiration comes from many places and projects, especially [Pluto.jl](https://github.com/fonsp/Pluto.jl), [ObservableHQ](https://observablehq.com/tutorials), and [Bret Victor's essays](http://worrydream.com/). marimo is part of a greater movement toward reactive dataflow programming. From [IPyflow](https://github.com/ipyflow/ipyflow), [streamlit](https://github.com/streamlit/streamlit), [TensorFlow](https://github.com/tensorflow/tensorflow), [PyTorch](https://github.com/pytorch/pytorch/tree/main), [JAX](https://github.com/google/jax), and [React](https://github.com/facebook/react), the ideas of functional, declarative, and reactive programming are transforming a broad range of tools for the better.