What's Changed
This release brings threading and multiprocessing to WASM notebooks and makes remote storage browsing scale with search and pagination — alongside table column controls, slide editing improvements, and a broad set of fixes.
⭐️ Highlights
Pyodide 314.0
This release moves marimo's WebAssembly runtime to Pyodide's latest release: Pyodide 314.0. This allows use to use newer versions of duckdb, polars, and pyarrow as well as many other popular packages.
Threading and multiprocessing in WASM
WASM notebooks can now run threading- and multiprocessing-shaped code. marimo installs lightweight adapters for Pyodide so mo.Thread, stdlib threading primitives, and common multiprocessing APIs keep working in the browser, executing on a synthetic thread identity that the marimo runtime context follows (#9839).
Screen.Recording.2026-06-09.at.16.56.56.mov
Scalable remote storage browsing
Browsing large remote storage backends is now practical. Listings paginate behind a "Load more" button instead of loading everything up front, and when a prefix query matches none of the already-loaded entries, marimo pages through the backend to surface remote results — matching on full paths so partial path queries resolve, with clear status while it searches (#9834, #9835).
Screen.Recording.2026-06-10.at.11.56.00.AM.mov
✨ Enhancements
- Search the backend when no loaded entries match (#9835)
- Honor
OTEL_SERVICE_NAMEfor traces (#9906) - Progressively mount cell editors in the editor view (#9904)
- Generate Google Drive connection code for embedded environments (#9884)
- Paginate remote storage listings with a "Load more" button (#9834)
- Threading and multiprocessing adapters in WASM (#9839)
- Gate schema discovery behind "auto" for remote engines (#9784)
- Column visibility dropdown in table top bar (#9865)
- Support ROCM for
/api/usageendpoint (#9773) - Shared select-core for multiselect, dropdown, and filter picker (#9849)
- Per-slide show-code config + editor toggles (#9831)
- Resolve definitions and get docstring (#9838)
- Minimap insert-cell + context menu (#9830)
- Add a toggle to filter empty schemas and db (#9712)
- Wire Dremio dialect into the SQL editor (#9817)
- Allow lazy (callable) filename (#9799)
- Styled tooltip for
mo.ui.tablehover_template (#9780) - Remove beta status for opencode (#9791)
🐛 Bug fixes
- Deflake CI by ignoring finished WASM thread records (#9914)
- Rewrite double-quoted DuckDB sources in WASM (#9925)
- Avoid crash when creating a markdown cell (#9923)
- Stop logging raw AI config at debug level (#9911)
- Handle missing psutil gracefully for Android/Termux (#9872)
- Make WASM
as_completedtimeout deterministic (#9891) - Keep
!-command cells from disabling underscore-privatization on convert (#9873) - Respect user-configured marimo data transformer (#9887)
- Skip chart for nested/unknown column types (#9876)
- Correct editable input behavior with steps and fractional values (#9860)
- Allow async cancellation (#9705)
- Apply ordering to frozen set as it drifts with PYTHONHASHSEED (#9861)
- Highlight python code blocks in ty hover tooltips (#9824)
- Disable speaker notes handle on fullscreen (#9825)
- Disambiguate storage entries with duplicate paths (#9832)
- Add docstring styles for links (#9827)
- Infer provider profile from base_url for custom providers (#9813)
- Store video sources as virtual files instead of inlining (#9812)
- Show static-preview notice once per session (#9796)
- Stop reusable hint flicker on cell updates (#9782)
- Land focus in target cell on right-click Go to Definition (#9795)
- Fix reactive go-to-definition lookup (#9747)
- Coalesce outgoing document transactions to avoid intra-batch conflicts (#9781)
📚 Documentation
- Admonition (#9903)
- Support PEP 508 Emscripten dependency markers (#9864)
- Update SECURITY.md (#9863)
- Add entry on
jupyter-book-marimoplugin (#9802)
📝 Other changes
- Render marimo HTML styled in
mo.ui.chat(#9847, #9888,29352cf) - Preload panel chunks on hover/focus (#9650,
b3c9225) - Update to Pyodide v314.0.0 (#9844)
Contributors
Thanks to all our community and contributors who made this release possible: @agriyakhetarpal, @akshayka, @dmadisetti, @kirangadhave, @koaning, @Light2Dark, @mscolnick, @nkgotcode, @peter-gy, @Set27, @VishakBaddur
And especially to our new contributors:
- @agriyakhetarpal made their first contribution in #9844
- @nkgotcode made their first contribution in #9747
- @Set27 made their first contribution in #9773
Full Changelog: 0.23.9...0.23.10