Show HN: Marimo – an open-source reactive notebook for Python
An open-source project called Marimo is positioning itself as a reactive, Python-based alternative to Jupyter notebooks, aiming to fix long-standing issues around hidden state, non-deterministic execution, and poor version control by storing notebooks as plain `.py` files and automatically tracking cell dependencies. Commenters are enthusiastic about its ability to blend exploratory work with easy app-style sharing, and appreciate features like a dependency graph, variable viewer, and planned integrations such as WASM, debugging, and linting/formatting tools. At the same time, they note trade-offs in flexibility, incomplete solutions for fully reproducible environments and package management, some state-tracking edge cases, and rough edges in editor integration that will need to mature.
Positioning vs Existing Tools
- Seen as an alternative to Jupyter/Pluto/Observable, with reactive cells and a pure-
.pyfile format. - Many want clearer, top-level “Jupyter vs Marimo” messaging on the site, not just in the FAQ.
- Compared to Streamlit: Marimo supports classic notebook-style exploration first, then export to shareable apps.
- Quarto is mentioned as solving some reproducibility issues, but Marimo’s synchronized reactive cells are highlighted as the main differentiator.
Reactivity, State, and Reproducibility
- Main appeal: removes hidden state by topologically ordering cells via a dependency DAG and re-running affected cells on changes.
- Users like that this improves determinism and makes notebooks easier to reason about and review (since they’re plain Python).
- Some find it less flexible: they sometimes want to tweak a cell without triggering downstream recomputation.
- State tracking isn’t perfect: mutations like
d.x = "new value"on a dataclass don’t currently cause dependent cells to re-run.
Packaging and Environments
- Many consider package/env capture “the other half” of reproducibility and want notebooks to embed dependency info.
- Marimo has “package management for reproducible notebooks” on its roadmap but no concrete design yet.
- Discussion of
pip freezeworkflows notes issues: non-pip installs, platform-specific variants, bloated/obsolete deps, and manual maintenance. - Alternatives like Poetry, pip-tools, and Nix are mentioned; opinions differ on how painful Python packaging really is.
Deployment, WASM, and Apps
- There is active interest in a JupyterLite-style WASM/pyodide mode for in-browser execution, MDX/Nextcloud embedding, and “standalone HTML” apps.
- WASM support is explicitly on the roadmap; current docs embedding uses iframes.
- Users like that notebooks can be turned into simple web apps, suitable for internal tools and interactive tutorials.
Editor Integration and UX
- A VS Code extension exists but currently opens a full browser UI rather than using VS Code’s native notebook interface; some find onboarding confusing.
- Questions about editing
.pynotebooks in an external editor and seeing live updates; this is desired but not yet supported. - Users ask about long-running background tasks that survive closing the tab; current behavior is unclear.
Plugins, Widgets, and Features
- Internal widget system uses custom elements; there’s no public plugin API yet, but one is planned.
- The tool is built from scratch and does not depend on Jupyter or IPython; Jupyter-widget compatibility is only an idea for now.
- Existing features include a dependency-graph viewer, variable viewer, Copilot integration, and plans for PDB-based debugging and better graph visualization.
- Requests include: mermaid diagrams in markdown, RStudio-style doc-aware completions (claimed to exist), better GitHub previews, cell-level caching, and more nuanced variable scoping (e.g., for repeated plotting code).