This release delivers improvements to the AI user experience and adds support for Python 3.14.
AI autofix for cells
When AI generates code suggestions for fixing Python and SQL cells, you can now accept and run the suggested code with a single click of "Fix with AI":
Model Context Protocol (MCP) enhancements
marimo now exposes its AI tools through an MCP server endpoint, allowing external AI applications like Claude Code, Cursor, and VS Code to interact with your notebooks.
marimo edit notebook.py --mcp --no-token
See the MCP documentation to learn more. Special thanks our Resident MCP/AI Engineer @bjoaquinc for driving the implementation and improvements!
Python 3.14 support
marimo now officially supports Python 3.14, released this month. Official support for Python 3.9 has been dropped as it approaches end-of-life in October 2025, though it remains functional for the time being.
✨ Enhancements
- Switch to
msgspec_m
fork (#6774) - Create ToolGuidelines for better Agent orientation of when and how to use marimo tools (#6793)
- Migrate
mo.ui.dataframe
to narwhals; support duckdb, ibis, pandas, polars (#6772) - Support copying raw value for console output (#6751)
- Add prompts and ActiveNotebooks prompt to marimo mcp server (#6760)
- Python 3.14 support (#6712)
- Add structured errors to frontend tools (#6748)
- Intentional sidebar ordering (#6742)
- Add bedrock inference profiles (#6738)
- DRY common package managers install logic (#6685)
- Add detailed output metadata to frontend tools (#6720)
- floating label for AI generations in a cell (#6690)
- Support Iceberg introspection through duckdb (#6707)
- Add multi-tool support for all providers (#6672)
- Reset input on submit in
ai.chat
(#6668) - AI autofix mode for sql cells (#6639)
- Expand cache api to match functools api (#6660)
- Rig up cache api (#6662)
- Add multi-column sorting with stack-based behavior (#6257) (9b58a93)
🐛 Bug fixes
- Watch for file move with watchdog and Claude Code (#6798)
- Tutorial explanation of how to configure lazy execution (#6758)
- Preserve cursor position when updating cell code in watch mode or auto-formatting (#6792)
- Fix empty submits and output area (#6794)
- Jupytext convert with markdown with quotes (#6789)
- Use thead instead of div inside table (#6785)
- Use event loop factory for uvicorn >= 0.36.0 (#6779)
- Pytest-changed (#6761)
- Send function-request when static to show Static Notebook warning (#6765)
- Fix with ai button for all cells (#6755)
- Support initial selection in Plotly plots (#6747)
- Fix dependency panel edges (#6753)
- Format OpenAPI generated files after codegen in build script (#6739)
- Safer windows logging on PermissionErrors (#6735)
- Update regex in Plotly template parser to handle special characters (#6728)
- Ignore prune cache on windows (#6733)
- Use UTF-8 encoding for subprocess calls in package managers (#6729)
- Manually move copilot file extension from js to cjs (#6727)
- Datetime UI element rendering in Docker containers (#6730)
- Respect holoviews hv.output() settings when rendering in marimo (#6732)
- Allow for cache hits from external modules (#6731)
- Allow uv_build < 0.10.0 (#6714)
- Handle OSErrors when seraching for pyproject.toml (#6726)
- Typos ci (#6725)
- New query to get duckdb databases for ducklakes (#6708)
- Run / edit mode for docker (#6724)
- More aggressive file reconciliation in
--watch
(#6701) - Ensure custom content in header (#6709)
- Ensure consistent checking with unparsable cells (#6702)
- Enable stub mechanism for caching un-pickable objects (#6657)
- Handle big ints better (#6768)
- Patch
msgspec
Python 3.14 compatibility (#6749)
📚 Documentation
- Add documentation for mcp server, client, tools, and chat panel modes (#6744)
- Remove duplicate phrase in SQL documentation (#6740)
- Add async cache support (#6736)
- Change READMEs to be more consistent for different languages (#6696)
- Add marimo editable install in pixi env, simplify docs in CONTRIBUTING.md (#6679)
- MCP server ui, auth, and rules (#6659)
- uv-suitable update instructions when using uv (#6681)
- Move sql linter to config instead of feat flag (#6665)
- Verifying fe lints and pre-commmit hooks (#6642)
- Update docs; resolve #6623 (#6693) (42f6183)
📝 Other changes
- Add
mo.ui.plotly
tests (#6757) - Disable snippets for LSP completions (#5949) (07b6cbc)
- Lint breaks (#6658)
Contributors
Thanks to all our community and contributors who made this release possible: @akshayka, @bjoaquinc, @dmadisetti, @eamonburns, @jschfflr, @Light2Dark, @lucharo, @manzt, @mscolnick, @olad5, @Prince213, @rgasper, @schlich, @yairchu
And especially to our new contributors:
- @olad5 made their first contribution in #6642
- @eamonburns made their first contribution in #6696
- @stephenlf made their first contribution in #6693
- @Prince213 made their first contribution in #6714
- @jschfflr made their first contribution in #6736
- @rgasper made their first contribution in #6738
Full Changelog: 0.16.5...0.17.0