Skip to content

Releases: marimo-team/marimo

0.17.5

30 Oct 21:39

Choose a tag to compare

We made a few more changes to our markdown parsing.

You may have a bit more code-drift at first, but this change aims to prevent common merge-conflicts, ruff formatting conflict, and edge-cases with various markdown syntax.

What's Changed

Full Changelog: 0.17.4...0.17.5

0.17.4

30 Oct 13:48

Choose a tag to compare

Important bug fixes for markdown cells.

What's Changed

Full Changelog: 0.17.3...0.17.4

0.17.3

29 Oct 21:25

Choose a tag to compare

What's Changed

This release adds support for OpenAI's Codex agent in the AI chat sidebar, improves Altair chart interactivity, and includes important bug fixes and performance improvements.

Codex Agent Support

Use OpenAI's Codex agent in the AI chat sidebar by selecting "Codex" from the agent dropdown. The agent can help with code editing, debugging, and notebook modifications.

Altair and Vega-Lite Enhancements

Marimo now uses Vega-Lite 6. Charts support legend-based selection in composite charts (layered, vconcat, hconcat), binned data selection, and images in tooltips. Table charts are now faster and handle string columns with up to 20k rows.

✨ Enhancements

  • Better console and cell error parsing/prompts in Agent mode (#6961)
  • Improve performant table charts, remove feat flag (#6892)
  • Altair legend selection for composite charts (#6971)
  • Re-initialize LSP on reconnect (#6967)
  • Document AppMeta and make it public (#6939)
  • Handle nested sql statements for sql smart cells (#6947)
  • Better error handling in type-mismatch for mo.ui.altair_chart (#6986)
  • Support binning point selection in altair (#6983)
  • Support images in vega/altair tooltips (#6934)
  • Add back floating outline (#6933)
  • Add support for Codex agent (#6901)
  • Speed up function natural_sort by 120% (#6975)
  • Generate different sql code based on dialect (#6915)

🐛 Bug fixes

  • Fallback for chart.to_dict() and don't mutate charts (#6972)
  • Chart sizing with nested hconcat in vconcat (#6970)
  • Escape special characters in frontend altair chart builder (#6973)
  • Cache completion item to avoid jitter (#6946)
  • Update anchor link handling to retain query params (#6930)
  • Fix polars test (#6952)
  • Quote table and col names from postgres and duckdb too (#6942)
  • Fix tests by casting enum to string for polars (#6936)

📚 Documentation

  • Enforce markdown formatting on save (#6969)
  • Fix file.md example (#6966)
  • Aws bedrock regions (#6964)
  • Include new backend and frontend tools, chat panel agent mode, and mcp server video (#6954)
  • Correct prompts.md typo (#6945)

📝 Other changes

  • Upgrade vega-embed in lockfile as well (#6984)
  • Set all vega renderer to canvas except col header charts (#6985)
  • Upgrade to vega lite 6, react-vega 8 (#5641) (0adb3b2)
  • DRY GetActiveNotebooks tool and ActiveNotebooks prompt and improve outputs (#6976)
  • Enable passing in token password from file (#6974)
  • Set initial mode for islands (#6950)
  • Add tests for nested markdown in smart cells (#6949)
  • More edge cases for duckdb pivot (#6944)
  • Update all storybook dependencies to ^9.1.14 (#6943)
  • Update all storybook dependencies to ^9.1.13 (#6935)
  • Find cell id through shadow doms (#6929)
  • Add new backend tools to basestruct test (#6925)

Contributors

Thanks to all our community and contributors who made this release possible: @bjoaquinc, @dmadisetti, @koaning, @kyrre, @Light2Dark, @macota, @misrasaurabh1, @mscolnick, @SamarJyoti496

And especially to our new contributors:

Full Changelog: 0.17.2...0.17.3

0.17.2

24 Oct 20:14

Choose a tag to compare

Important bug fix for plotly charts

What's Changed

Full Changelog: 0.17.1...0.17.2

0.17.1

24 Oct 18:06

Choose a tag to compare

What's Changed

Important: Embedded JavaScript in markdown will now be stripped - this is a feature, not a bug! Users who need to render custom HTML/JS should use mo.Html() or mo.iframe() instead of mo.md().

Break: markdown output (mo.md) is always sanitized by default. This is so application builders don't need to worry about sanitizing their own input when interpolating in markdown and inputs, e.g. mo.md(f"Hello {user_input.value}")
own.

Break: All outputs are sanitized before any cell is run. This is to prevent accidental running of JavaScript when opening a notebook.

Experimental Agent Mode - New experimental agent mode in the AI chat sidebar with tools to edit cells, run cells, and read their outputs.

✨ Enhancements

  • Add google-genai dependency to recommended, tweak marimo env optional deps (#6826)
  • Add GetCellOutputs tool and get_llm_context for all UIElement classes (#6889)
  • Handle SSL configuration for other openai compat config. (#6907)
  • Implement ReconnectingWebSocketTransport for improved WebSocket handling (#6909)
  • Better tracebacks, padding, remove button for static files (#6912)
  • Print matplotlib Figures/Axes in rich table output (#6904)
  • add duplicate selection shortcut to hotkeys as part of editing command (#6843)
  • Avoid full width for column faceted charts (#6887)
  • add sample query, better tool descriptions to improve agentic mode (#6880)
  • add data config in the UI (#6878)
  • Fallback to available storage when localStorage is not available (#6879)
  • add run stale cells tool, refactor out notebook actions (#6842)
  • Auto_instantiate=false by default (#6849)
  • Package installation autorun (#6856)
  • Add LintNotebook tool to backend and mcp server (#6853)
  • increase timeout to 120s for reasoning models (#6839)
  • allow run-all for completions bar (#6840)
  • Show better diff for ACP (#6828)
  • Hack needed to support the NVIDIA DGX Spark (#6822)
  • Set cursor-pointer for button (#6775)
  • Portals in vscode (#6803)

🐛 Bug fixes

  • Add setup cell that has been deleted (#6916)
  • fix wrapping on long text in tables (#6917)
  • support column edits based on index, instead of id (#6891)
  • Disable lsp by default (#6908)
  • Dont mutate pandas when fixing column types (#6906)
  • Copy code block inside accordion (#6905)
  • Respect sandbox confirmation (#6885)
  • Merge streamed agent message chunks to prevent fragmentation (#6835)
  • Fix typo introduced during refactoring (#6876)
  • fix column names that are not stringed in tables (#6873)
  • add catches for get_schemas (#6874)
  • Sanitize markdown text (#6848)
  • fix delay mount css (#6864)
  • Failing cache test on python 3.10 (#6863)
  • Better cli error when missing mcp dep (#6859)
  • Cell style not applied correctly (#6824)
  • Mark commentLines as readonly in SQLMetadata (#6846)
  • Allow cache blocks to be invoked in script mode (#6819)
  • Hide invalid options on setup cell context menu (#6821)
  • use spinning indicator and check instead for autofix (#6830)
  • Update markdown output to include 'contents' class (#6804)
  • Table charts should update when underlying data updates (#6809)

📚 Documentation

  • Security documentation updates (#6881)
  • Fallbacks and warnings for missing features from sandboxed iframes + docs (#6883)
  • More prescriptive remote connection docs (#6871)
  • Update command to launch ACP in windows (#6862)
  • Fix link to uv guide (#6816)
  • Make getting started installation uv section less confusing (… (#6813)
  • Dataframe docs (#6812)
  • Improve copilot docs (#6811)
  • Update gh actions uv setup to v7 (#6799)

🔬 Preview features

  • edit notebook tool (#6786)

📝 Other changes

  • Update dependency tailwindcss to ^4.1.15 (#6902)
  • Update dependency vite to ^7.1.19 (#6900)
  • Update dependency vite to ^7.1.18 (#6897)
  • Update build tools (#6890)
  • Upgrade form-data to secure version (#6888)
  • Bump postcss from 7.0.39 to 8.5.6 (#6884)
  • Merge commit from fork (b2f7e9b)
  • Update testing dependencies (#6855)
  • [pre-commit.ci] pre-commit autoupdate (#6850)
  • Merge commit from fork (a107e81)
  • Ci breakage in python 3.13.8 (#6831)
  • Support git dependencies in sandboxed script metadata (#5545) (#6827) (74b3602)
  • Update use-acp to version 0.2.4 and better ACP loading state UI (#6815)
  • Migrate out smart cell logic to its own package (#6808)
  • Duckdb interrupt (#6806)
  • Filter sql defs from generated return (#6805)
  • Allow ASYNC240 (#6703) (4ea8cf3)
  • Add tool guidelines to all backend/mcp tools (#6801)

Contributors

Thanks to all our community and contributors who made this release possible: @akshayka, @arjunguha, @bjoaquinc, @dmadisetti, @koaning, @Light2Dark, @manzt, @minsun-ss, @mscolnick, @olad5, @prosoitos, @sebkur, @sshtomar

And especially to our new contributors:

Full Changelog: 0.17.0...TODO_CURRENT_VERSION

0.17.0

15 Oct 17:15

Choose a tag to compare

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

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:

Full Changelog: 0.16.5...0.17.0

0.16.5

02 Oct 20:00

Choose a tag to compare

What's Changed

Full Changelog: 0.16.4...0.16.5

0.16.4 and 0.16.3

01 Oct 19:02

Choose a tag to compare

0.16.4

Important Upgrade

This release includes an important fix for Security Release - CWE-441 - Unauthenticated Proxy.

What's Changed

New Contributors

Full Changelog: 0.16.3...0.16.4


0.16.3

What's Changed

New Contributors

Read more

0.16.2

24 Sep 12:41

Choose a tag to compare

What's Changed

Full Changelog: 0.16.1...0.16.2

0.16.1

22 Sep 19:46

Choose a tag to compare

This release includes improvements to internationalization and important bug fixes.

✨ Enhancements

  • Add to outline mo.outline() (#6430)
  • Display plain output for explain queries in duckdb (#6439)
  • Add GetNotebookErrors tool (#6445)
  • Add session_id to system_context (#6443)
  • Use user's (or configured) locale for dates, times, and numbers (#6433)
  • Add locale to display config (#6432)
  • Show tool location and kind when no output (#6441)
  • Add datasource tool (#6422)
  • Use user's local for date inputs (#6412)
  • Hover over cell (#6420)
  • Display tool inputs for tool accordion (#6452)
  • Add maybe import marimo to Generate with AI (#6471)

🐛 Bug fixes

  • Preserve literal strings in type annotations (#6451)
  • check if default schema and db is string, for engines (#6438)
  • String quoting for marimo (#6470)
  • Skip adding import if already exists (#6475)
  • Restrict uvicorn version to avoid notebook creation issues (#6453) (#6467) (4c17a0e)
  • Center slides better for iframed content (#6465)
  • Return original markdown text, override format (#6464)
  • Prevent new language adapter instances being created on keypress (#6459)
  • Specify utf-8 encoding when writing toml files (#6449)

📚 Documentation

  • Update CLAUDE.md to incorporate marimo check (#6448)
  • Update system prompt & CLAUDE.md (#6437)

📝 Other changes

  • check ignore for ci (#6474)
  • Run check on examples (#6450)
  • Fix uv snapshot (#6440)

Contributors

Thanks to all our community and contributors who made this release possible: @bjoaquinc, @daizutabi, @dmadisetti, @Light2Dark, @manzt, @maxkoretskyi, @mscolnick, @nojaf

Full Changelog: 0.16.0...0.16.1