Highlights ⭐
🧮 Tables: small touches that go a long way. We're continuing to craft a delightful user experience for working with dataframes and tables.
Every table now comes with an expandable column viewer that lets you drill down into their data distribution:
column_explorer.mp4
You can now adjust the page size with a dropdown:
🤖 Improved AI chat experience. Our AI-powered chatbot — which knows about your data! — now supports reasoning tokens and persists chat history.
chat-sidebar.mp4
📦 Install package extras with our UI.
trevmanz.-.1932822219081589191.mp4
🐻❄️ Polars execution plans, with mermaid diagrams. Polars lazy-frames now produce an explain graph using mermaid.
⚡️ Connection state. Improved backend connection detection and disabled editor features until connected.
Many stability improvements and bug fixes.
What's Changed
- tidy: store cleanup by @dmadisetti in #5121
- chore(deps): update to ai-sdk/react (useChat import), isLoading → status by @bjoaquinc in #5127
- improvement: improve uv projects detection by @mscolnick in #5123
- chore: cleanup config passing to HTML from server by @mscolnick in #5120
- fix: sync activeChatId with messages when creating new thread or switching threads by @bjoaquinc in #5130
- docs: make contributing docs succinct by @winstxnhdw in #5128
- docs: add example notebook link for slides layout by @Haleshot in #5138
- fix: just exit on non-interactive terminals by @mscolnick in #5126
- feat: add ai chat persistence between sessions by @bjoaquinc in #5141
- docs: update
watching.md
to reflect support for data file watching by @Haleshot in #5137 - fix: handle json duckdb datatype by @mscolnick in #5144
- improvement: notebook schema serialization by @mscolnick in #5131
- Minor correction in fileformat.py by @killickm in #5149
- docs: fix image rendering in carousel preview by @Haleshot in #5148
- improvement: selectable row viewer by @Light2Dark in #5147
- feat: add
mo.image_compare()
| image comparison slider by @Haleshot in #5091 - chore(deps): update build tools by @renovate in #5049
- chore(deps): update dependency hvplot to ~=0.11.3 by @renovate in #5151
- chore(deps): update dependency boto3 to >=1.38.26 by @renovate in #5150
- feat: add frontend schema for redshift by @Light2Dark in #5140
- feat: add redshift engine by @Light2Dark in #5132
- improvement: marimo converters to/from various formats by @mscolnick in #5146
- security: Create policy and thank previous reporters by @dmadisetti in #5162
- feat: add reasoning tokens in chat panel and reasoning support for anthropic by @bjoaquinc in #5159
- fix: add cell ids to deserialize by @mscolnick in #5165
- fix: add cell ids to deserialize by @mscolnick in #5166
- Add mechanism for injecting custom file stores by @pepijndevos in #5161
- fix: skew potection token in run-mode when auth is enabled by @mscolnick in #5168
- fix: broken CI with mac anthropic by @dmadisetti in #5173
- feat: allow env level app overrides by @dmadisetti in #5172
- chore: publish dev to test-pypi by @mscolnick in #5174
- chore: publish dev to test-pypi by @mscolnick in #5175
- fix: CI pass by @dmadisetti in #5177
- fix: inline favicon by @mscolnick in #5181
- Create ipynb fixtures for
marimo convert
and snapshot outputs by @manzt in #5179 - fix(anthropic): set temperature = 1 for extended-thinking models by @bjoaquinc in #5190
- feat: add ai reasoning tokens and other parts persistence between sessions by @bjoaquinc in #5191
- chore: add tests for sql function by @Light2Dark in #5189
- chore(convert): Move
_transform_sources
tests to snapshot-based tests by @manzt in #5194 - Add support for initial chart properties in
data_explorer
(take 2) by @janosh in #5171 - Use runtime assertions instead of type assertions by @manzt in #5208
- Support some JupyterBook cell tags in marimo convert by @manzt in #5169
- improvement: allow for different backends by @mscolnick in #5187
- feat: Skip undo delete toast for empty cells by @manzt in #5209
- chore: add suspense for terminal by @Light2Dark in #5211
- Default to
uv
package manager when launched fromuv
by @manzt in #5213 - docs (ai completion): add instructions for Ollama by @tobiasschweizer in #5212
- Discover
uv
executable withUV
environment variable by @manzt in #5215 - fix: Skip PEP 723 check on directories by @manzt in #5216
- Modify docs for readability and consistency by @gublit in #5222
- fix: home edit mode with separated backend by @dmadisetti in #5235
- fix(deps): update codemirror dependencies by @renovate in #5225
- chore: update ai model list by @bjoaquinc in #5232
- chore: upgrade ai backend from google-generativeai (deprecated) -> google-genai by @bjoaquinc in #5226
- fix: add reasoning config only if is reasoning model by @bjoaquinc in #5221
- chore: remove old feature flags by @Light2Dark in #5241
- improvement: condense / cleanup static banner by @mscolnick in #5245
- fix: table cell styles index error by @Light2Dark in #5253
- feat: add MarkdownRenderer to ReasoningAccordion by @bjoaquinc in #5248
- feat: change page size in tables directly by @Light2Dark in #5243
- fix: disable charts for > max_rows without vegafusion by @Light2Dark in #5224
- feat: Render mermaid-based (optimized) query plan for
pl.LazyFrame
by @manzt in #5247 - feat: runtime config link fix by @dmadisetti in #5256
- chore(google): updated mo.ui.chat to use google-genai instead of google-generativeai by @bjoaquinc in #5258
- improvement: handle waiting until connection is healthy by @mscolnick in #5259
- fix: don't block when writing auto-export files by @mscolnick in #5254
- chore: upgrade to react 19 by @Light2Dark in #5249
- fix: (outlines) Headings with the same name are highlighted multiple… by @jo-soft in #5176
- docs: add numfocus affiliation by @akshayka in #5267
- fix: centering/aligning of file-button by removing flex-grow by @mscolnick in #5266
- style: improve page size input styles by @Light2Dark in #5264
- docs: make numfocus logo smaller, add to docs homepage by @akshayka in #5268
- chore: remove context provider & update types (react 19) by @Light2Dark in #5252
- fix: allow authToken in mount config by @mscolnick in #5269
- chore: add defaults to table args by @mscolnick in #5263
- feat: Allow selecting optional "extras" for missing packages by @manzt in #5260
- feat: Allow black/white list in extensions by @dmadisetti in #5271
- Make async data states impossible to misrepresent in
useAsyncData
by @manzt in #5272 - fix: types error in test by @Light2Dark in #5275
- fix: handle edit message bug by @bjoaquinc in #5274
- fix: add suspense to prevent screen flicker for col-explorer & datasources chart by @Light2Dark in #5273
- fix: graceully handle other url protocols by @mscolnick in #5278
- fix: anywidget remote url by @mscolnick in #5279
- styles: diagnostics padding by @mscolnick in #5277
- fix: suspense on terminal by @mscolnick in #5283
- feat: enhance
ImportError
handling for better package suggestions by @manzt in #5281 - improvement: connecting indicator and readonly tooltip by @mscolnick in #5284
- fix: allow for base url redirects by @dmadisetti in #5287
- docs: emphasize generate with ai by @akshayka in #5289
- Fixed typo in dataflow.py (ampltitude -> amplitude) by @jogloran in #5288
- readme: fix link by @akshayka in #5290
- chore: biome 2x by @mscolnick in #5291
- fix: snapshot by @mscolnick in #5292
- Adding some extra module names by @koaning in #5295
- style: don't wrap page size input when cell is too small by @Light2Dark in #5301
- improvement: make our file-explorer more compatible with s3 mount by @mscolnick in #5286
- fix: WS are static on creation by @dmadisetti in #5294
- nit: connecting copy in the editor by @akshayka in #5305
- docs: link to repo in docs by @akshayka in #5306
- docs: ipynb snapshots working with expensive notebooks by @akshayka in #5307
- feat: cell range selection for tables (v2) by @Light2Dark in #5296
- fix: undefined errors that may crop up before kernel is fully instantiated by @dmadisetti in #5313
- fix: wait for connection on more requests by @mscolnick in #5314
- fix: more waiting for connection logic by @mscolnick in #5316
- style: datasource icons dark mode by @Light2Dark in #5317
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #5315
- fix: version init by @mscolnick in #5324
- fix: more Supsense in more places by @mscolnick in #5325
- fix: show wasm always always connected by @mscolnick in #5331
- fix: merge default config on save_user_config by @mscolnick in #5330
- fix: dark mode charts and json viewer crashing by @Light2Dark in #5332
- fix: invalidate importlib cache after requirecheck fails by @mscolnick in #5328
- Extend
view-as
URI parameter to handle app view in edit mode by @harterrt-shopify in #5327 - chore: disable cell range selection for release by @mscolnick in #5334
- tests: fix ibis datatype drift by @mscolnick in #5333
- fix: reasonable session and notebook merge by @dmadisetti in #5335
- fix: disable run when not connected by @mscolnick in #5342
New Contributors
- @winstxnhdw made their first contribution in #5128
- @killickm made their first contribution in #5149
- @pepijndevos made their first contribution in #5161
- @tobiasschweizer made their first contribution in #5212
- @gublit made their first contribution in #5222
- @jo-soft made their first contribution in #5176
- @jogloran made their first contribution in #5288
- @harterrt-shopify made their first contribution in #5327
Full Changelog: 0.13.15...0.14.0