Skip to content

Reproducible, maintainable, and reusable Python notebooks #8522

@akshayka

Description

@akshayka

What is the title of the roadmap you are submitting?

Reproducible, maintainable, and reusable Python notebooks

Roadmap Link

I am the developer of the open-source marimo Python notebook, a modern alternative to Jupyter notebooks that is reproducible, maintainable (stored as Python, testable with Git), and reusable as Python scripts, modules, and apps. marimo has been open-source for over a year and is approaching wide adoption, and has gained some recognition in the community — we are giving featured talks at PyCon US and SciPy 2025 this year.

I am interested in developing a roadmap that teaches best practices for coding in Python notebooks, addressing in particular the reproducibility and reusability crisis affecting traditional Python notebooks. Before investing time in drafting the roadmap with your (very full-featured!) editor, I wanted to seek feedback on whether you would be open to a contributed roadmap on this topic. Topics covered would include:

Challenges with traditional Python notebooks like Jupyter:

  • Computational reproducibility (>96% of notebooks in one study on GitHub didn't reproduce)
  • Package reproducibility
  • Maintainability like regular software (how do you version? reuse code? test?)
  • Reusability like regular software (running as scripts and apps)

Best practices

  • Use of functions
  • Minimal redefinition of variables
  • Package management
  • Referencing data and modules (don't use sys.path!)

How marimo is designed to make your notebooks reproducible, maintainable, and reusable by default

  • reactive execution: its benefits (reproducibility) and constraints (variable redefinition)
  • PEP-723 inline script metadata
  • a pure Python file format
  • reusable functions and classes
  • running as scripts
  • running as interactive web apps

For more context, this blog post elaborates on some of these challenges and how marimo addresses them: https://marimo.io/blog/lessons-learned

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions