github marimo-team/marimo 0.23.9

4 hours ago

What's Changed

This release makes opening a notebook in a second tab non-destructive, mo.ui.table adds new args for hidden_columns/visible_columns (mutually exclusive), and tightens sharing and error-output behavior across the board.

⭐️ Highlights

Open the same notebook in a second tab

Opening a notebook in a second browser tab no longer forcibly disconnects the first. The new tab joins as a live, read-only viewer, and you can take over editing from either side with a single click — no destructive modal and no reload required (#9746).

Screen.Recording.2026-06-01.at.3.31.17.PM.mov

Show and hide table columns

mo.ui.table now supports column visibility. Hide and show columns from the column header menu, Column Explorer with a click, find columns fast with smart prefix-based search, and control initial visibility from Python. A hidden-count and "Unhide all" link keep things discoverable (#9687, #9696).

Screen.Recording.2026-05-26.at.6.35.04.PM.mov

Cells with no output now show in slides

Because slides allow code edits, a slide edited to no longer produce an output used to disappear from the deck entirely. Such cells now appear in the slides minimap and viewer so you can edit them back in (they're still skipped during a presentation). Minimap thumbnails are also larger and more readable (#9771).

Screen.Recording.2026-06-03.at.2.25.46.PM.mov

✨ Enhancements

  • Add MARIMO_RESTRICT_SHARING env var machine-wide (#9756)
  • Non-destructive local takeover (read-only viewer + bidirectional takeover) (#9746)
  • Add cells with no output to the minimap & viewer (#9771)
  • Add GET /api/kernel/status endpoint (#9768)
  • Enforce sharing config as server-side security (#9578)
  • Add filter param for regex and callable filtering (#9667)
  • Slides config panel open by default (#9737)
  • Add pair with agent link (#9738)
  • Add Opus 4.8 and script to append models to the top (#9723)
  • Remove mapping for 'src' to 'auto-mix-prep' (#9725)
  • Add workflow to automate running llm-sync-models script (#9724)
  • Automation script to pull models.yml (#9635)
  • Support Dremio ADBC data source browsing (#9694)
  • Add auto_close_pairs setting (#9711)
  • WASM compatibility rule checks (#9587)
  • Fix dropped error hints and improve error output UI (#9673)
  • Column Explorer visibility controls + smart-search (#9696)
  • Sort toml entries when writing config (#9686)
  • Pretty format hidden variable behavior in stack traces (#9660)
  • Add column visibility kwargs and UI controls (#9687)
  • Unified filter pill UI with overflow strip (#9638)
  • Add padding between cell number and minimap dependency lines (#9675)

🐛 Bug fixes

  • Escape user-controlled file_key in service worker injection (#9789)
  • Fix completions in slides view (#9769)
  • Arg/kwarg collision for local numpy vars in caching (#9751)
  • Suppress marimo hover tooltip for all LSP providers, not just pylsp (#9741)
  • Fix SQL defs lookup (#9754)
  • Keep stepped range progress totals aligned (#9582)
  • Per-provider max_tokens defaults with optional override (#9703)
  • Accept ChartDataType in mo.ui.table to resolve pyright error when passing chart.value (#9674)
  • Jump to running notebook cells only (#9707)
  • Fix mo.cache raising KeyError: 'scratch' in scratchpad (#9664)
  • Fix interruption for pydantic-ai chatbot (#9620)
  • Preserve top level names for name thrashing (#9695)
  • Lazy download-size RPC + first-page extrapolation (#9691)

📚 Documentation

  • Add config to disable AI (#9739)
  • Update molab docs with new compute and sharing features (#9748)

📝 Other changes

  • Don't shadow builtin print unless mo.Thread is used (#9765, #9766)
  • Zz/zt/zb scroll for notebook viewport (#9701, #9728)
  • Add rule to prevent test files from having the same name (#9671)

Contributors

Thanks to all our community and contributors who made this release possible: @akshayka, @corleyma, @dmadisetti, @everettroeth, @foxcroftjn, @GHX5T-SOL, @kirangadhave, @kjgoodrick, @kratos0718, @Light2Dark, @mscolnick, @nojaf, @Rowlando13, @VishakBaddur, @XanthanGum

And especially to our new contributors:

Full Changelog: 0.23.8...0.23.9

Don't miss a new marimo release

NewReleases is sending notifications on new releases.