NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2882 most downloaded on PyPI
A library for making reactive notebooks and apps
Last release 7 days ago
11 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Most releases are documented
notes for 53 of the last 60 stable releases
6 versions withdrawn
withdrawn after publishing
5 years old
390 releases · first in 2022
One column per quarter.
docs: i18n by @mscolnick in https://github.com/marimo-team/marimo/pull/6478
Full Changelog: https://github.com/marimo-team/marimo/compare/0.16.1...0.16.2
This release includes improvements to internationalization and important bug fixes.
This release includes improvements to internationalization and important bug fixes.
mo.outline() (#6430)GetNotebookErrors tool (#6445)session_id to system_context (#6443)import marimo to Generate with AI (#6471)Thanks to all our community and contributors who made this release possible: @bjoaquinc, @daizutabi, @dmadisetti, @Light2Dark, @manzt, @maxkoretskyi, @mscolnick, @nojaf
Full Changelog: https://github.com/marimo-team/marimo/compare/0.16.0...0.16.1
This release brings multi-cell AI code generation and `marimo check` for static code analysis, along with preview features for AI agents.
This release brings multi-cell AI code generation and marimo check for static code analysis, along with preview features for AI agents.
You can now generate entire notebooks with AI within marimo.
The "Generate with AI" feature has been upgraded to create multiple cells at once, organizing code into logical units (#6312).
<p align="center"> <img width="650" src="https://github.com/user-attachments/assets/486c7944-1461-46a5-b8af-4c8e3e568b46"> </p>
As you watch the AI work, cells stream in with a distinctive visual indicator, making it clear which cells are AI-generated. Accept suggestions with Tab or reject with Escape.
marimo checkmarimo includes a comprehensive linting system that helps you write better, more reliable notebooks. The new marimo check command detects and reports on common errors before runtime, ensuring your notebooks follow marimo's best practices (#6288).
Run marimo check to identify issues like multiple definitions, circular dependencies, and syntax errors. Add --fix to automatically resolve formatting issues. Configure marimo check as a hook with AI coding agents like Claude Code or Google Gemini to automatically correct potential mistakes in AI-generated code.
# Check for issues
marimo check notebook.py
# Auto-fix formatting issues
marimo check --fix notebook.py
<p align="center"> <img width="650" src="https://github.com/user-attachments/assets/a425711a-4871-42b2-afa2-4163e2d18515" /> </p>
You can also use marimo check for CI/CD pipelines with its non-zero exit codes on warnings.
Connect marimo notebooks to AI coding assistants like Claude Code or Gemini CLI through the new Agent sidebar (#6331, #6389). This experimental integration uses the Agent Client Protocol (ACP) to enable AI agents to help write and modify code directly in your notebooks.
Enhanced agent capabilities:
@ - mention dataframes, variables, and errors# - include notebook files in your prompts<p align="center"> <img width="600" src="https://github.com/user-attachments/assets/f5519685-3a64-4045-95b6-5af198154830"> </p>
Note: This feature is behind a feature flag and ready for early testing. Start your agent with --watch mode for best results.
marimo check (#6423)session_ttl parameter to create_asgi_app (#6419)xterm addons and terminal resize (#6395)@-symbol for data, # for files in the Agent panel (#6389)marimo check --fix (#6288)ToolManager to initialize in lifespans.py and use ToolBase for backend tool registration (#6375)app.run to allow programmatic overrides (#6359)--watch, slash-commands (#6360)progress_bar with iterator and total (#6424)marimo check (#6425)msgspec parsing (#6382)DataTableColumn.__post_init__ (#6383)FunctionCallRequest (#6365)InstallHook.js:1 in HTML, <tr> cannot be a child of <table> (#6367)TypeVar for Cls in class_definition (#6364)--unsafe-fixes and example rule (#6398)check rule as a base example (#6384)KernelMessage (#6380)op from data (#6381)<=1.3.0 for type-checking (#6374)Thanks to all our community and contributors who made this release possible: @Antyos, @bjoaquinc, @daizutabi, @dmadisetti, @Light2Dark, @maxkoretskyi, @mscolnick, @nojaf
And especially to our new contributors:
Full Changelog: https://github.com/marimo-team/marimo/compare/0.15.5...0.16.0
fix: show both inputs and task list in TODO mkdocs-marimo example by @superlopuh in https://github.com/marimo-team/marimo/pull/6351
Full Changelog: https://github.com/marimo-team/marimo/compare/0.15.4...0.15.5
This is a quick follow-up to 0.15.3 with important bug fixes for how messaging works inside marimo.
This is a quick follow-up to 0.15.3 with important bug fixes for how messaging works inside marimo.
marimo._ipc for multi-environment kernels (#6303)progress_bar type hints (#6304)__dict__/__slots___ in enc_hook for unknown objects (#6332)react-aria dependencies (#6344)ToolBase and centralize tool implementations (#6309)Thanks to all our community and contributors who made this release possible: @Antyos, @bjoaquinc, @dmadisetti, @Light2Dark, @manzt, @mscolnick.
And especially to our new contributors:
Full Changelog: https://github.com/marimo-team/marimo/compare/0.15.3...0.15.4
This release focuses on AI enhancements and developer experience improvements, with better ways to provide context to AI chat and real-time feedback d
This release focuses on AI enhancements and developer experience improvements, with better ways to provide context to AI chat and real-time feedback during package installation. Internal messaging improvements also make notebooks more responsive.
Provide richer context to AI chat by referencing files with #, cell outputs with @, and attaching images or other media (#6241, #6240, #6181, #6256). The AI can now "see" your code outputs, charts, tables, and files to provide more targeted assistance.
<p align="center"> <img width="650" alt="Cell outputs with @ context in AI chat" src="https://github.com/user-attachments/assets/177cb0ba-a953-474b-8462-48a0ba7423d5"> </p>
See live installation logs when marimo installs packages (#6279), giving feedback on what's happening during dependency installation without requiring the terminal.
<p align="center"> <img width="450" alt="Streaming package installation logs" src="https://github.com/user-attachments/assets/4dc59736-31a8-4dfe-ae8f-f508bc8e0734"> </p>
pycap to module name map (#6315)@ in Generate with AI, also add model dropdown (#6300)mo.ui.file_browser (#6261)msgspec (#6234)@ context w/ attachments for media output (#6240)upath to universal-pathlib (#6221)# (#6241)progress_bar.__iter__ type hint to return Iterator instead of Iterable (#6292)CLAUDE.md to snippets (#6276)CLAUDE.md to prompts docs (#6227)--server-startup-command (#6238)requestClientAtom dependency (#6208)Thanks to all our community and contributors who made this release possible: @bjoaquinc, @dmadisetti, @koaning, @Light2Dark, @loginoff, @lucharo, @manzt, @maxkoretskyi, @mscolnick, @tgbrooks, @wlach, @x2764tech, @zaneselvans.
And especially to our new contributors:
Full Changelog: https://github.com/marimo-team/marimo/compare/0.15.2...0.15.3
This release fixes a breaking dependency issue in 0.15.1
This release fixes a breaking dependency issue in 0.15.1
This release focuses on performance improvements and AI capabilities, making marimo notebooks faster and more intelligent.
This release focuses on performance improvements and AI capabilities, making marimo notebooks faster and more intelligent.
Configure "Displayed models" in the AI configuration
The new AI Model Configuration interface (#6140) allows users to customize which models appear in their AI dropdown, providing better control over models used for development.
<p align="center"> <img width="350" alt="Model Tab Changes" src="https://github.com/user-attachments/assets/1b2b9fce-c979-4e18-b7fa-908f9b4cf906"> </p>
Add "Notebook Errors" as a context in any AI input
marimo copilot can now include notebook errors as context when you ask for help (#6158), making debugging faster and more intuitive.
<p align="center"> <img width="650" alt="Errors as chat context" src="https://github.com/user-attachments/assets/05d8602b-fea4-4a33-a1b6-216ea52069bc"> </p>
When your code encounters issues like missing tables, import errors, or other exceptions, simply ask the AI chat "Can you help me fix these @Errors" and it will analyze the complete error context - including tracebacks, error messages, and relevant code - to provide targeted solutions.
DOMParser global for VSCode extension (#6161)useTheme (#6149)module_name_to_pypi_name.py - psycopg2 (#6112)_repr_mimebundle_ for img and tuple outputs (#6165)Thanks to all our community and contributors who made this release possible: @dmadisetti, @koaning, @Light2Dark, @manzt, @maxkoretskyi, @meowesque, @mscolnick, @spagettnet, @tetsugo02
And especially to our new contributors:
Full Changelog: https://github.com/marimo-team/marimo/compare/0.15.0...0.15.1
This release comes with improvements to AI integration and support for multiple models. While these changes include several breaking changes to how mo…
This release comes with improvements to AI integration and support for multiple models. While these changes include several breaking changes to how models are configured (see below), they provide more flexibility for using different models for different tasks.
You can now configure separate models for chat, code editing, and autocomplete in an improved UI (#6018, #6011). Models use provider prefixes like ollama/qwen-coder or azure/gpt-4o.
<p align="center"> <img width="700" src="https://github.com/user-attachments/assets/7def2b30-baf3-46d2-b3d9-292c976cdb14" /> </p>
Accept AI suggestions with Tab, reject with Escape (#6094).
<p align="center"> <img width="700" src="https://github.com/user-attachments/assets/b649b32c-6009-407c-9fa1-998c071d12d8" /> </p>
The chat sidebar now renders markdown tables (#6006).
<p align="center"> <img width="500" src="https://github.com/user-attachments/assets/8a49f19d-3c3f-4477-9251-2817de7863db" /> </p>
Use fully qualified model ids (#6003): Model IDs must now include provider prefixes (e.g., gpt-4o becomes openai/gpt-4o). Old IDs will show warnings but still work temporarily.
# Before (marimo.toml)
[ai.models]
chat_model = "gpt-4o"
autocomplete_model = "codestral-latest"
# After (marimo.toml)
[ai.models]
chat_model = "openai/gpt-4o"
autocomplete_model = "mistral/codestral-latest"
Multiple models for different roles (#6018): Config paths have moved - ai.open_ai.model is now ai.models.chat_model, completion.model is now ai.models.autocomplete_model. The completion.base_url and completion.api_key fields are removed in favor of provider-specific configs.
# Before (marimo.toml)
[ai.open_ai]
model = "gpt-4o"
[completion]
model = "gpt-3.5-turbo"
base_url = "https://api.openai.com/v1"
api_key = "sk-..."
# After (marimo.toml)
[ai.models]
chat_model = "openai/gpt-4o"
autocomplete_model = "openai/gpt-3.5-turbo"
[ai.openai]
api_key = "sk-..."
More AI config settings for different providers (#6011): Provider-specific endpoints (azure, ollama, open_ai_compatible) now have their own config sections.
# Before (marimo.toml)
[ai.openai]
base_url = "https://myazure.openai.azure.com/openai/deployments/gpt-4o"
model = "gpt-4o"
# After (marimo.toml)
[ai.models]
chat_model = "azure/gpt-4o"
[ai.azure]
base_url = "https://myazure.openai.azure.com"
api_version = "2024-02-01"
Ctrl+Escape from CodeMirror to parent elements (#6114)XDG_STATE_HOME environment variable to support the Linux XDG Base Directory (#6048)@marimo-team/codemirror-ai to v0.3.2 (#6102)as_series=False in assert_frame_equal to compare Narwhals dataframes (#6035)Thanks to all our community and contributors who made this release possible: @akshayka, @AldoHdz97, @dmadisetti, @FBruzzesi, @jonathanyale, @Light2Dark, @manzt, @mscolnick, @TDYQ-Liu, @thliang01
And especially to our new contributors:
Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.17...0.15.0
This release introduces several conveniences for exploring and visualizing in-memory objects, along with bug fixes.
This release introduces several conveniences for exploring and visualizing in-memory objects, along with bug fixes.
mo.inspect()This release adds a new mo.inspect() utility inspired by rich.inspect, providing a way to explore Python objects interactively within marimo notebooks (#5936).
obj = MyClass()
mo.inspect(obj)
Shows attributes, methods, and documentation in a structured format instead of unhelpful <object at 0x...> output.
<p align="center"> <img width="700" src="https://github.com/user-attachments/assets/4cead3a1-82d4-42d2-bed7-4f97e8fd5e50" /> </p>
ibis integrationIbis tables now render using marimo's native formatters (#5855), and there is now support for Ibis catalogs, enabling multi-database queries (#5978). Thanks to community member @kyrre for both contributions!
<p align="center"> <img width="700" src="https://github.com/user-attachments/assets/55c52bc6-835f-4ce3-820e-59205850674c" /> </p>
Better @ completions for variables, dataframes, and SQL tables within chat and AI cells (#5962).
<p align="center"> <img width="700" src="https://github.com/user-attachments/assets/3acf4e9b-51b5-4537-87ad-00605f35d6a8" /> </p>
You can now use del to delete variables from other cells to reclaim memory (#5966). Cells that delete a variable automatically depend on all cells that reference it. This should be considered an advanced feature but can be useful for memory-intensive workflows with large datasets or tensors.
Sandbox mode now explicitly requires a notebook file (#5511)
marimo edit --sandbox now raises a UsageError when run without specifying a notebook file. Previously, sandbox mode allowed editing multiple notebooks but they would share the same environment, breaking isolation and potentially poisoning the shared venv. Multi-notebook sandboxing may be supported in the future with better-defined behavior.
mo.inspect for rich object introspection (#5936)Ctrl+[ vim escape on Windows (#5914)mo.ui.file_browser (#5882)__marimo__/cache by default (#5910)fig.show() (#5880)__file__ in mo.notebook_dir (#5906)__file__ in embedded notebooks (#5854)mo.cache expectations and limitations (#5917)CellArray/Cell to use atom-based state management (#5897)Thanks to all our community and contributors who made this release possible: @akshayka, @AnirudhDagar, @bjoaquinc, @davidangarita1, @dmadisetti, @kyrre, @Light2Dark, @manzt, @mscolnick, @thliang01, @zilto.
And especially to our new contributors:
Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.16...0.14.17
This release extends code completion with `basedpyright` support and includes several important bug fixes.
This release extends code completion with basedpyright support and includes several important bug fixes.
basedpyright (#5712)!pip transform in notebook converter (#5841)openapi-typescript to ^7.8.0 (#5869)marimo-snippets on dataframe page (#4638)Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.15...0.14.16
This release improves marimo's code intelligence with runtime completions, expands notebook conversion capabilities, and includes several UI/UX improv
This release improves marimo's code intelligence with runtime completions, expands notebook conversion capabilities, and includes several UI/UX improvements and bug fixes.
marimo now offers runtime key completions for dictionaries, dataframes, and other subscriptable objects (#5618). Unlike static LSP completions, these suggestions come from inspecting objects in memory, enabling completions that are only knowable at runtime.
<p align="center"> <img width="600" src="https://github.com/user-attachments/assets/f5d9ff9a-1f66-4017-8f0e-bea5a8c4a200" alt="Dynamic key completion showing dictionary and dataframe column suggestions" /> </p>
When you type dataframe[", marimo suggests column names. When accessing dictionary keys, you'll see all available keys as completions. This works with:
my_dict[" shows all available keysdf[" suggests column names_ipython_key_completions_()Huge thanks to @zilto for contributing this feature!
marimo convertmarimo convert now supports converting py:percent format (#5686). Convert your py:percent notebooks directly to marimo notebooks:
# Requires jupytext
uvx --with=jupytext marimo convert pypercent_notebook.py -o notebook.py
The converter also works for ingesting regular Python scripts. If you try to open a non-marimo Python script with marimo edit, you'll now be prompted to convert it first.
Keyboard navigation is now supported with column layouts! You can move between columns using the arrow keys in command mode (or h/l for Vim users) (#5760). We've also redesigned the column layout UI (#5772).
<p align="center"> <img width="700" src="https://github.com/user-attachments/assets/24b0dbf3-a21d-4678-9e5e-5c73a694002e" alt="Redesigned column UI with kanban-inspired layout" /> </p>
Long console outputs are now easier to read with the new text wrapping toggle (#5739). A button appears on hover in the top-right corner of console outputs, letting you toggle between wrapped and unwrapped text.
<p align="center"> <img width="600" src="https://github.com/user-attachments/assets/34178b65-0fc9-43db-b408-e7bd2938a1e1" alt="Console output text wrapping toggle demonstration" /> </p>
Vim keybindings now require Ctrl+Escape (or Cmd+Escape on macOS) to enter command mode (#5815, #5837).
Previously, pressing Escape from Vim normal mode would enter Command Mode, but this caused confusing behavior and accidental mode switches for Vim users. Adding this extra modifier prevents unintended exits from normal mode while letting you choose whether to use Command Mode at all.
@sourcegraph/vscode-ws-jsonrpc to vscode-ws-jsonrpc (#5798)setState callback to prevent race condition (#5813)Shift+Delete in edit mode to empty cells only (#5766)Shift+Escape to Ctrl/Cmd+Escape (#5837)Shift+Enter command mode vim bindings (#5816)Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.13...0.14.14
Nothing published for this version
This release introduces a new minimap for navigating reactive notebooks, along with important fixes for LSP code completions.
This release introduces a new minimap for navigating reactive notebooks, along with important fixes for LSP code completions.
The new minimap offers a focused slice of your notebook's dataflow graph, helping you understand a specific cell's reactive context and navigate related cells.
<p align="center"> <img width="750" src="https://github.com/user-attachments/assets/2040943c-6f45-4bc5-a6fd-554dfb9e0deb" alt="Screenshot of marimo notebook demonstrating the minimap feature. The minimap shows a visual representation of all cells with highlighted connections between the selected cell and its dependencies." /> </p>
Click a cell in the minimap to jump to it — connections are read left to right, showing how data flows through your notebook and the order in which cells run. You can toggle the minimap with a hotkey (Cmd/Ctrl-Shift-i) or by clicking the map icon in the bottom footer bar.
This feature was heavily inspired by Observable’s Minimap, a thoughtfully designed, compact dataflow representation for their reactive JavaScript notebooks. We built marimo’s from scratch, adapting to fit our own execution model and rules.
Mod-Shift-i) (#5730)TIMETZ and TIMESTAMP_MS data types in DuckDB integration (#5703)geopandas in mo.ui.dataframe and mo.ui.table (#5674)Enter key handling for delete confirmation button (#5689)Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.12...0.14.13
This release introduces safe cell deletion and expands vim keybindings for command mode. See full release notes below.
This release introduces safe cell deletion and expands vim keybindings for command mode. See full release notes below.
marimo previously avoided cell deletion via keybindings to prevent accidental deletions. This release adds smart safeguards that allow keyboard-based deletion while protecting your work (#5664, #5670). When deleting cells with keyboard shortcuts, marimo now asks for confirmation if the cell took a long time to run and/or declares variables used by other cells.
<p align="center"> <img width="600" src="https://github.com/user-attachments/assets/ddbe0836-c5ef-4b6c-b531-ac4427a27461" alt="Video demonstrating destructive cell deletion - user deletes a simple cell without confirmation, then attempts to delete a more complex cell and is prompted to confirm the deletion"/> </p>
Keymaps:
Shift+Backspace - Delete cell (regular keybindings)dd - Delete cell (vim keybindings)To revert to the previous behavior (only allowing deletion of empty cells), set config.keymap.destructive_delete = False
We've added more vim-style keybindings for cell operations in command mode (#5675):
yy - Copy cell(s)p - Paste belowP - Paste aboveo - Insert cell belowO - Insert cell aboveu - Undo cell deletiontest_transformers.py and fix edge cases (#5654)Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.11...0.14.12
This release adds command mode for cell navigation and a redesigned data editor. It also includes a breaking change, removing the Alt + ` keyboard sho…
This release adds command mode for cell navigation and a redesigned data editor. It also includes a breaking change, removing the Alt + ` keyboard shortcut. See full release notes below.
Many of you have told us that command mode was the one feature you missed most from Jupyter. We heard you, and we've built it into marimo.
Command mode lets you work at the cell level — navigating between cells, creating new ones, and applying operations to multiple cells at once. Press Escape to enter command mode (the cell border turns blue), and press Enter to return to edit mode.
<p align="center"> <img width="600" src="https://github.com/user-attachments/assets/34a32a23-14e4-4f77-9448-13f2aacf8f8d" alt="Screenshot of marimo notebook demonstrating command mode. The interface shows multiple cells with blue borders indicating command mode is active, and a visual indicator showing cell selection and navigation between cells." /> </p>
Navigation and cell management (Escape, then):
↓/↑ - Move between cellsEnter - Edit the selected cella/b - Add a new cell above/belowc/v - Copy and paste cellss - Save notebookCtrl/Cmd + ↑/↓ - Jump to top/bottom of notebookShift + Enter - Run cell and advance to nextMulti-cell selection:
Shift + ↑/↓ - Select multiple cellsYou can return to editing with Enter to exit command mode.
For vim users:
When vim keybindings are enabled, there additional familiar keybindings (Escape or Ctrl + [, then):
j/k - Move down/upgg/G - Jump to first/last cellShift + j/k - Extend selectionYou can return to editing with i or Enter to exit command mode. Follow future plans for vim support in https://github.com/marimo-team/marimo/issues/931.
The data editor plugin (mo.ui.data_editor and mo.ui.dataframe) has been totally upgraded.
<p align="center"> <img width="600" src="https://github.com/user-attachments/assets/32374681-cd2b-4c75-b942-1e98d6879e65" alt="Animated demonstration of the marimo data editor showing interactive dataframe manipulation. The interface displays a spreadsheet-like grid where users can directly edit cells, add columns, apply filters, and see live updates to their data transformations." /> </p>
Direct editing:
Transformations:
These improvements make the data editor feel more like a spreadsheet when you need it, while maintaining dataframe operations.
Remove Alt-` for completions (#5609)
Why this change: The Alt + ` shortcut for triggering code completions conflicted with system shortcuts on several platforms, particularly on macOS where it's used for window switching. This caused frustration for users who couldn't access completions reliably.
What to use instead: Code completions now work automatically as you type, providing a smoother experience. If you need to manually trigger completions, use Ctrl + Space (or Cmd + Space on macOS if not reserved by Spotlight), which is the standard shortcut across most code editors.
ty LSP (#5302)gg and G (#5636)i to focus a cell from command mode when in vim keymap (#5632)Ctrl+[ as Escape to enter command mode with vim keybindings (#5635)mo.dataframe (#5600)scrollToView to smooth (#5604)default_table_max_columns to user config (#5598)create_asgi_app, default False (#5585)BaseExceptions from downstream df libraries (#5576)data_explorer docs (#5060)datetime and handle timezones for pandas (#5573)from_anywidget.py (#5134)i binding (#5645)Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.10...0.14.11
🧮 Dataframes get another upgrade in this release. You can now select table cells with your cursor or keyboard, copy your selection to clipboard, and c
🧮 Dataframes get another upgrade in this release. You can now select table cells with your cursor or keyboard, copy your selection to clipboard, and click nested entries to get a rich view. (#5450)
https://github.com/user-attachments/assets/399e84c7-bb26-4f25-9680-f201b7259afa
🖱️ Right-click the create cell button to get a context menu that lets you create Python, SQL, or markdown cells. (#5489)
Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.9...0.14.10
This release includes quality-of-life improvements and bug fixes (importantly, restoring compatibility with our VS Code extension).
This release includes quality-of-life improvements and bug fixes (importantly, restoring compatibility with our VS Code extension).
Cmd/Ctrl+k). We have a tooltip now to remind you: render command palette shortcut for notebook actions (#5467)Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.8...0.14.9
🖌️ Variable reference highlighting with go-to-definition. We have a new quality-of-life feature — the marimo editor can now highlight cell references,
🖌️ Variable reference highlighting with go-to-definition. We have a new quality-of-life feature — the marimo editor can now highlight cell references, i.e. variables that they use but don't define. This helps you understand how data flows through your notebook at a glance. You can even hover over the variable and Ctrl+Click to jump to definition.
<img width="226" alt="Screenshot 2025-06-26 at 10 41 48 AM" src="https://github.com/user-attachments/assets/e51fde0f-d629-44cb-9d26-16777e63cff4" />
This feature is currently opt-in: enable in the settings (Display > Reference Highlighting), or through the command palette (Ctrl/Cmd + k)
<img width="468" alt="Screenshot 2025-06-26 at 10 28 07 AM" src="https://github.com/user-attachments/assets/d8d1d8f6-bf69-4007-bd93-805f10ba4890" />
If you like this feature, let us (h/t @manzt!) know!
⌨️ More command palette options. You can now toggle light/dark/system themes through the command palette (Ctrl/Cmd + k).
📦 More seamless optional dependency installation. Install optional dependencies in the column explorer panel for charts with just one click.
invariant debugger statement for development by @manzt in https://github.com/marimo-team/marimo/pull/5414Copy Path and Copy Relative Path returning identical results. by @Haleshot in https://github.com/marimo-team/marimo/pull/5399any" type assertion with a type guard by @manzt in https://github.com/marimo-team/marimo/pull/5437as any by @manzt in https://github.com/marimo-team/marimo/pull/5440Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.7...0.14.8
📦 An improved package viewer for uv projects. This release introduces a vastly improved package manager panel for uv projects and uv-sandboxed noteboo
📦 An improved package viewer for uv projects. This release introduces a vastly improved package manager panel for uv projects and uv-sandboxed notebooks (marimo edit --sandbox my_notebook.py). When using uv in these ways, the package manager panel will now display the package environment as a tree, with top-level packages and their dependencies nested underneath.
Sandboxed notebooks.
https://github.com/user-attachments/assets/d4f00ba6-d635-4825-b20a-4baee7bb4736
uv projects.
https://github.com/user-attachments/assets/9657e5ba-29e4-4017-955a-10df6f5d81b0
🤖 Chat sidebar improvements. A new footer in the sidebar lets you choose your model, and a settings button lets you configure options.
Bug fixes. Bug fixes for tables.
StreamMediaOutput by @akshayka in https://github.com/marimo-team/marimo/pull/5387Full Changelog: https://github.com/marimo-team/marimo/compare/0.14.0...0.14.7
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
chore: upgrade ai backend from google-generativeai (deprecated) -> google-genai by @bjoaquinc in https://github.com/marimo-team/marimo/pull/5226
🧮 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:
https://github.com/user-attachments/assets/c6b03205-c781-4b23-bea3-06c58b71dd8b
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.
https://github.com/user-attachments/assets/3f6920cc-fbce-4519-99fe-9b3bc08859d9
📦 Install package extras with our UI.
https://github.com/user-attachments/assets/056f158a-67ec-44e9-b297-5704042305b5
🐻❄️ 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.
watching.md to reflect support for data file watching by @Haleshot in https://github.com/marimo-team/marimo/pull/5137mo.image_compare() | image comparison slider by @Haleshot in https://github.com/marimo-team/marimo/pull/5091marimo convert and snapshot outputs by @manzt in https://github.com/marimo-team/marimo/pull/5179_transform_sources tests to snapshot-based tests by @manzt in https://github.com/marimo-team/marimo/pull/5194data_explorer (take 2) by @janosh in https://github.com/marimo-team/marimo/pull/5171uv package manager when launched from uv by @manzt in https://github.com/marimo-team/marimo/pull/5213uv executable with UV environment variable by @manzt in https://github.com/marimo-team/marimo/pull/5215pl.LazyFrame by @manzt in https://github.com/marimo-team/marimo/pull/5247useAsyncData by @manzt in https://github.com/marimo-team/marimo/pull/5272ImportError handling for better package suggestions by @manzt in https://github.com/marimo-team/marimo/pull/5281view-as URI parameter to handle app view in edit mode by @harterrt-shopify in https://github.com/marimo-team/marimo/pull/5327Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.15...0.14.0
fix: recursive cell hashing by @dmadisetti in https://github.com/marimo-team/marimo/pull/5056
Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.14...0.13.15
fix: automatic port selection by @pantaray in https://github.com/marimo-team/marimo/pull/5090
Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.13...0.13.14
🤖 Copilot: Migrate GitHub copilot to use the official copilot-language-server SDK, while also enabling GitHUb copilot in Conda environments.
🤖 Copilot: Migrate GitHub copilot to use the official copilot-language-server SDK, while also enabling GitHUb copilot in Conda environments.
📦 Support for uv projects: The uv package installer now automatically detects if you are running as part of a project, using uv add instead of uv pip install in projects.
🛢️ Database API: Support for the DB API (PEP 249) as a discoverable database connection.
import marimo as mo in .ipynb conversion. by @asford in https://github.com/marimo-team/marimo/pull/5019import marimo as mo by @mscolnick in https://github.com/marimo-team/marimo/pull/5022data_explorer by @janosh in https://github.com/marimo-team/marimo/pull/5028uv export for dumping requirements.txt by @manzt in https://github.com/marimo-team/marimo/pull/5045mo.ui.dataframe by @wasimsandhu in https://github.com/marimo-team/marimo/pull/4970data_explorer" by @mscolnick in https://github.com/marimo-team/marimo/pull/5057dataframe.md to include new transforms and request feature link by @Haleshot in https://github.com/marimo-team/marimo/pull/5061package.json scripts to use cross-env for env variable mgmt by @Haleshot in https://github.com/marimo-team/marimo/pull/5087Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.11...0.13.13
[This release was yanked due to GitHub Copilot issues]
[This release was yanked due to GitHub Copilot issues]
import marimo as mo in .ipynb conversion. by @asford in https://github.com/marimo-team/marimo/pull/5019import marimo as mo by @mscolnick in https://github.com/marimo-team/marimo/pull/5022data_explorer by @janosh in https://github.com/marimo-team/marimo/pull/5028uv export for dumping requirements.txt by @manzt in https://github.com/marimo-team/marimo/pull/5045mo.ui.dataframe by @wasimsandhu in https://github.com/marimo-team/marimo/pull/4970data_explorer" by @mscolnick in https://github.com/marimo-team/marimo/pull/5057Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.11...0.13.12
feat: added disabled prop to range-slider by @bjoaquinc in https://github.com/marimo-team/marimo/pull/4953
Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.10...0.13.11
fix: default to syntax highlighting in markdown when Editor is not ready by @mscolnick in https://github.com/marimo-team/marimo/pull/4929
Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.9...0.13.10
feat: added disabled prop to number field by @bjoaquinc in https://github.com/marimo-team/marimo/pull/4919
Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.8...0.13.9
feat: mo.watch.{file, directory}: reactively watch changes to files and directory structures, letting you write notebooks that automatically update wh
mo.watch.{file, directory}: reactively watch changes to files and directory structures, letting you write notebooks that automatically update when files on disk update. Learn more at our docs: https://docs.marimo.io/api/watch/.Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.7...0.13.8
📊 Table Enhancements - Added row expanded view for table data
mo.thread lifecycle management and better handling of asyncio background tasks.mo.ui.form.form by @AH-Merii in https://github.com/marimo-team/marimo/pull/4829mo.output.replace by @Haleshot in https://github.com/marimo-team/marimo/pull/4857table.value by @mscolnick in https://github.com/marimo-team/marimo/pull/4873typos failing on pre-commit CI by @krassowski in https://github.com/marimo-team/marimo/pull/4874Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.6...0.13.7
Nothing published for this version
📝 Enhanced Markdown Experience: Seamlessly toggle between markdown string formats (r-string, f-string). Directly edit f-string markdown in the markdow
📝 Enhanced Markdown Experience: Seamlessly toggle between markdown string formats (r-string, f-string). Directly edit f-string markdown in the markdown editor, with Python autocompletion support inside { } brackets.
🖥️ Resizable Notebook Columns: Effortlessly resize columns when editing multi-column notebooks.
🧊 PyIceberg Integration: Connect seamlessly to your Iceberg tables via REST, Glue, and more, with automatic table population in the Datasources panel.
🗃️ Expanded Ibis, PySpark, Datafusion, and MotherDuck Support: Ibis connections now automatically populate databases and schemas in the Datasources panel. Additionally, easily connect to PySpark, Datafusion, and MotherDuck directly from the "Add Connection" UI.
🏖️ Sandbox Support for Markdown Format: Now you can use marimo edit --sandbox mynotebook.md to edit markdown notebooks in sandbox mode, automatically tracking and recording dependencies.
📝 Quarto Integration: Open .qmd files, export to multiple formats, or embed reactive marimo notebooks directly into your Quarto site using our Quarto extension.
📖 MkDocs Documentation: Enhanced documentation on how to embed interactive marimo notebooks and playgrounds directly into your MkDocs site using our MkDocs plugin.
💻 Nested Python Autocompletion in SQL: Enjoy Python autocompletion when parameterizing SQL queries using { } brackets.
📊 Improved Table and Chart Loading: Enhanced performance and faster loading times for tables and visualizations.
🐞 Bug Fixes & Stability Improvements: Resolved issues related to date rendering and enhanced compatibility for Windows users.
pixi to manage developer system deps by @lucharo in https://github.com/marimo-team/marimo/pull/4406Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.2...0.13.3
fix: export to html when using arrow files by @mscolnick in https://github.com/marimo-team/marimo/pull/4645
Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.1...0.13.2
🔍 Column filtering - You can now filter columns by their top most common values for improved data exploration and faster insights
Full Changelog: https://github.com/marimo-team/marimo/compare/0.13.0...0.13.1
Release 0.13.0 introduces includes a big new feature: it's now possible to import functions and classes from marimo notebooks, as long as they meet ce
Release 0.13.0 introduces includes a big new feature: it's now possible to import functions and classes from marimo notebooks, as long as they meet certain criteria. This lets you write code like:
from my_notebook import my_function, my_class
This feature, contributed by @dmadisetti, is yet another way that marimo's pure Python format makes your notebook code reusable.
Starting with 0.13.0, you can import top-level functions and classes defined in a marimo notebook into other Python scripts or notebooks using normal Python syntax, as long as your definitions satisfy the following criteria:
The setup cell is a new addition to marimo: it is an optional cell in which you can include modules used by functions and classes you'd like your notebook to expose.
When you create a cell containing just a single function or class, marimo will provide hints in the bottom-right that tell you if the criteria are met ...
... or if not what needs to be done to meet the criteria:
To learn more, visit our docs.
Design is important to us; that's why markdown is now rendered with a maximum width of ~80 characters, improving legibility.
FileUploadPlugin for single files by @peter-gy in https://github.com/marimo-team/marimo/pull/4569Full Changelog: https://github.com/marimo-team/marimo/compare/0.12.10...0.13.0
First class LSP Support: Install the python-lsp-server in the same environment and get the power of a full LSP for completions. See the documentation
First class LSP Support: Install the python-lsp-server in the same environment and get the power of a full LSP for completions. See the documentation for more details.
Environment variable management: Previously, your dotenv configuration auto-loaded your environment variable. Now you can view your environment variables and create new ones
<img width="608" alt="image" src="https://github.com/user-attachments/assets/a5b4e6e7-a17c-46cf-b3d6-1e2fc84775a5" />
Expand / collapse H1/H2 sections: Expand / collapse H1/H2 sections via the command palette. Thanks to @bjoaquinc for this feature!
Download parquet: You can now download your table data as parquet.
marimo env by @mscolnick in https://github.com/marimo-team/marimo/pull/4543Full Changelog: https://github.com/marimo-team/marimo/compare/0.12.9...0.12.10
Configurable SQL output type - you can now configure the output type for SQL cells. native, lazy-polars, pandas, polars, auto
Configurable SQL output type - you can now configure the output type for SQL cells. native, lazy-polars, pandas, polars, auto
Reactive tests - By default, marimo detects and runs tests in your notebooks automatically. If the pytest library is installed, marimo will run pytest on any cells that contain test functions (functions that start with test_) or test classes
(classes that start with Test) on a per cell basis. This can be turned off through configuration,
.column_name by @mscolnick in https://github.com/marimo-team/marimo/pull/4453Full Changelog: https://github.com/marimo-team/marimo/compare/0.12.7...0.12.8
Dataframe completions in DuckDB SQL. DuckDB SQL cells will now autocomplete your dataframes:
Dataframe completions in DuckDB SQL. DuckDB SQL cells will now autocomplete your dataframes: <img width="908" alt="image" src="https://github.com/user-attachments/assets/78f57a85-9b0f-486f-be34-8b701e66c7b3" />
Native LazyFrame support. Polars LazyFrames are now rendered lazily by default, preventing potentially expensive computations on render. Tables can also be made lazy (given a Polars LazyFrame) with mo.ui.table.lazy(lazyframe).
Full Changelog: https://github.com/marimo-team/marimo/compare/0.12.6...0.12.7
✨ Prompt file support for `marimo new`. You can now pass a text file to marimo new. File contents will be used as the prompt to generate a notebook us
✨ Prompt file support for marimo new. You can now pass a text file to marimo new. File contents will be used as the prompt to generate a notebook using an LLM:
marimo new prompt.txt
This is helpful when working with long prompts. On unix-like systems, you can also pipe prompt input from stdin:
cat prompt.txt | marimo new
For usage examples, run marimo new --help or see the docs.
🐍 Improved completions. Our autocompleter now gives completions for function arguments.
↕ Better sorting for table columns with nulls. Null entries are now shown at the end of table columns when sorting (for both ascending and descending). This makes it easy to see the largest and smallest values in your data, without having to page past nulls.
🧑💻 Copy-button for mo.ui.code_editor The code editor now includes a small button to copy code with one click. Thanks @nojaf for the contribution!
🛢️ Ibis support improvements. Improved support for Ibis in mo.ui.dataframe. Thanks @szst11!
Full Changelog: https://github.com/marimo-team/marimo/compare/0.12.5...0.12.6
Improved AI prompts - We've taken a pass at updating our AI prompts for chat, inline completions, and generate cell. We'd love to hear your feedback!
Improved AI prompts - We've taken a pass at updating our AI prompts for chat, inline completions, and generate cell. We'd love to hear your feedback! If can drop by our Discord and let us know. Also, you can reference variables with the @ symbol to provide additional context.
<img width="723" alt="Screenshot 2025-04-07 at 8 53 48 AM" src="https://github.com/user-attachments/assets/341d18e0-3cbf-4a6e-9c38-506e37ce2124" />
Improved error messages - Errors have gotten a refresh. They are now grouped, text is deduped, and much clearer. We have also included in-depth explanations to common errors https://docs.marimo.io/guides/understanding_errors/
New database type: Timeplus h/t @jovezhong
uv and uvx available in Docker images by @peter-gy in https://github.com/marimo-team/marimo/pull/4404Full Changelog: https://github.com/marimo-team/marimo/compare/0.12.4...0.12.5
Nothing published for this version
✨ Text to notebook! This release adds an exciting new feature: generate notebooks with a zero-shot prompt using an LLM, straight from the command line
✨ Text to notebook! This release adds an exciting new feature: generate notebooks with a zero-shot prompt using an LLM, straight from the command line. This uses the same endpoint we've hosted at https://marimo.app/ai, but in the future we may extend to allow your own endpoints.
To get started, just type marimo new "your prompt here". For example:
marimo new "Plot an interesting 3D surface with matplotlib. Include an interactive element to control the shape of the surface."
The marimo notebook generator can make use of marimo UI elements, and is aware of rules governing usage of variables in marimo. So feel free to get creative, and send us your favorite prompts at https://marimo.io/discord!
For example prompts, check out https://marimo.app/ai.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.12.2...0.12.3
Nothing published for this version
Environment variables - in beta behind a feature flag. There is a new panel to read/write environment variables. This will be extended to more Secret
Full Changelog: https://github.com/marimo-team/marimo/compare/0.12.0...0.12.1
This release contains a small breaking change. sys.argv is now patched to the args after the marimo command
.env) next to your pyproject.toml. You can customize this with:[tool.marimo.runtime]
dotenv = [] # don't load any
dotenv = [".env"] # default
dotenv = [".env", ".env.production"] # load multiple
This feature was contributed by @lucharo!
sys.argv is now patched to the args after the marimo commandFor example, for
marimo edit notebook.py -- foo bar -baz 42
sys.argv would be set to
["notebook.py", "foo", "bar", "-baz", "42"]
.env by default. This can be removed through configuration.Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.31...0.12.0
This release includes lot lots of table improvements. You can now drop images directly in markdown and the file will be copied, instead of encoded as
This release includes lot lots of table improvements. You can now drop images directly in markdown and the file will be copied, instead of encoded as base64.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.30...0.11.31
Nothing published for this version
fix: cache kwargs regression in 3480 by @dmadisetti in https://github.com/marimo-team/marimo/pull/4255
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.28...0.11.29
docs: touch up marimo snippets by @akshayka in https://github.com/marimo-team/marimo/pull/4253
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.27...0.11.28
🐍 Python 3.13. This release adds official Python 3.13 support.
mo.ui.table() and the built-in dataframe viewer now render other marimo elements using their rich representation.Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.26...0.11.27
This release adds experimental language server support (docs), fixes a regression in which keyboard navigation would create cells, fixes a bug with pa
This release adds experimental language server support (docs), fixes a regression in which keyboard navigation would create cells, fixes a bug with parsing SQL references, and improves the legibility of table column summaries (while also making tables more compact).
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.25...0.11.26
fix: anywidget re-render in wasm by @mscolnick in https://github.com/marimo-team/marimo/pull/4175
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.23...0.11.24
feat: rename symbols with LSP by @mscolnick in https://github.com/marimo-team/marimo/pull/4159
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.22...0.11.23
🤖 Custom LLM completions. Use custom providers for copilot-like completions (ollama, anthropic, openai, gemini, ...) 🛠️ Fixes and improvements. Genera
🤖 Custom LLM completions. Use custom providers for copilot-like completions (ollama, anthropic, openai, gemini, ...) 🛠️ Fixes and improvements. General quality of life improvements.
Time dtype by @FBruzzesi in https://github.com/marimo-team/marimo/pull/4019Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.21...0.11.22
Your coding agent can read these notes before it upgrades. Set up the MCP server →