What's Changed
This release rides on the coattails of the uv package manager to introduce exciting new features related to package reproducibility!
With this release, it's now possible to create standalone notebook files that have package requirements embedded in them as a comment, using PEP 723's inline metadata! marimo can generate these requirements for you and even start notebooks in isolated virtual environments.
These features are only possible because unlike Jupyter notebooks, marimo notebooks are stored as pure Python files, letting them take advantage of the exciting new developments in the Python ecosystem such as uv
and PEP 723.
Highlights
📦 Automatic tracking of packages used by notebooks. marimo can now automatically serialize package dependencies in notebook files as inline script metadata, generating a comment header that looks something like this:
# /// script
# requires-python = ">=3.11"
# dependencies = [
# "pandas",
# "altair",
# ]
# ///
This lets you create standalone notebook files that have their package requirements serialized in them.
Enable package tracking in the notebook settings:
Note: This feature requires uv
.
🚀 Run marimo notebooks in package sandboxes. Use
marimo edit --sandbox notebook.py
to edit a Python notebook in a completely isolated virtual environment! This increases reproducibility and helps prevent environment pollution. If your notebook has inline script metadata, marimo will automatically install the enumerated packages before running the notebook; if it doesn't, marimo will prompt you to install the missing packages on notebook startup.
This exciting new workflow is only made possible thanks to uv
, which is blazingly fast.
Other improvements
- You can now customize marimo CSS; customization is limited today but will grow over time.
- Dataframe rows are now paginated server-side, improving performance of notebooks that output alrge dataframes.
- ANSI color support is now available in stderr.
- A dedicated "stop" button has been added to the marimo editor, making interrupting cell execution more reliable (no more accidentally running a cell after interrupting it).
All changes
- improve: Enable ANSI support in stderr by @wasimsandhu in #2110
- fix: publish docker containers for arm64 (mac compat) by @mscolnick in #2111
- chore: add biome-lint to remove unused imports by @mscolnick in #2116
- chore: enable more biome rules by @mscolnick in #2117
- improvement: paginate mo.ui.table rows (server-side rows) by @mscolnick in #2115
- docs: pre-built containers by @mscolnick in #2118
- improvement: split run and stop buttons by @akshayka in #2119
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #2121
- feat(mo.ui.table): Freeze table columns by @wasimsandhu in #2122
- fix: Show outputs below in HTML export if configured by @mscolnick in #2129
- fix: add bokeh theme color to iframe background by @mscolnick in #2128
- feat: custom css by @mscolnick in #2120
- fix: catch/log oserror by @akshayka in #2131
- fix: consolidate shadows to be easily overriden by @mscolnick in #2130
- feat: configure auto-add script metadata to notebook file, when using uv by @mscolnick in #2102
- feat: marimo edit --sandbox nb.py by @mscolnick in #2134
- docs: --sandbox by @mscolnick in #2136
- docs: add package management to toc by @akshayka in #2135
- smoke-tests: for theming different libraries by @mscolnick in #2145
- 0.8.4 by @akshayka in #2149
Full Changelog: 0.8.3...0.8.4