What's Changed
This release makes it easier to share slide decks, browse files across directories and GitHub repositories, in addition to many other bug fixes. Some other changes include better geospatial data support with GeoPandas, polars and duckdb, web assembly optimizations, and a condensed graph view to understand your notebook's dependencies.
⭐️ Highlights
Export slides to HTML and WebAssembly
Share notebooks in the slides layout as reveal.js decks, preserving slide structure, fragments, and deck settings. Export static HTML with captured outputs, or use WebAssembly to keep Python controls interactive in the browser.
marimo export html slides.py -o slides.html
marimo export html-wasm slides.py -o slides --mode run
Read the docs for static HTML, or learn about interactive WebAssembly exports.
Browse local folders and GitHub repositories
Keep project files, data directories, and GitHub repositories within reach in the Files panel. Add named local directories in pyproject.toml, or use Add Connection to connect a GitHub repository and browse its files.
[tool.marimo.file_browser]
folders = [
{ path = "/absolute/path/to/data", name = "Data" },
{ path = "/absolute/path/to/assets", name = "Assets" },
]Read the docs for additional local folders, or learn about remote storage connections.
A compact view of notebook dependencies
The dependency graph now shows compact variable summaries, making it easier to follow connections in larger notebooks. Double-click a cell in the graph to expand its code.
✨ Enhancements
- Make the file browser faster and easier to navigate (#10773)
- Condensed dependency graph representation (#10766)
- Show only specific columns from the column menu and explorer (#10768)
- Find connections by provider in command palette (#10749)
- Refresh static notebook run dialog (#10741)
- Persist static code visibility in URL (#10742)
- Refresh the model catalog and restore automated updates (#10735)
- HTML and WASM export of Reveal slides (#10703)
- Read provider keys from environment variables (#10665)
- Stream validated structured cell completions (#10652)
- Make proposed AI edits UI consistent with editor styling (#10595)
- Update LLM model catalog (#10634)
- Preview and edit TOML files with syntax highlighting (#10599)
- Hide redundant notebook download submenu (#10607)
- Upload files directly into folders (#10637)
- Make auto-discovered connections easier to add (#10640)
- Open the JSON viewer for string columns containing JSON documents (#10629)
- Connect GitHub repos from the Add Connection UI (#10604)
- Replace GitHub Models with GitHub Copilot (#10750)
- Allow
mo.latexto accept text directly (#10723) - Add shortcut to create a SQL cell below (#10701)
- Support multi-root file browsing (#10727)
- Install WebAssembly notebook packages in parallel with progress updates (#9702, 78f0366)
- Hide unused providers when
allow_provider_configis false (#10590, 3524643) - Show detected data sources and hide suggestions for existing connections (#10575, ba0219a)
- Add GeoPandas geometry table support (#10536, 205fa16)
- Lint rule for private imports (#10580, 3a1b1da)
- Type exact values and adjust step sizes in
mo.ui.matrix(#10520, 5c3646a) - Add Databricks SQL warehouse discovery plugin (#10556, df8dbed)
- Update LLM model catalog (#10571, 09c2c30)
- Install server requirements for notebook exports (#10473, 397fae2)
🐛 Bug fixes
- Add an exit control to fullscreen cell output (#10769)
- Make cross-cell navigation work before target editors finish loading (#10708)
- Map
geoarrowimports togeoarrow-types(#10659) - Preserve newlines in iframe
srcdoc(#10668) - Map
maceimports tomace-torch(#10594) - Detect CRS-qualified DuckDB geometry (#10643)
- Set explicit browser cache headers (#10614)
- Preserve insertion order for NumPy integer dictionary keys (#10788)
- Serialize Polars cache values with native IPC (#10775)
- Respect a single supplied bound when choosing the default
mo.ui.date_rangevalue (#10649) - Keep marimo running when tracing dependencies are missing (#10758)
- Fix scope renaming during notebook conversion (#10748)
- Use Ctrl for AI shortcuts on Windows (#10751)
- Preserve unqualified references in methods (#10679)
- Handle spaces in package extras (#10686)
- Prevent nested progress output from shaking (#10743)
- Preserve virtual ESM URLs (#10687)
- Make edit replay robust across structural changes (#10662)
- Fix reference ordering for recursive private functions (#10678)
- Update the Matplotlib pin in tutorials to avoid
Path.__deepcopy__recursion (#10702) - Accept covariant mappings in
mo.ui.dictionaryand.batch(#10653) - Stop listing unavailable Kimi K3 on W&B (#10689)
- Make catalog discovery reuse one connection (#10636)
- Match generated filter code to the widget's literal
containsoperator (#10617) - Fix table-cell edit styling and popover dismissal (#10622)
- Resolve the default database for Snowflake engines without a database in the URL (#10616)
- Derive canvas draw scale from the backing store (#10626)
- Validate that checkbox values are booleans (#10601)
- Reject an empty-string value in
mo.ui.file_browser(#10613) - Fix code lens tooltip jitter (#10591)
- Route AI tool arguments to the correct tool (#10597)
- Store a keyed hash of the auth token in the session cookie (#10691)
- Preserve dataframe state after unmounting (#10762, #10759, 69e0067)
- Use Ctrl for chart pan and zoom on non-macOS platforms (#10496, #3812, b4181ab)
- Restore streaming package installation in WebAssembly notebooks (#10522, c3717b7)
- Sanitize signing config from untrusted layers (#10525, 55e2a22)
- Handle delimiters when detecting URLs in table cells (#10570, eb9960f)
- Suppress warnings for duration columns in column summaries (#10531, 666e922)
- Pass real JSON schema through for MCP/backend tools (#10573, 9131759)
- Fix Slurm script execution and refresh deployment examples (#10469, f1b3678)
📚 Documentation
- Fix the SQL Support link in the
sql_parse_errorlint rule (#10757) - Fix the
mo.videoexample (#10731) - Keep sidebar code mode aligned with marimo-pair (#10683)
- Update the molab storage documentation (#10672)
- Add a callout to use Jupyter-to-marimo agent skill (#10593)
📝 Other changes
- Restore typechecking with Click 8.4 (#10738)
- Skip the Scattermapbox selection test when Plotly removes it (#10721)
- Update actions/checkout digest (#10710)
- Update all oxc dependencies (#10700)
- Update all storybook dependencies to ^10.5.10 (#10673)
- Update codemirror dependencies (#10482, 0a80490)
- Update build tools (#10630)
- Update dependency @testing-library/jest-dom to v7 (#10619)
- Restore current JAX coverage after Flax compatibility fix (#10669)
- Generate OpenAPI schema for UI plugin contracts (#10513, 257ea7a)
- Unblock Flax tests during JAX compatibility window (#10646)
- Update pre-commit hooks (#10578, 96a4942)
- Make session resume E2E retries reliable (#10588, cad0f45)
- Introduce SigningPolicy and rename mode to verification (#10524, 3dbe26f)
- Add geometry fixture corpus and baselines (#10516, eece28b)
- Enable four additional Ruff checks (#10586, 4e4efcc)
- Keep custom SSL clients type-safe on openai 3 (#10587, e878ff7)
- Migrate to MCP 2 (#10581, 849f16b)
- Scope debugger ignore (#10540, ea3be97)
- Remove stale ignores (#10539, c092a67)
- Move cache configuration from
experimental.cachetocache.storeand add signing fields (#10523, 7ff2b4d)
Contributors
Thanks to all our community and contributors who made this release possible: @Abdulrehman-PIAIC80387, @abelsiqueira, @afonsojanu, @akshayka, @alchem0x2A, @Aniket-a14, @dmadisetti, @Jacky-J126, @kirangadhave, @kjgoodrick, @koaning, @ktaletsk, @Light2Dark, @manzt, @matemijolovic, @mscolnick, @Nikhil-Koganti, @peter-gy, @pylrn, @robd518, @sha2fiddy, @winklemad
And especially to our new contributors:
- @abelsiqueira made their first contribution in #10626
- @afonsojanu made their first contribution in #10702
- @alchem0x2A made their first contribution in #10594
- @Aniket-a14 made their first contribution in #10701
- @Jacky-J126 made their first contribution in #10757
- @matemijolovic made their first contribution in #10762
- @Nikhil-Koganti made their first contribution in #10496
- @pylrn made their first contribution in #10723
- @sha2fiddy made their first contribution in #10616
Full Changelog: 0.24.0...0.24.1

