marimo 0.20.0 is now available. Install with
pip install --upgrade marimoThis release brings richer interactivity to scientific computing workflows in marimo with new UI primitives and a small breaking change to make mo.stop more predictable.
Reactive selections for Matplotlib scatter plots
mo.ui.matplotlib
adds reactive box and lasso selection to Matplotlib scatter plots. Make a
selection on a scatter plot and your selection is automatically sent back to
Python. This lets you efficiently select into plots with millions of points, with
no performance hit because the filtering is done on the backend.

Box select by default, Shift+click for lasso. Read the docs for more details.
Editable matrix and vector inputs
mo.ui.matrix provides interactive numeric grid inputs. Initialize with a nested list or NumPy array and get a reactive element that updates as the user edits cells.

Supports per-element bounds, symmetric constraints, and custom precision. Read the docs for more details.
Rich PyTorch nn.Module display
PyTorch nn.Module instances now render as collapsible HTML trees with color-coded layer categories.
![]()
Frozen layers are visually dimmed with trainable parameter counts shown inline. Hover any layer to view its docstring in the Documentation panel.
Breaking changes
mo.stop now waits for all dependencies to unblock (#8374)
Previously, when a cell depended on two branches that were both stopped with
mo.stop, unblocking just one branch would trigger the dependent cell ā often
resulting in a NameError because the other branchās variables were still
undefined. Now, marimo waits until all of a cellās dependencies are
unblocked before running it. This also means that manually running a cell with
a stopped ancestor will show a clear āancestor stoppedā message instead of a
NameError.
Exceptions block descendant execution
Previously, when a cellās ancestor raised an exception, you could manually run it anyway, putting the notebook in an inconsistent state. Now, marimo always prevents cells from running if any of its ancestors raised an exception. This means that manually running a cell with a āerroredā ancestor will show a clear āancestor raisedā message.
Enhancements
- Add
mo.ui.matplotlib()(#8342) - Add Matplotlib SVG output support (#8312)
- Add
mo.ui.matrix()(#8354) - Add default focus for cell-links (#8372)
- Allow excluding code blocks when exporting to PDF (#8362)
- Include
playwrightwhen running sandboxed thumbnail generation (#8339) - Mask
getpass.getpass()input in notebook UI (#8345) - Add sidebar upload progress toast and optional finish title (#8308)
- Use
click.ClickExceptionfor sandbox missing pyzmq error (#8347) - Add interactive doc lookup for
data-marimo-docin cell output (#8343) - Add rich HTML formatter for PyTorch
nn.Module(#8307) - Support
__buffer__objects in widget comm buffers (#8283) - Add r2 support for āmarimo editā (#8278)
- Render
IPython.display.Imagewith raw bytes (e.g. GIFs) (#8282)
Bug fixes
- Only trigger cell when ALL its dependencies are unblocked (#8374)
- Suppress warnings for meta information in config in markdown (#8290)
- Remove resize when tracing panel in sidebar (#8366)
- Display mermaid error if present and strip diagram (#8368)
- Merge new panels into saved localStorage layout on upgrade (#8351)
- Thread-safe redirection of console outputs in run mode (#8353)
- Apply flex only for nested stacks (#8357)
- Prevent duplicated system prompts in PydanticAI completions (#8356)
- Display math rendering (#8348)
- Fix
+character in file paths being decoded as space in URLs (#8344) - Fix minor typo in mount.tsx (#8325)
- Stop hardcoding us-central1 as vertex ai default location (#8313)
- Suppress dark-mode hover border on published cells (#8297)
- Prevent duplicate execution of nested marimo custom elements (#8286)
- Comment only files count as empty files (#8289)
- Refresh mpl interactive plots when browser tab becomes visible (#8287)
- Fix
mpl.interactivebecomes blank with large plots (#8285) - Add a
has_warningsparse enum to indicate formatting errors (#8288) - Fix flakey
print_codetest (1f706a2) - Fix
--base-urlbreaks og:thumbnail generation path (#8329)
Documentation
- Fix documentation and argument-parsing for thumbnails export (#8301)
- Skills (#8321)
- Clarify pixi vs hatch setup guidance in CONTRIBUTING (#8291)
Preview features
- Storage inspector backend logic and models (#8233)
Contributors
Thanks to all our community and contributors who made this release possible:
@akshayka, @andrewsoonqn, @axsseldz, @daizutabi, @dmadisetti, @fpreiss, @jacobcbeaudin, @jeffs, @Light2Dark, @manzt, @Mr-Neutr0n, @mscolnick, @mstanowski, @peter-gy, @snooze92, @xfy0012
And especially to our new contributors:
@axsseldzmade their first contribution in #8291@jeffsmade their first contribution in #8297@snooze92made their first contribution in #8301@Mr-Neutr0nmade their first contribution in #8313@xfy0012made their first contribution in #8308@mstanowskimade their first contribution in #8329@fpreissmade their first contribution in #8356@jacobcbeaudinmade their first contribution in #8351
Weāre grateful for every contribution, from code to documentation to bug reports. Thank you for helping make marimo better!
