github marimo-team/marimo 0.20.0

latest release: 0.20.1
8 hours ago

This 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.

⭐ Highlights

Reactive selections for Matplotlib scatter plots

mo.ui.matplotlib adds reactive box and lasso selection to Matplotlib scatter plots.

Open in molab

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.

Open in molab

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.

Open in molab

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.

✨ 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 playwright when 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.ClickException for sandbox missing pyzmq error (#8347)
  • Add interactive doc lookup for data-marimo-doc in 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.Image with raw bytes (e.g. GIFs) (#8282)

🐛 Bug fixes

  • Only trigger cell when ALL its dependencies are unblocked (#8374)
  • Supress 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.interactive becomes blank with large plots (#8285)
  • Add a has_warnings parse enum to indicate formatting errors (#8288)
  • Fix flakey print_code test (1f706a2)
  • Fix --base-url breaks 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:

Full Changelog: 0.19.11...0.20.0

Don't miss a new marimo release

NewReleases is sending notifications on new releases.