Skip to content

Releases: marimo-team/marimo

0.14.16

01 Aug 14:30

Choose a tag to compare

This release extends code completion with basedpyright support and includes several important bug fixes.

✨ Enhancements

  • Clear selection or autocomplete popup first before exiting to command mode (#5849)
  • Use svg renderer and support enum charts (#5846)
  • Add basedpyright (#5712)

🐛 Bug fixes

  • Top-level cache decorator with additional deps (#5862)
  • Make reusable cell link only clickable on text, not entire block (#5851)
  • Set combobox to truncate (#5829)
  • Fix missing !pip transform in notebook converter (#5841)

📝 Other changes

  • Add fallback to csv for col summaries (#5871)
  • Update dependency openapi-typescript to ^7.8.0 (#5869)
  • marimo-snippets on dataframe page (#4638)
  • Use break-word in row-viewer panel (#5845)

Full Changelog: 0.14.15...0.14.16

0.14.15

30 Jul 19:36

Choose a tag to compare

This release improves marimo's code intelligence with runtime completions, expands notebook conversion capabilities, and includes several UI/UX improvements and bug fixes.

✨ Highlights

Dynamic key completion

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.

Dynamic key completion showing dictionary and dataframe column suggestions

When you type dataframe[", marimo suggests column names. When accessing dictionary keys, you'll see all available keys as completions. This works with:

  • Dictionary keys - my_dict[" shows all available keys
  • DataFrame columns - df[" suggests column names
  • Custom objects - Any object implementing _ipython_key_completions_()

Huge thanks to @zilto for contributing this feature!

py:percent support in marimo convert

marimo 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.

Column layout improvements

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).

Redesigned column UI with kanban-inspired layout

Console output text wrapping

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.

Console output text wrapping toggle demonstration

🚨 Breaking changes

  • 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.

✨ Enhancements

  • Add duckdb dialect for codemirror (#5786)
  • Prevent accidental overwrites and converter for non-marimo Python scripts (#5686)
  • Expand hidden code on go-to-definition (#5803)
  • Bypass delete confirmation for empty cells (#5804)
  • Migrate LSP from @sourcegraph/vscode-ws-jsonrpc to vscode-ws-jsonrpc (#5798)
  • Better icon caching (#5791)
  • Revamp column UI with kanban-inspired design (#5772)
  • Support keyboard navigation across columns in command mode (#5760)
  • Add copy button in console, and fix ctrl-a to copy all (#5765)
  • Don't persist minimap state open/closed state between page reloads (#5757)
  • Add text wrapping toggle for console output (#5739)
  • Add deployment doc on how to schedule marimo (#5728)
  • Move cell left/right in edit mode (#5808)
  • Dynamic SQL keyword completion based on dialect (#5775)
  • Improve AI prompt to not comment on the code (#5822)
  • Better formatting for google docstrings (#5750)
  • Better jupyter widget warning for unsupported (#5785)
  • Identify ddl, dmls and run clickhouse.command instead of query (#5824)
  • Experimental backend aggregations in table charts (#5704)
  • Interactive key completion (#5618)

🐛 Bug fixes

  • Cache invaliadation for external decorators (#5758)
  • don't show sql bottom panel when cell is hidden (#5826)
  • Fix cell movement shortcuts on non-Mac keyboards (#5759)
  • Move cell delete ops inside setState callback to prevent race condition (#5813)
  • Conditionally show tip for invalid status in interactive terminal (#5790)
  • Copy-paste cell mime-type (#5789)
  • Cache invaliadation for external decorators (#5758)
  • Mo.plain_text rendering (#5764)
  • Change columns in place for mo.ui.dataframe and add tests (#5763)
  • Altair's code gen with comment (#5767)
  • Restrict Shift+Delete in edit mode to empty cells only (#5766)
  • Allow marimo to open the markdown file format over http (#5742)
  • Deemphasize unreferenceable cells in minimap when no cell is selected (#5754)
  • chore/fix: parse correct message for anywidget (#5741)
  • Ensure cell connections render above unselected cells in minimap (#5732)
  • Allow partial chatModelConfig (#5749)

📚 Documentation

  • Change vim mode command entry from Shift+Escape to Ctrl/Cmd+Escape (#5837)
  • Molab (#5809)
  • Update documentation with Shift+Enter command mode vim bindings (#5816)
  • Document Python script conversion support (#5795)
  • Fix file upload docs (#5788)
  • Add "Understanding dataflow" user guide (#5737)
  • Make gifs consisent width on docs landing page (#5735)
  • Remove dead link (#5729)
  • Add zh-tw translation section for sharing cloud notebooks (#5821)
  • Two tiny fixes to tutorial text. (#5812)

🔬 Preview features

  • Mcp tool for marimo docs (#5745)
  • Add mcp backend client side integration (#5736)

📝 Other changes

  • Check for missing cursor for sqlalchemy native output (#5823)
  • Update base-url on remote healthy (#5787)
  • Add suspense for vega charts (#5770)
  • Add binary handling in tables (#5762)
  • Skip broken datetime tests (#5753)

New Contributors

Full Changelog: 0.14.13...0.14.14

0.14.13

23 Jul 15:46

Choose a tag to compare

This release introduces a new minimap for navigating reactive notebooks, along with important fixes for LSP code completions.

✨ Highlights

🗺️ Tracing dataflow with the minimap

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.

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.

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.

✨ Enhancements

  • Add hotkey to toggle minimap (Mod-Shift-i) (#5730)
  • Add param to show dtypes in table header (#5693)
  • Properly focus (and unfocus) multi-cell delete confirmation (#5690)
  • Add reactive notebook minimap for navigating and visualizing dataflow (#5707)
  • Add support for TIMETZ and TIMESTAMP_MS data types in DuckDB integration (#5703)

🐛 Bug fixes

  • Ensure "Convert to SQL" action converts to SQL instead of markdown (#5725)
  • Windows paths for persistent cache (#5723)
  • Fix stale variable dependencies in frontend (#5719)
  • Fix LSP code completions and optimize cell ordering for imports (#5721)
  • Show dtypes for idexes in tables (#5694)
  • Better support for geopandas in mo.ui.dataframe and mo.ui.table (#5674)
  • Hide vim cursor(s) when in command mode (#5695)
  • Save button in multi-col notebooks lighting up (#5691)
  • Fix Enter key handling for delete confirmation button (#5689)

📚 Documentation

  • Add traditional chinese (zh-tw) readme.md translation (#5715)
  • Add Command Mode documentation (#5696)

New Contributors

Full Changelog: 0.14.12...0.14.13

0.14.12

18 Jul 17:45

Choose a tag to compare

This release introduces safe cell deletion and expands vim keybindings for command mode. See full release notes below.

✨ Highlights

🗑️ Graceful cell deletion with keyboard shortcuts

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.

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

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

⌨️ Expanded vim keybindings

We've added more vim-style keybindings for cell operations in command mode (#5675):

  • yy - Copy cell(s)
  • p - Paste below
  • P - Paste above
  • o - Insert cell below
  • O - Insert cell above
  • u - Undo cell deletion

✨ Enhancements

  • Use backend binning for numeric columns (#5669)
  • Change "cell.delete" hotkey description from "Delete empty cell" to "Delete cell" (#5676)
  • Add additional vim keybindings for cell operations (#5675)
  • Add destructive cell deletion confirmation (#5664)
  • Expose auto output flag (#5652)
  • Sidebar buttons are accessible now (#5672)
  • Enhance multi-cell action toolbar with new shortcuts and actions (#5655)
  • Add config override detection and UI components (#5650)
  • Update multi-cell toolbar labels: "Hide/Show cells" → "Hide/Show code" (#5653)
  • Mpl.interactive with remote backends (#5662)

🐛 Bug fixes

  • Partial config leads to errors (#5683)
  • Enable cache at top level (#5678)
  • Prompt user to open invalid files (#5677)
  • Detect inline datasets for altair_chart (#5682)
  • Support more pandas dtypes in dataframe viewer (#5660)
  • Additional unit tests for test_transformers.py and fix edge cases (#5654)

📝 Other changes

  • Don't write snapshots on empty session views (#5684)
  • Hide code logic for html export (#5685)
  • 'marimo env' shows if it is an editable install (#5666)
  • Skip completing placeholder on readonly editors (#5661)

Full Changelog: 0.14.11...0.14.12

0.14.11

15 Jul 19:49

Choose a tag to compare

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.

✨ Highlights

⌨️ Command mode

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.

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.

Navigation and cell management (Escape, then):

  • / - Move between cells
  • Enter - Edit the selected cell
  • a/b - Add a new cell above/below
  • c/v - Copy and paste cells
  • s - Save notebook
  • Ctrl/Cmd + ↑/↓ - Jump to top/bottom of notebook
  • Shift + Enter - Run cell and advance to next

Multi-cell selection:

  • Shift + ↑/↓ - Select multiple cells
  • Apply operations to all selected cells at once (hide, delete, disable, etc.)

You 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/up
  • gg/G - Jump to first/last cell
  • Shift + j/k - Extend selection

You can return to editing with i or Enter to exit command mode. Follow future plans for vim support in #931.

📊 Revamped data editor

The data editor plugin (mo.ui.data_editor and mo.ui.dataframe) has been totally upgraded.

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.

Direct editing:

  • Paste from clipboard - Copy data from Excel or other sources and paste into cells
  • Column operations - Add, rename, or delete columns
  • Row deletion - Remove rows
  • No more limits - The 1000-row restriction is gone

Transformations:

  • Null value filtering - Filter by null/non-null values
  • Duplicate handling - Remove duplicates with control over which records to keep
  • Live updates - See changes as you edit
  • Improved performance - Upgraded grid engine handles large datasets

These improvements make the data editor feel more like a spreadsheet when you need it, while maintaining dataframe operations.

🚨 Breaking changes

  • 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.

🔬 Preview features

✨ Enhancements

  • Allow auto download to be configured globally (#5647)
  • Add vim bindings for top/bottom cell navigation: gg and G (#5636)
  • Better ollama configuration (#5644)
  • Absolute positioning of button and enable select all rows (#5643)
  • Data editor plugin v2 (#5514)
  • Multi-cell selection (#5633)
  • Use i to focus a cell from command mode when in vim keymap (#5632)
  • Propagate Ctrl+[ as Escape to enter command mode with vim keybindings (#5635)
  • Start markdown cells with hidden code (#5627)
  • Navigation, copy/paste, new cells hotkeys when on a cell (#5620)
  • Better focus navigation between cell and cell-editor (#5614)
  • Feat/add force capability on export (#5610)
  • Add form tooltip inline for mo.dataframe (#5600)
  • Set scrollToView to smooth (#5604)
  • Add default_table_max_columns to user config (#5598)
  • Autofocus generate with AI (#5592)
  • Add quick actions to change cell output area (#5596)
  • Scroll table with keyboard navigation (#5595)
  • Configurable skew protection in create_asgi_app, default False (#5585)
  • Display failed connection information + more graceful backoff. (#5584)
  • Gracefully handle BaseExceptions from downstream df libraries (#5576)
  • Show additional loading indicator after 5 seconds (#5580)
  • Remove title for table cell (#5574)
  • Allow select on table cells (#5565)
  • Add cursor introspection for dbapi spec (#5557)
  • Add null and non-null filter for dataframes (#5548)
  • Don't auto scroll when sending cell to top/bottom from menu (#5544)
  • Add tool-chaining, send back signature (anthropic), add tool ui in chat-panel (#5469)
  • Use upstream signature formatting code for pylsp (#5214)
  • Remove duplicate import in data_explorer docs (#5060)
  • Build plots and charts from tables, with Python code generation (#5452)
  • Add chart builder / chart-to-cell functionality within table (#5392)

🐛 Bug fixes

  • Lsp syncing fixes for hover and completion (#5637)
  • Enable cache decoration on class methods (#5630)
  • Variable kwargs did not invalidate cache (#5613)
  • Fix handling of class attribute references for reactive variables (#5616)
  • Patch matplotlib interactive to not steal focus on mount (#5586)
  • Rename dataframe transforms (#5599)
  • Fix overflow on footer styles (#5593)
  • Expand checks around decorated functions to enable functools usage (#5582)
  • Cast elements in list of enums to string for polars (#5572)
  • Detect datetime and handle timezones for pandas (#5573)
  • Make reactivity options in footer responsive for small screen widths (#5563)
  • Opening a notebook from the sidebar when in a subpath (#5561)
  • Fix deepcopy in from_anywidget.py (#5134)

📚 Documentation

  • Explain the difference between gho and ghp tokens (#5639)
  • Update cell docstring to better express current abillities (#5607)
  • Docs for Windsurf upgrade (#5587)
  • Add table panels and chart builder docs (#5533)

📝 Other changes

  • DRY up logic between vim keymap i binding (#5645)
  • Consolidate and cleanup cell keyboard props (#5631)

New Contributors

Full Changelog: https://github.com/...

Read more

0.14.10

03 Jul 01:00

Choose a tag to compare

What's Changed

✨ Highlights

🧮 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)

459226117-8e49d17c-f2db-48ff-af8b-efb7ec7cd626.mp4

🖱️ Right-click the create cell button to get a context menu that lets you create Python, SQL, or markdown cells. (#5489)

image

🐛 Bug fixes

  • Fix infinite loop with query parameters (#5519)
  • Reuse ports that are available but recently closed (#5515)
  • Don't highlight keyword argument names as reactive references (#5500)
  • Include all query params in WebSocket connection (#5507)
  • Ensure cell action tooltip appears above sidebar panel (#5491)
  • register UIElement on change if it is missing from the UIElementRegistry (#5474)
  • Tracing panel - sort queued cells to bottom (#5458)
  • Fix go-to-definition for function declarations (#5484)

📝 Other changes

  • 0.14.10 (da5e4ec)
  • Prevent noisy health calls in wasm situations (#5510)
  • Minor typo fix in uv docs (#5508)
  • Update dependency boto3 to >=1.38.46 (#5501)
  • Update dependency clickhouse-connect to >=0.8.18 (#5502)
  • [pre-commit.ci] pre-commit autoupdate (#5499)
  • add lilypad (#5497)
  • Make websocket-jsonrpc server bridge generic (#5427)

New Contributors

Full Changelog: 0.14.9...0.14.10

0.14.9

28 Jun 15:12

Choose a tag to compare

What's Changed

This release includes quality-of-life improvements and bug fixes (importantly, restoring compatibility with our VS Code extension).

✨ Enhancements

  • Did you know that marimo has a command palette? (Cmd/Ctrl+k). We have a tooltip now to remind you: render command palette shortcut for notebook actions (#5467)
  • Add Vim-style autocompletion keybindings (Ctrl-y, Ctrl-n, Ctrl-p) (#5466)
  • Configuration to disable sharing actions in the marimo editor (#5432)
  • Make formatting failure message package-manager agnostic (#5459)
  • Update filename form placeholder text (#5462)

🐛 Bug fixes

  • Restore DOM-based metadata for VS Code extension compatibility (#5480)
  • Empty tool list error for openai compatible endpoints (#5482)
  • Fix shift-enter not focusing new cell at end (#5481)
  • Wasm kernels don't have argv (#5476)
  • Fix StateRegistry retain_active_states (#5435)

📚 Documentation

New Contributors

Full Changelog: 0.14.8...0.14.9

0.14.8

26 Jun 17:45

Choose a tag to compare

What's Changed

🖌️ 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.

Screenshot 2025-06-26 at 10 41 48 AM

This feature is currently opt-in: enable in the settings (Display > Reference Highlighting), or through the command palette (Ctrl/Cmd + k)

Screenshot 2025-06-26 at 10 28 07 AM

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.

All changes

  • fix: CLI print for non UTF-8 terminals by @akshayka in #5397
  • chore(frontend): Add invariant debugger statement for development by @manzt in #5414
  • [Windows] Fix Copy Path and Copy Relative Path returning identical results. by @Haleshot in #5399
  • chore: fix api spec by @Light2Dark in #5422
  • chore(deps): update testing dependencies by @renovate in #5383
  • fix: marimo development preview by @akshayka in #5403
  • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #5425
  • chore(deps): update build tools by @renovate in #5418
  • feat(frontend): Highlight reactive references by @manzt in #5415
  • fix: Update HTML snapshots for server templates by @akshayka in #5429
  • fix: set cell editor height and overflow to hidden when hidden by @Light2Dark in #5391
  • chore(frontend): Simplify and tighten TypeScript configuration by @manzt in #5413
  • dev: Use islands as local asset server by @dmadisetti in #5436
  • chore(frontend/lsp): Replace "as any" type assertion with a type guard by @manzt in #5437
  • docs: call out package support among wasm limitations by @akshayka in #5439
  • improvement: install packages directly by @Light2Dark in #5434
  • fix: disable controls when not connected by @akshayka in #5438
  • Fix markdown indentation by @vvsagar in #5442
  • chore(frontend): Remove simple cases of as any by @manzt in #5440
  • fix(islands): Replace "vega" runtime imports with "vega-loader" to resolve build issues by @manzt in #5449
  • Add light/dark/system settings from command by @koaning in #5444
  • chore(frontend): Remove "vega" as top-level dependency by @manzt in #5453
  • chore: Expand remote downloads for a broader range of urls by @dmadisetti in #5456
  • fix(vim): Show cursor only in last focused cell by @manzt in #5457
  • fix: loading progress bar in tables by @Light2Dark in #5443

New Contributors

Full Changelog: 0.14.7...0.14.8

0.14.7

23 Jun 22:32
17fb9c3

Choose a tag to compare

What's Changed

📦 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.

sandbox.mp4

uv projects.

project.mp4

🤖 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.

All changes

New Contributors

Full Changelog: 0.14.0...0.14.7

0.14.0

18 Jun 15:24

Choose a tag to compare

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:

table-rows-per-page

🤖 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.

polars_mermaid_explain

⚡️ Connection state. Improved backend connection detection and disabled editor features until connected.

Many stability improvements and bug fixes.

What's Changed

Read more