## marimo-team/marimo — 0.24.0…0.24.1

_129 commits._

### Features
- **feat: make the file browser faster and easier to navigate (#10773)** (7203417)
- **feat(ai): replace GitHub Models with GitHub Copilot (#10750)** (10ae502)
- **feat(markdown): allow mo.latex to accept text directly (#10723)** (160274c)
- **feat(table): `show only` columns from the column menu and explorer (#10768)** (0419bb8)
- **feat(command-mode): add shortcut to create a SQL cell below (#10701)** (6dca180)
- **feat: find connections by provider in command palette (#10749)** (d71a29f)
- **feat: persist static code visibility in URL (#10742)** (a8bf3eb)
- **feat: support multi-root file browsing (#10727)** (4daf46b)
- **feat: HTML and WASM export of Reveal slides (#10703)** (24d3abc)
- **feat: stream initial package installations for WASM (#9702)** (78f0366)
- **feat(ai): read provider keys from environment variables (#10665)** (9b2a7ac)
- **feat(ai): hide unused providers when allow_provider_config is false (#10590)** (3524643)
- **feat(ai): stream validated structured cell completions (#10652)** (16efdda)
- **feat(frontend): generate OpenAPI schema for UI plugin contracts (#10513)** (257ea7a)
- **feat: preview and edit TOML files with syntax highlighting (#10599)** (0b96055)
- **feat: upload files directly into folders (#10637)** (1784871)
- **feat: make auto-discovered connections easier to add (#10640)** (f0b2b75)
- **feat(cache): sanitize signing config from untrusted layers (#10525)** (55e2a22)
- **feat(storage): connect GitHub repos from the Add Connection UI (#10604)** (289c7ee)
- **feat: set explicit browser cache headers (#10614)** (3f76d9d)
- **feat: add GeoPandas geometry table support (#10536)** (205fa16)
- **Add a callout to use Jupyter-to-marimo agent skill (#10593)** (d560b48)
- **feat(mcp): migrate to MCP 2 (#10581)** (849f16b)
- **feat: lint rule for private imports (#10580)** (3a1b1da)
- **feat(data): add Databricks SQL warehouse discovery plugin (#10556)** (df8dbed)
- **feat(export): install server requirements (#10473)** (397fae2)
- **feat(cache): formalize caching config and add signing fields (#10523)** (7ff2b4d)

### Fixes
- **fix: dataframe should preserve state on unmount (#10759) (#10762)** (69e0067)
- **fix: preserve insertion order for NumPy integer dictionary keys (#10788)** (982d8cd)
- **fix: serialize Polars cache values with native IPC (#10775)** (b0f23f4)
- **fix(dates): date_range default respects a single supplied bound (#10649)** (0336d5c)
- **fix: add an exit control to fullscreen cell output (#10769)** (f596e6b)
- **fix: respect non-color accessibility preferences (#10770)** (172dcbc)
- **fix: keep marimo running when tracing dependencies are missing (#10758)** (0cfb49e)
- **fix(deps): restore clean frontend installs (#10756)** (a96aa21)
- **fix(deps): update codemirror dependencies (#10482)** (0a80490)
- **fix: conversion scope rename fails (#10748)** (1ece33a)
- **fix editor: use Ctrl for AI shortcuts on Windows (#10751)** (a7e2bd1)
- **fix(vega): use ctrl for chart pan/zoom on non-mac platforms (#3812) (#10496)** (b4181ab)
- **fix: preserve unqualified references in methods (#10679)** (bb3532a)
- **fix(packages): handle spaces in package extras (#10686)** (5cf2705)
- **fix: prevent nested progress output from shaking (#10743)** (c5c99aa)
- **fix(ci): restore automated LLM catalog updates (#10735)** (ac243ed)
- **fix(cli): restore typechecking with Click 8.4 (#10738)** (535c156)
- **fix(anywidget): preserve virtual ESM URLs (#10687)** (0ffeba2)
- **fix(data-editor): make edit replay robust across structural changes (#10662)** (8869b18)
- **fix(wasm): make the streaming micropip install engine actually run (#10522)** (c3717b7)
- **fix: recursive private functions break due to reference order (#10678)** (1ba2080)
- **fix: accept a covariant Mapping in tabs, accordion, and routes (#10712)** (ca9b8c9)
- **fix(frontend): build queued cell editors on cross-cell jumps (#10708)** (cb79588)
- **fix: make semantic status colors theme-aware (#10699)** (2bfa22d)
- **fix: map geoarrow to geoarrow-types (#10659)** (1ee282b)
- **fix(llm-info): stop listing unavailable Kimi K3 on W&B (#10689)** (1269547)
- **fix(frontend): include unmounted cells in LSP and Copilot context (#10677)** (efada45)
- **perf(sql): make catalog discovery reuse one connection (#10636)** (140bf82)
- **fix: map mace imports to mace-torch (#10594)** (075ebda)
- **fix(dataframes): generated filter code should match the widget for the literal `contains` operator (#10617)** (9fc1796)
- **fix: detect CRS-qualified DuckDB geometry (#10643)** (90a8d1f)
- **fix(table): preserve pandas sentinels by output mode (#10618)** (f470f31)
- **perf(frontend): migrate to Vite 8 and the Oxc-backed React Compiler (#10641)** (3c90228)
- **fix(tests): compare Pygments HTML output semantically across 2.19–2.21 (#10642)** (ad02456)
- **fix(tables): stop URL linkification at delimiters, not whitespace (#10570)** (eb9960f)
- **fix(table): open the JSON viewer for str columns that hold JSON documents (#10629)** (727f2a4)
- **fix: style edits and popover close on table cells (#10622)** (ec6ed9a)
- **fix(sql): resolve default database for snowflake engines without a database in the URL (#10616)** (d5aedfa)
- **fix(matplotlib): derive canvas draw scale from the backing store (#10626)** (3955fdf)
- **fix: ignore warnings for duration in column summaries. (#10531)** (666e922)
- **fix(ui): validate that checkbox value is a bool (#10601)** (ac259d3)
- **fix(file_browser): reject an empty-string value (#10613)** (4c33fb9)
- **fix(file_browser): report missing paths as not found (#10610)** (07edae2)
- **Fix code lens tooltip jitter (#10591)** (001c892)
- **fix(ai): keep custom SSL clients type-safe on openai 3 (#10587)** (e878ff7)
- **fix(ai): pass real JSON schema through for MCP/backend tools (#10573)** (9131759)
- **fix: slurm script regression and docs/examples update (#10469)** (f1b3678)

### Backend
- **release: 0.24.1 (#10793)** (fa0eeff)
- **improvement(frontend): condensed dependency graph representation (#10766)** (94221e4)
- **improvement: refresh static notebook run dialog (#10741)** (e363c24)
- **security(server): store keyed hash of auth token in session cookie (#10691)** (32efbee)
- **Bump matplotlib pin in tutorials to avoid Path.__deepcopy__ recursion (#10702)** (f9f475d)
- **ci test: tolerate standards-compliant Obstore ETags (#10720)** (abade1d)
- **Unify Markdown typography across renderers (#10709)** (2c3a53b)
- **Accept a covariant Mapping of elements in ui.dictionary and .batch (#10653)** (07921bd)
- **Preserve newlines in iframe srcdoc (#10668)** (7d0f7c4)
- **Make proposed AI edits UI consistent with editor styling (#10595)** (2b6eef3)
- **Update LLM model catalog (#10634)** (5efd56b)
- **Hide redundant notebook download submenu (#10607)** (81e0e61)
- **[pre-commit.ci] pre-commit autoupdate (#10578)** (96a4942)
- **data sources: surface env detections, hide them once connected (#10575)** (ba0219a)
- **test flake: remove scheduler timing from async progress test (#10603)** (dece009)
- **mo.ui.matrix: type-to-edit cells and modifier-key scrubbing (#10520)** (5c3646a)
- **Update LLM model catalog (#10571)** (09c2c30)

### Tests
- **test(sql): remove flaky connection timing assertions (#10745)** (9753b9f)
- **test: skip Scattermapbox selection test when plotly removes it (#10721)** (e2a1f98)
- **test: add visual regression harness (#10670)** (59ef0a9)
- **test: make session resume E2E retries reliable (#10588)** (cad0f45)
- **test: deflake websocket room-membership assertion (#10615)** (eeda2fa)
- **test: add geometry fixture corpus and baselines (#10516)** (eece28b)
- **test: eliminate Altair formatter network flake (#10596)** (71c5b98)

### Docs
- **docs: fix broken SQL Support link in sql_parse_error lint rule (#10757)** (06ddf95)
- **docs: fix mo.video example (#10731)** (69747cf)
- **docs(ai): keep sidebar code mode aligned with marimo-pair (#10683)** (8d130b9)
- **docs: molab storage (#10672)** (b6723ea)

### Chore
- **chore: adopt disabled test rule (#10789)** (492c693)
- **chore(ruff): handle unexpected REST cache responses (#10790)** (bf7f531)
- **chore: adopt accessible label rule (#10782)** (952f422)
- **chore(ruff): ensure cleanup after context errors (#10760)** (c491a7a)
- **chore(deps): update actions/checkout digest (#10710)** (7f03ada)
- **chore: adopt table accessibility role rule (#10776)** (219125d)
- **chore: adopt Oxlint purity rule (#10772)** (e01925d)
- **chore: adopt stable Oxlint rules (#10771)** (333febc)
- **chore(deps): update all oxc dependencies (#10700)** (b84f140)
- **chore: drop dead workflow (#10765)** (296e39a)
- **chore(ruff): enable string handling checks (#10747)** (66f1df7)
- **chore(deps): update all storybook dependencies to ^10.5.10 (#10673)** (b4f1dd3)
- **chore(deps): update build tools (#10630)** (8b0dcec)
- **chore(ruff): enable collection idiom checks (#10744)** (77aae1e)
- **chore(deps): update dependency @testing-library/jest-dom to v7 (#10619)** (aae3c13)
- **chore(ruff): enforce exception logging checks (#10722)** (90617b1)
- **chore(ruff): enable dictionary comprehension check (#10684)** (48f32bc)
- **chore(ruff): enable type variable and docstring checks (#10660)** (5c888b9)
- **ci: restore current JAX coverage after Flax compatibility fix (#10669)** (8887b18)
- **ci: unblock Flax tests during JAX compatibility window (#10646)** (6d8d62f)
- **chore(ruff): enable unused unpack check (#10645)** (1aa4320)
- **chore(ruff): enable useless try-except check (#10621)** (4d64c39)
- **refactor(cache): introduce SigningPolicy and rename mode to verification (#10524)** (3dbe26f)
- **chore(ruff): enable four low-risk checks (#10586)** (4e4efcc)
- **refactor(ai): add tests, refactor function (#10597)** (9d34d44)
- **chore(ruff): scope debugger ignore (#10540)** (ea3be97)
- **chore(ruff): remove stale ignores (#10539)** (c092a67)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/marimo-team/marimo?utm_source=github-action)._