Posted on :: 1060 Words :: Tags: , , , ,

Exec Summary

Marimo notebooks offer a fresh take on Python development, putting reactivity and reproducibility at the forefront. They excel in interactive, app-like workflows but have quirks and limitations that keep them from fully replacing Jupyter notebooks for all use cases. This post is a personal reflection on how Marimo fits into my workflow—highlighting both its strengths and frustrations.

What I Love

Reactivity and Reproducibility

Marimo’s reactivity is a game-changer. Unlike Jupyter, where cell order and hidden state can create confusion, Marimo executes cells in dependency order, making notebooks reliably reproducible—a huge win for sharing work or revisiting old projects1. While Jupyter’s shortcomings often come down to user discipline, Marimo enforces best practices by default.

Pure Python, Git-Friendly

Marimo notebooks are just Python files—no more wrestling with JSON merge conflicts or wondering if the notebook’s state matches the code you see2. Small changes mean small diffs, making version control a breeze. For example after importing Marimo: :

app = marimo.App(width="medium")

@app.cell
def _(CITIES: list[str], YEARS: list[int], mo):
    city = mo.ui.dropdown(
        options=CITIES, label="Select City for detailed view", value=CITIES[0]
    )
    year = mo.ui.slider(
        start=min(YEARS), stop=max(YEARS), value=min(YEARS), label="Choose Year"
    )
    return city, year

Interactive UIs and Apps

Building interactive tools is straightforward. Sliders, dropdowns, and dataframe GUIs let you create rich, user-friendly interfaces—no frontend code required32. You can turn notebooks into apps (with code hidden) with minimal effort, perfect for sharing insights or building internal tools.

From Prototype to Production

Marimo makes it easy to move from exploration to deployment. Notebooks can be run as scripts, pipelines, or deployed as apps with zero extra configuration32. This is a significant time-saver for data science and web development.

What Frustrates Me

Learning Curve and Ecosystem

Marimo is relatively new (first released in late 2024), and while powerful, there’s a learning curve. Its ecosystem isn’t as mature as Jupyter’s, so you might miss some plugins or integrations4. While I’ve never loved Jupyter’s patchwork of extensions and widgets, Marimo’s more cohesive approach requires adapting to its conventions.

Performance for Heavy Lifting

If you’re training big models or running long loops, Marimo’s reactivity can feel like overkill. Jupyter’s linear execution and progress bars still have an edge for certain workflows. Marimo shines at interactivity, but for long-running batch processing, it’s not always the best fit.

Limited Community and Documentation

The community is growing, but it’s not as large as Jupyter’s. Documentation is solid but not exhaustive, so you’ll sometimes need to experiment or turn to your favorite LLM for help4.

Positive Use Cases

  • Data Exploration and Visualisation: Quickly build interactive dashboards and drill down into data32.
  • Internal Tools: Create maintainable, Python-only tools for your team without worrying about frontend code3.
  • Education and Research: Share reproducible research and engage students with interactive apps31.
  • Web Development: Debug databases, analyse app data, and prototype functions for your web app.

Downsides and Frustrations

  • Ecosystem Maturity: Missing some IDE integrations and community support4.
  • Performance: Not ideal for long-running, batch-oriented tasks.
  • Documentation Gaps: Sometimes you’ll need to experiment to get things working4.
  • Distracting Interactivity: The always-on feedback can be distracting. I often prototype in Jupyter or a script, then migrate to Marimo for sharing.

In summary: Marimo is a fresh take on Python notebooks, with reactivity and reproducibility at its core. It’s a joy to use for interactive, app-like workflows, but still finding its feet in some areas. For now, it’s a powerful addition to my toolkit—but not a complete replacement for everything Jupyter does. For more involved apps, I’ll still reach for Streamlit and its mature ecosystem32.

Ultimately, productivity depends on knowing your own workflow preferences. Some thrive on immediate feedback and interactivity, others prefer a more controlled, linear approach. Today, we’re lucky to have a range of outstanding tools—and Marimo is an excellent addition to that toolbox32.

p.s. Marimo plays nicely with DuckDB, a great choice for data exploration and analysis5. You can use SQL directly in your notebooks, making it easy to query large datasets without leaving the Marimo environment.

Appendix: Publishing Options and the Interactive Development Experience

Self-Hosting and Publishing Marimo Notebooks

Marimo offers several ways to share and publish your notebooks:

  • WebAssembly (WASM) Export: Export notebooks as self-contained, browser-executable HTML files using WebAssembly. Host on GitHub Pages, S3, or any static web host—no backend required15.
  • Online Playground: Share notebooks instantly via the Marimo online playground, which runs entirely in the browser and requires no login2.
  • Community Cloud: Use the free Marimo Community Cloud to share notebooks privately or publicly with email-based authorisation2.
  • Self-Hosting: Export your notebook and serve it from your own web server, CDN, or personal website3.
  • Deploy as Apps: Notebooks can be deployed as read-only or interactive web apps using marimo run, or integrated into ASGI frameworks like FastAPI2.

This flexibility makes it easy to share interactive demos, tutorials, or research without worrying about server costs or infrastructure5.

The Interactive Development Experience: Marimo vs. Jupyter in VS Code

Working in Marimo feels different from Jupyter notebooks in VS Code. Marimo is live and reactive—every change is immediately reflected, giving you a true “WYSIWYG” experience. This is empowering for quick iteration and interactive demos, but can be overwhelming if you prefer a more controlled, linear workflow.

Think of it like technical writing in LaTeX versus Microsoft Word:

  • Jupyter in VS Code: Like LaTeX, you write code and markdown, then run cells to see the output. The process is deliberate, with fine-grained control. The lack of immediate rendering can help with focused, distraction-free development.
  • Marimo: Like Word, changes are instantly reflected, and the notebook feels alive. Great for rapid iteration, but sometimes harder to focus on code without seeing intermediate results.

Both styles have their place; the best choice depends on your project and personal workflow.

References