pypi marimo 0.23.14

2 hours ago

What's Changed

This release brings anywidget composition with hot reload, an experimental debugger with per-line timing, chat AI improvements, and cached WASM exports.

Plus many fixes across charts, tables, and exports.

⭐️ Highlights

Anywidget composition and hot reload

marimo now supports anywidget's new composition API: parent widgets can render child widgets they were handed as values. Widget frontend code also hot-reloads in place as you edit it — live views re-render with widget state intact (#10127).

image

Read the docs for more on building custom UI plugins.

Debugger and per-line timing

An experimental debugger execution lifecycle adds frame watching to cell execution, highlighting the currently executing line and enabling debug points (#9970).

Screen.Recording.2026-06-23.at.9.53.50.AM.mov

Building on the same machinery, the experimental line_timing flag shows an elapsed-time pill on any line that has been busy for more than ~500ms (#10126).

Chat AI improvements

The AI chat panel picked up several upgrades this release:

  • Web search and fetch — the chat panel can now search and fetch from the web, adapting to your provider's native tools when available (#10052)
  • Errors as chat context — mention @error://all or a single cell's error to attach its source, traceback, and SQL schema as context chips (#10038)
  • "Fix in chat" — cell errors and tracebacks gain an option to route the failing code straight into the sidebar (#10024)
  • Prompt caching — enabled for supported providers (#10052)
Screen.Recording.2026-06-30.at.5.24.02.PM.mov

Read the docs for more on AI features.

Cached WASM exports

marimo export html-wasm --execute now bundles runtime cache into the export, so published notebooks hydrate cell outputs from cache instead of recomputing them in the browser (#9897). This lets you share interactive snapshots of executions that normally can't run in the browser at all (like a jax or torch training run) while the rest of the notebook stays live. Built on a new cell-level cached execution lifecycle, opt-in via [tool.marimo.runtime] cache_cells = true (#9895).

Screen.Recording.2026-07-08.at.4.39.03.PM.mov

Read the docs for more on exporting notebooks.

✨ Enhancements

  • Support anywidget composition and hot reload (#10127)
  • Add signatures to cache bundles to prevent tamper (#10123)
  • Add MARIMO_SESSION_COOKIE_SECURE env var for Secure session cookie (#10117)
  • Support mdx flavor in md export (#10116)
  • Honor per-cell hide_code in kiosk and reader views (#10111)
  • Allow selecting a pandas DataFrame index as a chart axis (#10097)
  • Add web search and fetch capabilities to AI chat, with provider caching (#10052)
  • Single-cell error chips and auto-sync resource map (#10038)
  • Add "Hide all" columns action (#10068)
  • Introduce progressive loading for WASM (#10044)
  • Open home in a new tab instead of replacing the current one (#10066)
  • Add "Fix with AI assistant" option for errors (#10024)
  • Better completions around function calls (#10045)
  • Add Fable and Sonnet 5 to models list (#10051)
  • Avoid bumping __generated_with when that's the only change in a notebook (#10027)
  • Bundle session caches into html-wasm --execute output (#9897)
  • Cell-level cached execution lifecycle (#9895)

🐛 Bug fixes

  • Fix mounting anywidget CSS in cross-realm roots (#10136)
  • Allow WebPDF export on Windows (#10131)
  • Preserve aspect ratio for images with numeric dimensions (#10130)
  • Fall back to interpreter completion when jedi static analysis raises (#10100)
  • Make graceful kernel shutdown opt-in to unblock event loop (#10124)
  • Classify SetBreakpointsCommand and resync breakpoints on restart (#10120)
  • Key task-list checkboxes by checked state to prevent stale render (#10114)
  • Extend LSP go-to-definition fallback to context menu and cmd+click (#10102)
  • Increased cache robustness for wire level cell resolution (#10109)
  • Respect per-notebook inline theme when serving a directory (#10101)
  • ASGI credentials reflection (#10107)
  • Fix pie chart rendering when innerRadius is undefined (#10104)
  • Apply mo.ui.dataframe row filter when submitted via .form() (#10092)
  • Render legacy named render/initialize exports (#10093)
  • Don't grey out streaming output in grid and slides layouts (#10094)
  • Fix data editor in fullscreen (#10098)
  • Make the rename symbol popup readable in dark mode (#10091)
  • Fix external go to definition (#10099)
  • Cache os.path.realpath results in _is_user_module (#10086)
  • Readonly view selects SQL language (#10074)
  • Polars lazyframe query plan visualisation fix (#10087)
  • Preserve leading and trailing comments when formatting cells (#10060)
  • Show sql snippet cells as sql instead of python (#10050)
  • Restore write permission on export directory after copytree on Nix (#10041)
  • Expand dict transformation (#9561)

📚 Documentation

  • Fix single-column example in mo.ui.table docstring (#10075)
  • Emphasize non-reactivity of mo.ui.panel in its docstring (#10067)

🔬 Preview features

  • Experimental line_timing — green active-line highlight + per-line timer (#10126)
  • Experimental SSE transport for the kernel connection (MARIMO_SERVER_TRANSPORT) (#10119)
  • Debugger execution lifecycle (#9970)

Contributors

Thanks to all our community and contributors who made this release possible: @akshayka, @brookpatten, @David-Wu1119, @dmadisetti, @eeshsaxena, @Felipenguim, @Hemanth-1354, @kirangadhave, @Light2Dark, @manzt, @mscolnick, @ohmdelta, @Oishe, @peter-gy, @qorexdevs, @VishakBaddur, @wally-an, @yairchu

And especially to our new contributors:

Full Changelog: 0.23.13...0.23.14

Don't miss a new marimo release

NewReleases is sending notifications on new releases.