NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2518 most downloaded on PyPI
A library for making reactive notebooks and apps
Last release 3 days ago
01 Oct 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 54 of the last 60 stable releases
6 versions withdrawn
withdrawn after publishing
5 years old
392 releases · first in 2022
One column per quarter.
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
Quality of life fixes and improvements.
Quality of life fixes and improvements.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.20...0.11.21
mep/8: introduce setup block by @dmadisetti in https://github.com/marimo-team/marimo/pull/4023
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.19...0.11.20
improve: Easier altair installation dataframe panel helper text (QoL) by @Haleshot in https://github.com/marimo-team/marimo/pull/3961
altair installation dataframe panel helper text (QoL) by @Haleshot in https://github.com/marimo-team/marimo/pull/3961Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.18...0.11.19
fix: use encoding='utf-8' for remote marimo notebooks by @mscolnick in https://github.com/marimo-team/marimo/pull/4004
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.17...0.11.18
Fix filename in cloud examples readme by @ashah03 in https://github.com/marimo-team/marimo/pull/3991
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.16...0.11.17
Nothing published for this version
fix: prevent many requests for table lists when no tables exists by @Light2Dark in https://github.com/marimo-team/marimo/pull/3968
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.14...0.11.15
Update dependencies in connect_to_sqlite.py by @sumau in https://github.com/marimo-team/marimo/pull/3953
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.13...0.11.14
This change includes performance and usability fixes, as well as a new experimental feature —
This change includes performance and usability fixes, as well as a new experimental feature —
🧪 experimental: autorun test functions with pytest: When this experimental flag is enabled, cells containing only functions starting with test will automatically be executed with pytest.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.12...0.11.13
This change includes improved error messages, explaining why marimo places constraints on variables and "star" imports.
This change includes improved error messages, explaining why marimo places constraints on variables and "star" imports.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.11...0.11.12
🧠 This release makes it possible to use thinking models (e.g., o3-mini) in the AI chat sidebar and elsewhere, and includes a couple other fixes and im
🧠 This release makes it possible to use thinking models (e.g., o3-mini) in the AI chat sidebar and elsewhere, and includes a couple other fixes and improvements.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.10...0.11.11
📈 mo.ui.altair_chart now used Arrow instead of CSV for its over-the-wire format. This has tradeoffs: memory consumption is lower, parsing times are fa
🤖 Chat sidebar is now GA.
📈 mo.ui.altair_chart now used Arrow instead of CSV for its over-the-wire format. This has tradeoffs: memory consumption is lower, parsing times are faster, but download time could be longer for remote servers. This also improves the type correctness by avoiding guessing the CSV types. Please reach out if you experience any regressions.
Bokeh objects by @way-zer in https://github.com/marimo-team/marimo/pull/3910Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.9...0.11.10
chore: small test fixes by @Light2Dark in https://github.com/marimo-team/marimo/pull/3880
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.8...0.11.9
fix: mo.ui.date popover by @mscolnick in https://github.com/marimo-team/marimo/pull/3855
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.7...0.11.8
🔄 Serialized outputs - when auto-instantiate is off, outputs are stored in __marimo__/session. When you restart you notebook, your outputs will be bro
🔄 Serialized outputs - when auto-instantiate is off, outputs are stored in __marimo__/session. When you restart you notebook, your outputs will be brought back without running any cells. Every cell is still considered stale, so whenever a cell is run, we run it's ancestors to bring them up-to-date.
💽 Refreshed data-sources panel - The datasources panel now includes an improved hierarchy (Engine > Database > Schema > Table > Columns), more performant loading, lazy-loading, and column metadata like types and primary keys. h/t @Light2Dark
<img width="627" alt="image" src="https://github.com/user-attachments/assets/21fb489b-f14c-4480-8962-a1d3ae725445" />
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.6...0.11.7
fix: downgrade pyodide to 0.27.0 by @mscolnick in https://github.com/marimo-team/marimo/pull/3809
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.5...0.11.6
Configure project settings on a per-notebook basis, by inlining as script metadata (PEP 723):
Configure project settings on a per-notebook basis, by inlining as script metadata (PEP 723):
# /// script
# [tool.marimo.runtime]
# auto_instantiate = false
# on_cell_change = "lazy"
# [tool.marimo.display]
# theme = "dark"
# cell_output = "below"
# ///
Note: script metadata configuration has the highest precedence, followed by pyproject.toml configuration, then user configuration.
1/2) by @Haleshot in https://github.com/marimo-team/marimo/pull/3709Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.4...0.11.5
docs: editable install for sandbox mode by @mscolnick in https://github.com/marimo-team/marimo/pull/3786
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.3...0.11.4
Add databases through the GUI → generate a cell connecting to that database.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.2...0.11.3
feat: add searchable dropdown functionality by @devin-ai-integration in https://github.com/marimo-team/marimo/pull/3723
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.1...0.11.2
fix: code scanning alerts by @dmadisetti in https://github.com/marimo-team/marimo/pull/3689
Bug fixes and improvements.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.11.0...0.11.1
SQL Engine Support. Connect to various databases like postgresql, mysql, snowflake and more, using your preferred SQL engine.
This release adds support for using for multiple SQL connection libraries, such as SQLModel and SQLAlchemy. You can now define SQL connections in your code like:
import sqlalchemy
import sqlmodel
import duckdb
# Create an in-memory SQLite database with SQLAlchemy
sqlite_engine = sqlachemy.create_engine("sqlite:///:memory:")
# Create a Postgres database with SQLModel
postgres_engine = sqlmodel.create_engine("postgresql://username:password@server:port/database")
# Create a DuckDB connection
duckdb_conn = duckdb.connect("file.db")
And then select which connection to use in the SQL cell.
h/t @Light2Dark
marimo edit notebook.md) has an improved syntax format: python {.marimo}. You can also use SQL cells in the markdown file-format, using sql {.marimo}. To learn more, run marimo tutorial markdown-formath/t @dmadisetti
Markdown syntax - Added support for details, admonitions, and emojis in markdown
Performance & Reliability - Lots of bug fixes for better resource cleanup and memory management, as well as disabling features not used in run-mode.
start and stop by @Hofer-Julian in https://github.com/marimo-team/marimo/pull/3651Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.19...0.11.0
This release contains some important improvements to memory consumption.
This release contains some important improvements to memory consumption.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.18...0.10.19
🐳 Added [DeepSeek](https://docs.marimo.io/guides/editor_features/ai_completion/?h=deepseek#using-other-ai-providers) support and documentation for AI
mo.ui.app_meta().request API to access incoming request context (headers, query params, and user info)mo.Thread, Altair charts, and table formatting.Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.17...0.10.18
📈 Tracing panel: This release includes a new helper panel for cell tracing and observability. This can be used for real-time tracking of slow cells, v
📈 Tracing panel: This release includes a new helper panel for cell tracing and observability. This can be used for real-time tracking of slow cells, visualizing execution order, and monitoring of execution statuses. This feature was built by @Light2Dark.
https://github.com/user-attachments/assets/1c042e0b-2f70-4ec0-ad63-a0c59d5a89a4
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.15...0.10.16
mo.download allows for (async) functions as that data arg
mo.download allows for (async) functions as that data arg
# JSON download with lazy loading
async def get_json_data():
await asyncio.sleep(1)
_data = {"message": "Hello", "count": 42}
return json.dumps(_data).encode("utf-8")
download = mo.download(
data=get_json_data,
filename="data.json",
label="Download JSON",
)
download
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.14...0.10.15
🪟 Lay out notebooks in columns! Thanks to work by @wasimsandhu, you can now arrange cells into multiple columns while editing — use your screen real-e
🪟 Lay out notebooks in columns! Thanks to work by @wasimsandhu, you can now arrange cells into multiple columns while editing — use your screen real-estate to the fullest! (Docs.)
📃 Edit notebooks using your own editor. Announcing initial support for one of our most asked-for features: you can now edit notebook files using your editor of choice (neovim, Cursor, VS Code, ...) and stream changes to a running edit session. To opt-in, start your edit session with --watch:
marimo edit --watch my_notebook.py
When editing my_notebook.py in your text editor, changes are sent to the browser on save.
Expect quality-of-life improvements to the external editor experience in the future.
🏃 Re-run all cells. A new command in the command palette lets you re-run all cells; you can assign a keyboard shortcut to this in the notebook settings.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.13...0.10.14
This release contains many quality of life improvements, including contributions from two new contributors! 🎉
This release contains many quality of life improvements, including contributions from two new contributors! 🎉
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.12...0.10.13
Fix a bug when renaming notebooks in the UI
Fix a bug when renaming notebooks in the UI
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.11...0.10.12
This release contains important vim bugfixes.
This release contains important vim bugfixes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.10...0.10.11
This release includes many quality of life updates, from many contributors!
This release includes many quality of life updates, from many contributors!
Here are just a few highlights:
mo.notebook_location() to get "path" to the notebook that works both locally and in WASM.button.py and modify preview by @Haleshot in https://github.com/marimo-team/marimo/pull/3342Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.9...0.10.10
Incrementally instantiate notebooks. When autorun on startup is disabled, you can now incrementally instantiate select parts of your notebook: run a c
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.8...0.10.9
Engineering format in tables. Thanks @kjgoodrick for the contribution (#3301)!
Engineering format in tables. Thanks @kjgoodrick for the contribution (#3301)!
Better pytest assertions. Improved error messages when testing marimo notebooks with pytest. Thanks @dmadisetti!
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.7...0.10.8
🧪 Test notebooks with pytest!. It's now possible to test notebooks using pytest! Running pytest test_notebook.py will run and test all cells whose nam
🧪 Test notebooks with pytest!. It's now possible to test notebooks using pytest! Running pytest test_notebook.py will run and test all cells whose name starts with test_*. This is only possible because marimo notebooks are stored as code (Python, not JSON!). Learn more at our docs. Shoutout to @dmadisetti for contributing this feature!
🔬Experimental tracing panel. This release includes an exciting new experimental tracing panel, giving you insight into which cells run, when, and for how long. Shoutout to @Light2Dark for contributing this feature! Enable it through the user settings (⚙ icon at the top right of your notebook).
🖱 Usability improvements. This release includes a number of usability improvements, including helpful prompts when you accidentally try using IPython magics, the ability to copy/paste the contents of a notebook file directly into the notebook (pasting creates cells!), the ability to use sandboxed notebooks with HTML export (thanks @metaboulie for contributing this!) and a few bug fixes.
marimo export html command by @metaboulie in https://github.com/marimo-team/marimo/pull/3236Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.6...0.10.7
📝 Updated documentation - our documentation has been migrated to mkdocs. This aims to improve the navigation and layout of the API docs. This also has
mkdocs. This aims to improve the navigation and layout of the API docs. This also has improved the hover tooltip and live docs inside marimo's editor.pandas and polars Series using our fancy data-frame viewer with (sorting, filtering, paginating); improved format_mapping for None values (h/t @metaboulie!).marimo shell-completion for instructions how to install our CLI completions.Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.5...0.10.6
This release includes bug fixes for the marimo server when working with notebooks in edit mode.
This release includes bug fixes for the marimo server when working with notebooks in edit mode.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.4...0.10.5
feat: replace google search with help dropdown by @devin-ai-integration in https://github.com/marimo-team/marimo/pull/3195
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.3...0.10.4
This release includes improvements to marimo's capability to export notebooks as interactive HTML files. Learn more about this new feature at our docs
This release includes improvements to marimo's capability to export notebooks as interactive HTML files. Learn more about this new feature at our docs: https://docs.marimo.io/guides/exporting.html#export-to-wasm-powered-html
Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.1...0.10.2
fix: higher-order components should call on_update_completion() by @akshayka in https://github.com/marimo-team/marimo/pull/3154
on_update_completion() by @akshayka in https://github.com/marimo-team/marimo/pull/3154Full Changelog: https://github.com/marimo-team/marimo/compare/0.10.0...0.10.1
🛑 Breaking change: Nameless cells in the marimo Python file are now generated as _ (instead of __) to fix mypy and pyright lint errors
marimo export html-wasm, to export your notebook as a WebAssembly-powered HTML file. This lets you publish your marimo notebooks on GitHub Pages, without paying for any servers — the web browser executes your Python code instead! Learn more at our docs. WebAssembly notebooks do have some limitations on the packages that can be used.ipynb files while editing; this lets you save a snapshot of your notebook outputs that you can view on GitHub. Enable this feature through the notebook settings menu (top right, ⚙️ icon).host=0.0.0.0--sandbox🛑 Breaking change: Nameless cells in the marimo Python file are now generated as _ (instead of __) to fix mypy and pyright lint errors
marimo export html-wasm with included assets by @mscolnick in https://github.com/marimo-team/marimo/pull/3134Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.34...0.10.0
fix: ignore mo.stop() 'errors' in marimo export by @mscolnick in https://github.com/marimo-team/marimo/pull/3099
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.33...0.9.34
Configuration can now be overridden using pyproject.toml, providing more flexibility in managing notebook settings. This goes under the [tool.marimo]
pyproject.toml, providing more flexibility in managing notebook settings. This goes under the [tool.marimo] settings. To learn more about the configuration exposed, run marimo config describemarimo.create_asgi_app supports ASGI middleware (e.g. for authentication/authorization).ipynb improvements/interoperability. For example: marimo export ipynb nb.py -o snapshot.ipynb --include-outputs --sort=top-down. You can use this to view the outputs in GitHub or pipe the results in your other tools.Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.32...0.9.33
test: update export ipynb test by @mscolnick in https://github.com/marimo-team/marimo/pull/3067
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.31...0.9.32
improvement: add copy/paste to json viewer, support urls by @mscolnick in https://github.com/marimo-team/marimo/pull/3050
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.30...0.9.31
This release contains an important bugfix for hidden markdown.
This release contains an important bugfix for hidden markdown.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.29...0.9.30
improvement: autoscroll in chat by @mscolnick in https://github.com/marimo-team/marimo/pull/3030
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.28...0.9.29
chore: move max_columns to avoid breaking change by @mscolnick in https://github.com/marimo-team/marimo/pull/3010
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.27...0.9.28
Nothing published for this version
fix: pagination in mo.ui.table() when passed in manually by @mscolnick in https://github.com/marimo-team/marimo/pull/2972
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.25...0.9.26
Nothing published for this version
docs: expensive notebooks by @akshayka in https://github.com/marimo-team/marimo/pull/2945
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.23...0.9.24
improvement: support smart paste and drag of files by @mscolnick in https://github.com/marimo-team/marimo/pull/2934
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.22...0.9.23
🌐 Custom HTML head file. You can now attach a custom HTML head file to a marimo notebook, letting you for example load analytics, custom fonts, or ext
🌐 Custom HTML head file. You can now attach a custom HTML head file to a marimo notebook, letting you for example load analytics, custom fonts, or external scripts or libraries.
⚡ Allow <script src/>: marimo now lets notebooks create <script src/> tags; marimo already lets users run custom javascript (and Python), so this doesn't increase our threat surface.
📦 Improved Poetry support. We fixed a bug in which packages weren't populated in the "Manage Packages" panel when running marimo with Poetry.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.21...0.9.22
docs: Add frameworks in README list; fix typo by @Haleshot in https://github.com/marimo-team/marimo/pull/2879
frameworks in README list; fix typo by @Haleshot in https://github.com/marimo-team/marimo/pull/2879Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.20...0.9.21
docs: faq update for package repro by @akshayka in https://github.com/marimo-team/marimo/pull/2870
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.19...0.9.20
perf: use pyodide lockfiles by @mscolnick in https://github.com/marimo-team/marimo/pull/2858
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.18...0.9.19
⌨️ Keyboard shortcuts for buttons: mo.ui.button(keyboard_shortcut="Cmd-l")
mo.ui.button(keyboard_shortcut="Cmd-l")mo.app_meta().mode to determine if running as "edit", "run", "script"marimo convert by @manzt in https://github.com/marimo-team/marimo/pull/2850Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.17...0.9.18
docs: add integer-only example for number input by @metaboulie in https://github.com/marimo-team/marimo/pull/2816
Full Changelog: https://github.com/marimo-team/marimo/compare/0.9.16...0.9.17
Your coding agent can read these notes before it upgrades. Set up the MCP server →