## marimo-team/marimo — 0.24.2…0.25.0

_90 commits._

### Features
- **Add `expand_output` cell decorator (#10911)** (01417dc)
- **feat: add Lens to optional dependency dialog (#10950)** (826edc1)
- **feat: self-contained WASM export bundles for offline use (#10879)** (eed9fb1)
- **feat: support single-file WASM exports (#10878)** (9eb4fa4)
- **feat(pair): add opt-in CLI prompts for agent pairing (#10889)** (4c64fc4)
- **feat: open the issue-report modal from the error fallback (#10875)** (dd4bf43)
- **feat(pair): add an agent-facing CLI for live notebook sessions (#10777)** (020ef25)
- **feat: automatically mount Lens when installed (#10814)** (20017b5)
- **feat: allow accordion items to start expanded (#10824)** (eea52ea)
- **enhancement: default new SQL cells to an available connection (#10826)** (b7f6cf2)

### Fixes
- **Supply startup in dotenv session regression test (#10970)** (66000ab)
- **Revert "fix: stop nested scroll regions from chaining to the notebook" (#10968)** (2b0b747)
- **fix: resolve blank slides and broken links in server-side PDF export (#10501) (#10560)** (95e315c)
- **fix: recognize marimo dependency with '!=' version specifier (#10963)** (c0c9e03)
- **fix: recover file browser after cached output resets (#10862)** (146cf3d)
- **fix(pair): use the latest release outside editable installs (#10966)** (2f6f8ba)
- **fix(config): resolve `.env` relative to the notebook when no `pyproject.toml` (#10583)** (f23d661)
- **fix(sandbox): tidy missing-backend error, empty notebook, and double close (#10954)** (2cfe2b1)
- **fix: disable thinking for inline autocomplete (#10890)** (b3c0104)
- **fix(runtime): run async notebooks from inside a running event loop (#10505)** (155ed0c)
- **fix: address mo-7713 (#10939)** (f60d46f)
- **fix(frontend): collapse all sections when nested heading ranges share an end cell (#10923)** (ba9cd07)
- **fix(acp): wait for initialization before starting sessions (#10927)** (a617c19)
- **fix: preserve local images in HTML and PDF exports (#10938)** (b129be3)
- **fix: expand home directory in custom CSS paths (#10829)** (de87d5a)
- **fix: strip quotes and whitespace from %env values in ipynb conversion (#10904)** (91424ca)
- **fix(a11y): preserve cell-toolbar keyboard activation (#10827)** (d88680c)
- **fix: unify Polars numeric checks and restore cache version 5 (#10816)** (386ada0)
- **fix: selectively prune modules on pytest (#10908)** (e5686b9)
- **fix(runtime): defer browser discovery until a cell uses webbrowser (#10887)** (8be967d)
- **Fix image_compare expand output bug (#10907)** (50e6860)
- **fix(ai): send stable conversation headers to OpenCode Go (#10895)** (17dd046)
- **fix: stop sandbox export children reliably on termination (#10891)** (43c1089)
- **fix: allow Jedi 0.20.0 (#10863)** (0ae433d)
- **fix: boolean column stats counted nulls as False, displaying incorrect totals (#10866)** (fe5d9e6)
- **fix: resolve notebook paths when running cells with pytest (#10864)** (7322384)
- **fix: fall back to CSV for Altair charts without pyarrow (#10855)** (39d28c7)
- **fix(markdown): render display math nested in list item continuations (#10785)** (5aa823f)
- **fix: prevent console crashes when input prompts are interrupted (#10854)** (ca1ff1c)
- **fix: codex marimo pair skill detection (#10671)** (f0e5a97)
- **fix(agent-panel): recover prompt submits failures (#10818)** (35411d7)
- **fix: render multiline tooltips with normalized line endings (#10850)** (18e2e49)
- **fix: support multiline text in data-tooltip attributes (#10851)** (1e6cd33)
- **fix(deps): update all npm non-major dependencies (#10714)** (f857930)
- **fix: stop nested scroll regions from chaining to the notebook (#10807)** (e750ab9)
- **fix: allow slow CLI startup in CI (#10834)** (0151fbd)
- **fix(home): surface when the workspace file scan is truncated (#10550)** (4af1174)
- **Fix dependency installation in island payloads (#10832)** (1495aa7)
- **fix: initialize terminal dimensions before shell startup (#10830)** (8521d66)
- **fix: truncate long column names in columns menu (#10831)** (8533cd2)

### Backend
- **release: 0.25.0 (#10969)** (d9a60e7)
- **Keep sandbox setup separate from installed packages (#10944)** (7479238)
- **Reframe package management docs around projects and sandboxes (#10940)** (e8d93e8)
- **Refresh the FastAPI example (#10945)** (2987562)
- **Give sessions a stable internal ID (#10906)** (8742797)
- **Stop sandbox export children on SIGINT during startup (#10905)** (176c01f)
- **More YT videos in docs (#10623)** (76df970)
- **Unify sandbox execution and async startup (#10821)** (cbb66e0)
- **Replace JSON viewer to remove MUI and Emotion (#10865)** (d82cc21)
- **[pre-commit.ci] pre-commit autoupdate (#10707)** (b700da3)
- **Update LLM model catalog (#10828)** (a9f3bff)
- **Own sandbox environments by notebook (#10728)** (1793fe5)
- **Run notebook sandboxes from uv script environments (#10696)** (3ae4a15)
- **Centralize uv and PEP 723 operations (#10695)** (2337d08)

### Tests
- **test: avoid racing session TTL cleanup (#10859)** (0d100e1)
- **test: restore conditional-expect lint in ACP initialization (#10947)** (1f8b6f8)
- **test: fix heartbeat races and ASGI CI hangs (#10835)** (34c088a)
- **test: await presentation-mode rejections (#10804)** (fafd2d9)

### Docs
- **docs: explain OpenCode Go session headers and overrides (#10921)** (fa0c53a)
- **docs: add Studio and Lens CLI tips (#10873)** (e35a61a)
- **docs: stop the docs font size from scaling up on wide screens (#10914)** (ac70466)
- **docs: update security contact email address (#10886)** (e8009f0)

### Chore
- **chore(ruff): close files with context managers (#10952)** (043b7c7)
- **chore(ruff): require explicit local datetime defaults (#10948)** (d8801c6)
- **chore: make test assertions deterministic (#10934)** (3fcb51a)
- **refactor(wasm): pass version through runtime config (#10920)** (397b26b)
- **chore(ruff): require review for unsafe subprocess hooks (#10933)** (33ad08e)
- **chore: include marimo-lens in recommended dependencies (#10897)** (0459b3e)
- **chore: require descriptive snapshot hints (#10892)** (3bea439)
- **chore(ruff): defer logging conversions (#10885)** (0c697a2)
- **chore: enable React immutability lint (#10884)** (5d5ea3f)
- **chore(ruff): align lint rules with Ruff 0.16.6 (#10860)** (a4f6f0d)
- **chore: enable derived-state effect lint (#10868)** (013e4d9)
- **chore: enable noninteractive interaction lint (#10861)** (e6eab8d)
- **chore: enable manual memoization lint rule (#10844)** (1190581)
- **chore(ruff): enable explicit pytest regex checks (#10857)** (9f9ee0c)
- **chore(ruff): standardize optional union ordering (#10845)** (fe51783)
- **refactor: align React memo dependencies (#10820)** (b3212d0)
- **chore(ruff): enable single-item membership checks (#10805)** (f99bee5)
- **ci: migrate LLM sync actions to Node 24 (#10825)** (9069751)

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