marimo: Revolutionizing Python Notebooks for Enhanced Reproducibility and Interactivity

Exploring a New Era of Consistent, Interactive, and Shareable Python Programs

Table of Contents

I came across marimo from the TL;DR newsletter (finally going through something regularly with passion pays off!) which I have a habit of going through daily; for personal interests, passion and curating of resources to use in personal/group projects as I’m an open-source enthusiast who likes contributing too. This exciting discovery immediately caught my attention, promising to revolutionize the way we interact with Python notebooks (which I associate with regularly). Let’s dive into what makes marimo so special and how it’s addressing long-standing issues in the notebook ecosystem.

Table of Contents

1. What is marimo?

marimo is a reactive notebook for Python that’s shaking up the way we think about and interact with computational notebooks. It’s not just another Jupyter alternative; it’s a ground-up reimagining of what a Python notebook can be.

At its core, marimo models notebooks as Directed Acyclic Graphs, creating a dynamic and interconnected environment for your code.

How I see the dataflow graph working for marimo:

graph TD A[Cell 1: Define variable] --> B[Cell 2: Use variable] A --> C[Cell 3: Use variable] B --> D[Cell 4: Use results from Cell 2] C --> E[Cell 5: Use results from Cell 3] F[UI Element] --> B F --> C G[Delete Cell] --> H[Scrub variables] I[Run Cell] --> J[Auto-run affected cells, unless expensive cells computationally] K[Update UI Element] --> J

Imagine a notebook where running a cell or tweaking a UI element automatically updates all affected parts of your code. That’s marimo in action! It keeps your code and outputs in perfect harmony, like a well-orchestrated symphony of data and computations.

But marimo isn’t just about reactive execution. It’s a multi-faceted tool designed to address some of the most persistent pain points in the notebook ecosystem:

  1. Consistency is king: marimo ensures that your code, outputs, and program state are always in sync. No more hidden states or mysterious bugs!

  2. Pure Python power: Every marimo notebook is stored as pure Python. This means you can easily execute it as a script or even deploy it as a fully-fledged app. Talk about versatility!

  3. Interactive by nature: Built-in UI elements aren’t just add-ons; they’re an integral part of the marimo experience, seamlessly synchronized with your Python code.

  4. Reproducibility made easy: By automatically running affected cells or marking them as stale, marimo takes the guesswork out of reproducing results (which is a huge deal - A study of 10 million notebooks on GitHub found that 36% percent of them were executed out of order in this way).

“marimo was built from the ground up to solve well-known problems associated with traditional notebooks.” ~ marimo team

In the following sections, we’ll dive deeper into marimo’s key features and how they address common notebook challenges. Trust me, whether you’re a data scientist, a researcher, or just a Python enthusiast, you’re in for a treat!

2. GitHub Accelerator Announcement!

Before we dive into the details of marimo, I’d like to share some exciting news I recently came across on LinkedIn.

marimo has been selected to participate in the GitHub Accelerator program for open source AI projects. This is a significant achievement, as the program is highly competitive, with only 11 projects chosen to participate.

This recognition from GitHub is a testament to marimo’s innovative approach to Python notebooks and its potential impact on the open source AI ecosystem. It’s an encouraging sign for the project’s future development and adoption.

Now, let’s dive into what makes marimo stand out in the world of Python notebooks.

3. Key Features of marimo

Let’s break down the key elements that make this tool a game-changer in the world of Python notebooks.

Consistent State

Remember those frustrating moments when your notebook’s outputs didn’t match your code? Well, marimo says goodbye to that headache!

marimo guarantees that your code, outputs, and program state are always in sync, solving a major pain point of traditional notebooks like Jupyter.

But how does it achieve this magical consistency? Two words: reactive programming.

  1. Smart Cell Execution: Run a cell, and marimo automatically runs any cells that reference its variables. No more manual re-running and crossing your fingers!
  2. Clean Slate: Delete a cell, and poof! marimo scrubs its variables from program memory. Say goodbye to hidden states lurking in the shadows.

Built-in Interactivity

Now, this is where things get really exciting! marimo’s interactivity isn’t just a bolt-on feature; it’s baked into its DNA.

  • UI Elements Galore: Sliders, dataframe transformers, interactive plots ā€“ marimo’s got them all, and they’re automatically synchronized with your Python code.
  • Real-time Reactivity: Tweak a UI element, and watch as affected cells update instantly. It’s like your notebook is alive!
marimo’s reactivity makes these UI elements more useful and ergonomic than Jupyter’s ipywidgets.

Pure Python Programs

Here’s where marimo really flexes its muscles:

  1. Python All the Way: Every marimo notebook is saved as a pure Python file. No more JSON shenanigans (looking at you Jupyter)!
  2. Script-Ready: Run your notebooks as regular Python scripts. It’s that simple.
  3. App Deployment: With a single command (marimo run file.py), transform your notebook into an interactive web app. Mind blown yet?

But wait, there’s more:

  • Deterministic Execution: Cells execute based on variable references, not their position. Organize your notebook to tell your data story, your way.
  • Performance Boost: marimo’s smart runtime only runs the cells that need updating, saving you precious computation time.
  • Developer-Friendly: GitHub Copilot integration, Black code formatting, HTML export, fast code completion, VS Code extension ā€“ marimo’s got your back at every step.

As I explored these features, I couldn’t help but help plot a markmap using Hugo’s features to get what I stated above in a visual form.

  - marimo
    - Consistent State
      - Guaranteed sync between code, outputs, and state
      - Reactive programming environment
      - Automatic cell re-running
      - Variable scrubbing on cell deletion
    - Built-in Interactivity
      - UI elements
        - Sliders
        - Dataframe transformers
        - Interactive data visualization tools/plots
        - and [more](https://docs.marimo.io/api/index.html)
      - Automatic synchronization with Python code
      - Real-time updates of affected cells
    - Pure Python Programs
      - Saved as .py files
      - Executable as scripts
      - Deployable as web apps
    - Advanced Features
      - Deterministic execution order
      - Performance optimizations
        - Selective cell execution
        - Optional disabling of expensive cells
      - Developer tools
        - GitHub Copilot integration
        - HTML export
        - Fast code completion
        - VS Code extension

4. Comparison with Jupyter Notebooks

As someone who’s spent countless hours in Jupyter notebooks, I was curious to see how marimo stacks up.

Reimagining the Notebook

First things first: marimo isn’t just an upgrade to Jupyter; it’s a complete reimagining of what a Python notebook can be. While Jupyter brought interactive computing to the masses, marimo takes it to the next level by addressing some of Jupyter’s long-standing pain points.

Consistency is Key

One of the biggest headaches with Jupyter notebooks is maintaining consistency between your code, outputs, and program state. We’ve all been there - running cells out of order, forgetting to re-run affected cells, and ending up with a notebook that’s more confusing than helpful.

marimo tackles this head-on:

  • Automatic Reactivity: Run a cell, and marimo automatically updates all cells that depend on it. No more manual cell juggling!
  • Clean Slate: Delete a cell, and marimo doesn’t just remove the code - it scrubs the associated variables from memory. Say goodbye to hidden states lurking in the shadows!

With marimo, what you see is truly what you get. No more ‘it works on my machine’ moments!

Interactivity on Steroids

While Jupyter offers interactivity through ipywidgets, marimo takes it to a whole new level:

  • Built-in UI Elements: Sliders, dataframe transformers, interactive plots and more - they’re all baked right in.
  • Seamless Synchronization: These elements aren’t just add-ons; they’re deeply integrated with your Python code.
  • Real-time Updates: Tweak a UI element, and watch as affected cells update instantly. It’s like your notebook is alive!
marimo’s reactive nature makes its UI elements feel more natural and responsive compared to Jupyter’s ipywidgets.

Pure Python Power

Here’s where marimo really shines:

  • Python Files, Not JSON: marimo notebooks are stored as pure Python files, not JSON like Jupyter notebooks.
  • Script-Ready: Run your marimo notebooks as regular Python scripts without any extra steps.
  • App Deployment: Transform your notebook into an interactive web app with a single command. Try doing that with a Jupyter notebook!
  • Git-Friendly: Version control your notebooks as easily as any other Python file. No more JSON diffs!

The Bottom Line

While Jupyter notebooks have been a game-changer for interactive computing, marimo feels like the next evolutionary step. It addresses many of Jupyter’s limitations while introducing powerful new features that make your workflow smoother and more intuitive.

Is marimo perfect for every use case? Probably not. Jupyter’s widespread adoption and extensive ecosystem are hard to beat. But for those seeking a more consistent, interactive, and Python-native notebook experience, marimo is a breath of fresh air.

As I’ve explored marimo, I can’t help but feel excited about its potential to reshape how we approach interactive computing in Python. It’s not just solving problems; it’s opening up new possibilities for how we work with data and code.

5. Getting Started with marimo

Ready to dive into the world of marimo? Getting started is a breeze! Here’s how you can jump right in:

  1. First, let’s install marimo. Open your terminal and run:
pip install marimo
  1. Once installed, you can kick off with a tutorial:
marimo tutorial intro

This will guide you through the basics of marimo, helping you get familiar with its unique features.

  1. Ready to create your own notebook? It’s as simple as:
marimo edit

This command will open up a new marimo notebook, ready for your code and ideas!

For a comprehensive guide and detailed documentation, check out the official marimo documentation. It’s a treasure trove of information to help you make the most of marimo!

Checkout the video shown below where I explore marimo and all the things I talked about in the blog!

Now that you’re set up, let’s explore some exciting use cases and examples!

6. Use Cases and Examples

marimo’s versatility shines across various domains. Let’s explore some key areas where marimo can supercharge your Python notebooks:

- marimo Use Cases
  - Data Science
    - Exploratory Data Analysis
    - Machine Learning Model Development
    - Interactive Visualizations
  - Education
    - Interactive Tutorials
    - Coding Exercises
    - Concept Demonstrations
  - Research
    - Reproducible Experiments
    - Parameter Exploration
    - Result Visualization
  - Software Development
    - Prototyping
    - Documentation
    - Code Demonstrations
  - Business
    - Interactive Reports
    - Data Dashboards
    - Decision Support Tools
  - Pyodide-powered Use Cases
    - Rapid Experimentation
    - Blog Posts and Tutorials
    - Interactive Documentation
    - Custom Tools (e.g., Data Labelers)
    - Bug Reproductions

marimo can be used in many ways, from a next-gen replacement for Jupyter notebooks to creating powerful apps, dashboards, and internal tools. Its reactive nature allows you to explore data rapidly and run experiments in an environment that prevents bugs before they happen.

To see marimo in action across these domains, check out these resources:

  1. Official Examples: A collection of notebooks showcasing marimo’s features.
  2. Cookbook: Practical recipes and use cases for marimo.
  3. Public Gallery: A showcase of interactive marimo notebooks across various domains.
  4. Haleshot’s marimo-tutorials: A community-driven repository (that’s the aim - still working on getting stuff started) with additional tutorials and examples.
marimo offers a Pyodide-powered playground at https://marimo.new. This allows you to try marimo directly in your browser without any installation!

Pyodide Integration and WASM Notebooks

marimo’s integration with Pyodide brings several advantages:

  • Accessibility: No need to install Python, making scientific computing available to everyone.
  • Easy Sharing: Share executable notebooks via URL without deploying backend infrastructure.
  • Snappy Development: Eliminate network requests to remote Python runners for a faster experience.

Creating and Sharing WASM Notebooks

  1. Create new WASM notebooks at marimo.new.
  2. Your work is automatically saved in your browser’s local storage.
  3. Generate shareable permalinks for your notebooks (note: these are publicly accessible).
  4. Convert local notebooks to WASM: Use Share > Create WebAssembly link in the marimo editor’s notebook action menu.

These features open up new possibilities for collaboration, education, and rapid prototyping. Whether you’re a data scientist, educator, researcher, or developer, marimo offers tools to make your notebooks more dynamic, interactive, and shareable.

As you explore these examples and features, you’ll see how marimo’s capabilities come together to create powerful, interactive computational narratives. The ability to easily turn notebooks into web apps or share them via Pyodide, coupled with the consistent state management, opens up new horizons for sharing your work and insights.

7. Community and Support

One of the most exciting aspects of marimo is its vibrant and growing community. As someone who’s been exploring marimo, I’ve been impressed by the level of engagement and support available. Here’s how you can get involved and find help when you need it:

In my experience, the maintainers have been incredibly responsive and helpful, whether on the Discord server or through GitHub issues.

šŸ’¬ Chat with them on Discord - to connect with other users and the maintainers. It’s a fantastic place to ask questions, share your projects, and get quick help. I’ve been amazed at how responsive and helpful the community is!

šŸ“§ Subscribe to their newsletter - It’s a great way to learn about new features, use cases, and community highlights.

ā˜ļø Join the waitlist for marimo Cloud

šŸ’” Checkout their documentation - is comprehensive and well-maintained. Whether you’re just starting or looking for advanced features, it’s an invaluable resource.

āœļø Start a GitHub discussion

šŸ¦ Follow them on Twitter

šŸŒŸ Star them on GitHub - is the heart of the project. It’s where you can find the source code, report issues, and contribute to the project. I’ve found it to be a great resource for staying up-to-date with the latest developments.

What truly stands out about the marimo community is the collaborative spirit. Contributors often jump in to help resolve issues, and there’s a genuine sense of excitement about pushing the boundaries of what’s possible with this tool.

8. Conclusion

As I wrap up this deep dive into marimo, I can’t help but feel excited about its potential to revolutionize how we work with Python notebooks. Here’s my TL;DR (pun intended, given that I discovered marimo through the TL;DR newsletter!):

  • marimo is a game-changer in the world of Python notebooks, offering a more consistent, interactive, and Python-native experience.
  • Its reactive nature, built-in interactivity, and pure Python approach address many pain points of traditional notebooks.
  • The Pyodide integration and WASM notebooks open up new possibilities for sharing and collaboration.
  • A growing, supportive community and robust documentation make getting started and finding help easy.

Personally, I’m planning on shifting to marimo completely for my notebook needs. Its innovative approach to solving long-standing issues in interactive computing is truly refreshing.

What excites me most is the potential for marimo to become a mainstream tool, helping us move beyond the limitations of traditional Python notebooks. And as an open-source enthusiast, I’m thrilled to see such a powerful tool freely available to the community.

As we look to the future, it’s clear that marimo is not just solving today’s problems ā€“ it’s paving the way for new possibilities in how we interact with code and data. I, for one, can’t wait to see where this journey leads!

9. References

  1. https://marimo.io/blog/lessons-learned
  2. https://marimo.io/blog/pyodide
  3. https://marimo.io/blog/introducing-marimo
  4. https://docs.marimo.io
  5. https://github.com/marimo-team/marimo/

Edit this page

Srihari Thyagarajan
Srihari Thyagarajan
B Tech AI Senior Student

Hi, Iā€™m Haleshot, a final-year student studying B Tech Artificial Intelligence. I like projects relating to ML, AI, DL, CV, NLP, Image Processing, etc. Currently exploring Python, FastAPI, projects involving AI and platforms such as HuggingFace and Kaggle.

Next
Previous

Related