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.
A free copilot! 🤖 This release brings a free copilot to marimo, based on Codeium! We already support GitHub Copilot, but if you don't have a GitHub Co
A free copilot! 🤖 This release brings a free copilot to marimo, based on Codeium! We already support GitHub Copilot, but if you don't have a GitHub Copilot, consider Codeium for a free alternative. Docs here: https://docs.marimo.io/guides/ai_completion.html#codeium-copilot
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.25...0.6.26
marimo now renders dataframes in a rich table viewer by default! Search, filter, and sort in just one click or keystroke; get rich previews of your co
marimo now renders dataframes in a rich table viewer by default! Search, filter, and sort in just one click or keystroke; get rich previews of your columnar data distributions; and page through your data.
This is one small step in our vision in making marimo the best place to work with your data — we believe data should be tangible and extremely interactive, by default.
If you need to opt out — wrap your dataframe df in mo.plain(df).
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.24...0.6.25
Better support for anywidget, and a number of fixes/improvements.
Better support for anywidget, and a number of fixes/improvements.
mo.ui.anywidget by @mscolnick in https://github.com/marimo-team/marimo/pull/1694Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.23...0.6.24
App composition. This release adds support for embedding a notebook as an output in another notebook! This lets you make building blocks that you can
App composition. This release adds support for embedding a notebook as an output in another notebook! This lets you make building blocks that you can reuse in more complex notebooks:
import my_notebook import app
mo.ui.tabs({"My app": app})
See the PR description for more details: https://github.com/marimo-team/marimo/pull/1674
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.22...0.6.23
🔢 🔎 Filter dataframes without writing code! You can now filter columns in mo.ui.table without writing any code: just click on the column header to add
🔢 🔎 Filter dataframes without writing code! You can now filter columns in mo.ui.table without writing any code: just click on the column header to add a filter. Filters stack into logical ANDs, and can be used in conjunction with global search.
This feature supports Pandas and Polars dataframes.
<img width="824" alt="image" src="https://github.com/marimo-team/marimo/assets/1994308/68f0b30e-f2a6-467e-8c8c-cd97e920abcc">
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.21...0.6.22
improvement: more memory stats by @mscolnick in https://github.com/marimo-team/marimo/pull/1650
Bug fixes and improvements.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.20...0.6.21
Update Documentation for mo.tabs to mo.ui.tabs to Remove Deprecation … by @Haleshot in https://github.com/marimo-team/marimo/pull/1637
🔢 No-code Polars transformations! Polars is now supported in mo.ui.dataframe: transform Polars dataframes without writing code!
🔍 Searchable tables! We now have global search over dataframes and other tabular data, built into mo.ui.table!
🔔 Notebook run notifications. At marimo, the small details are important to us: your notebook favicon will now change based on whether your notebook is running or idle. We also have opt-in browser notifications on your notebook status -- so you can navigate away to another tab, and marimo will tell you when your notebook is done running (and if it errored).
Experimental strict execution. Reproducibility is important to us; we now have an experimental "strict" runtime that tries hard to prevent mutations and other non-deterministic behavior. Enable it with
[experimental]
execution_type = "strict"
in ~/.marimo.toml.
Bug fixes and improvements.
mo.ui.dataframe transformations by @mscolnick in https://github.com/marimo-team/marimo/pull/1612Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.19...0.6.20
➡️ Better conversion from Jupyter notebooks. marimo convert nb.ipynb > nb.py now automatically fixes some common MultipleDefinitionErrors, making the
➡️ Better conversion from Jupyter notebooks. marimo convert nb.ipynb > nb.py now automatically fixes some common MultipleDefinitionErrors, making the process of moving from Jupyter to marimo more seamless.
🏡 Fixes for our home users. A bug fix for our power users of the marimo edit homepage.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.18...0.6.19
Typo fix by @tlpinney in https://github.com/marimo-team/marimo/pull/1583
Bug fixes and improvements:
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.17...0.6.18
⌨ Customizable hotkeys! You can now customize keyboard shortcuts via the notebook settings!
⌨ Customizable hotkeys! You can now customize keyboard shortcuts via the notebook settings!
👨💻 Faster, more reliable code completion. This release makes code completion faster and more comprehensive.
📂 File browser improvements. You can now select folders in mo.ui.file_browser.
try blocks delete context variable afterwards, but marimo still considers them refs or defs if used by @dmadisetti in https://github.com/marimo-team/marimo/pull/1571Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.16...0.6.17
Includes a bug fix for ui.table on Firefox.
Includes a bug fix for ui.table on Firefox.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.15...0.6.16
📊 Table column previews! Tables created with mo.ui.table() now include summaries for each column, including chart previews and summary statistics:
📊 Table column previews! Tables created with mo.ui.table() now include summaries for each column, including chart previews and summary statistics:
Missing items are highlighted in orange, categorical quantities are shown with bar charts, and numerical quantities are shown with histograms.
Expect more quality-of-life improvements to tables and dataframes in the near future!
🔍 Filterable variables panel. You can now filter variables by cell name in the variables panel.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.14...0.6.15
Ibis support. This release adds support for ibis and the dataframe protocol in mo.ui.table and other components.
Ibis support. This release adds support for ibis and the dataframe protocol in mo.ui.table and other components.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.13...0.6.14
Datasets explorer panel! 🔭 marimo now ships with a datasets panel that intelligently discovers datasets (right now pandas, polars, pyarrow). and will
Datasets explorer panel! 🔭 marimo now ships with a datasets panel that intelligently discovers datasets (right now pandas, polars, pyarrow). and will show its shape and schema. From here you can explore its columns and get quick charts based on them - which you can add directly to your notebook.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.12...0.6.13
Go-to-definition. Ctrl/Cmd+Click on a variable name to go to its definition!
Go-to-definition. Ctrl/Cmd+Click on a variable name to go to its definition!
Run button. Use mo.ui.run_button() to create a button that triggers computation -- its value is set to True on click, and reset to False after running.
View config. At the command-line, type marimo config show to view marimo's configuration.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.11...0.6.12
feat: Flag for reverse proxy support by @dmadisetti in https://github.com/marimo-team/marimo/pull/1474
Thanks @vrtnis for making your first code contribution!
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.10...0.6.11
Revert "bump pyodide to 0.26.0 (#1499)" by @akshayka in https://github.com/marimo-team/marimo/pull/1502
Revert Pyodide upgrade.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.9...0.6.10
This release upgrades Pyodide to 0.26.0. It also includes improvements to the editor UI.
This release upgrades Pyodide to 0.26.0. It also includes improvements to the editor UI.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.8...0.6.9
This release temporarily disables Cmd+Click go-to-definition due to a regression (#1462), and fixes an editor UI bug.
This release temporarily disables Cmd+Click go-to-definition due to a regression (#1462), and fixes an editor UI bug.
docs: Fix LazyComponent example by installing missing dependency by @Haleshot in https://github.com/marimo-team/marimo/pull/1492Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.7...0.6.8
Fix a regression in the editor UI.
Fix a regression in the editor UI.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.6...0.6.7
UX improvement: hover on the running status icon to highlight the current running cell.
UX improvement: hover on the running status icon to highlight the current running cell.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.5...0.6.6
Imperative outputs. A new output function to replace an output at a particular index: mo.output.replace_at_index.
Imperative outputs. A new output function to replace an output at a particular index: mo.output.replace_at_index.
Download as HTML from marimo run. marimo run apps now support downloading the page view as HTML/PNG.
UX improvements. Panel icons are now more visible — if you haven't been using our panels, hopefully this helps you use them more!
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.4...0.6.5
fix: maybe fixes cmd+click, remove all underlines by @mscolnick in https://github.com/marimo-team/marimo/pull/1463
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.3...0.6.4
fix: boolean parsing for pandas and ui.table by @akshayka in https://github.com/marimo-team/marimo/pull/1460
A small fix for mo.ui.table.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.2...0.6.3
Update routes docs by @akshayka in https://github.com/marimo-team/marimo/pull/1453
Small fixes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.1...0.6.2
This change includes many quality-of-life improvements to the marimo editor.
This change includes many quality-of-life improvements to the marimo editor.
📝 Improved markdown editing. The markdown editor now includes basic keyboard shortcuts for bolding text, italicizing, inserting links and more. "Markdown cells", i.e. cells that have a single mo.md expression, automatically render with the markdown editor. We've also added a "add markdown cell" button to the bottom of the cell array for convenience.
📑 Go-to definition. Use Ctrl/Cmd+Click on a variable to automatically jump to its definition!
📣 Markdown admonitions. Admonitions in markdown are now supported! For example:
mo.md(
r"""
!!! {hint} "Here's a hint!"
You can now use admonitions in marimo.
"""
)
See the Python markdown docs for more info on syntax.
🤖 Generate with AI button. If you have AI completions enabled, at the bottom of the cell array you'll now see a "Generate with AI" button.
🗺 Routes. Use mo.routes to create a list of routes that are switched based on the URL path. This is helpful if your working on a marimo notebook that will be deployed as an app -- you can use it in conjunction with mo.sidebar to create multipage apps.
marimo env Command by @Haleshot in https://github.com/marimo-team/marimo/pull/1410Welcome to the marimo family!
Full Changelog: https://github.com/marimo-team/marimo/compare/0.6.0...0.6.1
Version 0.6.0 includes two big new features — first-class markdown support and token-authentication — and small quality of life improvements.
Version 0.6.0 includes two big new features — first-class markdown support and token-authentication — and small quality of life improvements.
marimo ❤️ markdown: marimo edit nb.md. marimo now supports markdown as a first-class file format. This means that if you're working on notebook that's heavy on text, you can write your notebook in markdown using an editor of your choice (VSCode, vim — anything you like!). Save it as nb.md, then fire up the marimo editor to interact with it — marimo edit nb.md — or run it as an app with marimo run nb.md.
When working with markdown, create a notebook cell using a special fenced code block that starts with {python} (note the braces!).
```{python}
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
```
Here's a full example:
# Hello, world!
This is a markdown powered notebook.
```{python}
import random
random.randint(0, 1000)
```
```{python, hide_code=true}
import marimo as mo
```
The markdown file format is not meant as a replacement for the Python one, but it gives you the flexibility to choose the format that's best for your workflow. You can convert markdown notebooks to Python with
marimo convert nb.md > nb.py
and export Python to markdown with
marimo convert nb.py > nb.md
marimo export notebook.md > notebook.py
Check out our tutorial to learn more.
Huge shout out to @dmadisetti for contributing the markdown support! 💪🎉
Token-based authentication 🔑. marimo now runs with token-based authentication by default — this makes sure that only trusted parties can access the marimo server. Most users won't notice changes to their workflow. To learn more, check out the docs.
Export as ipynb 📝. Export marimo notebooks as Jupyter notebook files with marimo export ipynb nb.py -o nb.ipynb.
Split cell hotkey ⌨️: Split cells with our new hotkey: Ctrl/Cmd-Shift-'.
mo.hstack and mo.vstack now require you to use keyword args (except for the list of items).
Welcome to the marimo family!
Full Changelog: https://github.com/marimo-team/marimo/compare/0.5.2...0.6.0
`mo.sidebar` to portal any elements into a collapsible sidebar for your application
mo.sidebar to portal any elements into a collapsible sidebar for your applicationmo.sidebar([
mo.md("# marimo"),
mo.nav_menu({
"#home": f"{mo.icon('lucide:home')} Home",
"#about": f"{mo.icon('lucide:user')} About",
"#contact": f"{mo.icon('lucide:phone')} Contact",
"Links": {
"https://twitter.com/marimo_io": "Twitter",
"https://github.com/marimo-team/marimo": "GitHub",
},
}, orientation="vertical",
),
])
Full Changelog: https://github.com/marimo-team/marimo/compare/0.5.1...0.5.2
🏝️ marimo islands: marimo islands are a way to embed marimo outputs and/or python code in your HTML that will become interactive when the page is load
🏝️ marimo islands: marimo islands are a way to embed marimo outputs and/or python code in your HTML that will become interactive when the page is loaded. This is useful for creating interactive blog posts, tutorials, and educational materials, all powered by marimo’s reactive runtime.
<marimo-island data-app-id="main" data-cell-id="MJUe" data-reactive="true">
<marimo-cell-output>
<span class="markdown">
<span class="paragraph">Hello, islands!</span>
</span>
</marimo-cell-output>
<marimo-cell-code hidden>mo.md('Hello islands 🏝️!')</marimo-cell-code>
</marimo-island>
Read more about islands: https://docs.marimo.io/guides/wasm.html#islands
Export as Markdown: Export your marimo app to markdown from the code editor.
mo.nav_menu: Navigate to different marimo notebooks, when running multiple notebooks at a time.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.5.0...0.5.1
Version 0.5.0 introduces a brand new lazy runtime which makes working with expensive notebooks much more ergonomic, and it also makes it possible to e
Version 0.5.0 introduces a brand new lazy runtime which makes working with expensive notebooks much more ergonomic, and it also makes it possible to export notebooks as markdown.
Lazy runtime. We've heard your feedback: you can now configure the marimo runtime to be lazy, giving you full control over when cells are run. When a cell is run, instead of automatically running affected cells, marimo's lazy runtime will mark them as stale. Cells are still always run with the latest inputs (stale parents of a cell are run if needed), and your notebook is still required to be a DAG, so you're still guaranteed that your code and outputs are consistent.
Learn more: https://docs.marimo.io/guides/runtime_configuration.html
Export as markdown. Export marimo notebooks as markdown with marimo export md notebook.py -o notebook.md, or convert markdown to marimo with marimo convert notebook.md > notebook.py.
Shout out to @dmadisetti for contributing this feature.
Future updates in the 0.5.x series will bring more improvements to both the runtime and using markdown -- stay tuned!
Thanks @Ubehebe for making your first contribution; welcome to the marimo fam!
Full Changelog: https://github.com/marimo-team/marimo/compare/0.4.11...0.5.0
This release includes a few major UX improvements to the marimo editor.
This release includes a few major UX improvements to the marimo editor.
Improved DAG viewer. The built-in dependency graph viewer is now much more useful: view your cells in a top-down topological order. Click on an edge to see the variables that flow on it, or double click a cell to automatically bring it into focus.
This viewer can help you understand which cells when run when a given cell runs.
<img width="995" alt="image" src="https://github.com/marimo-team/marimo/assets/1994308/33bfdd43-3620-44d4-91d4-c6a0aa487314">
Hardware utilization meters. The editor footer shows total RAM and CPU usage on your machine.
<img width="282" alt="image" src="https://github.com/marimo-team/marimo/assets/1994308/198131f6-9638-4374-80ea-7352275e02fc">
Use mo.status.progress_bar as a context manager:
with mo.status.progress_bar(total=10) as bar:
for i in range(10):
# do work
bar.update(increment=1, subtitle=f"finished iteration number {i]")
Shout out to @seantur for making their first contribution (thank you!), and @fuenfundachtzig for continuing to make marimo better.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.4.10...0.4.11
Update README.md by @KPCOFGS in https://github.com/marimo-team/marimo/pull/1292
Full Changelog: https://github.com/marimo-team/marimo/compare/0.4.9...0.4.10
fix: revert breaking change in mo.ui.slider by @mscolnick in https://github.com/marimo-team/marimo/pull/1237
Improvements and fixes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.4.5...0.4.6
fix: Add guard around click import for WASM by @dmadisetti in https://github.com/marimo-team/marimo/pull/1224
Small bug fixes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.4.4...0.4.5
🐍 `marimo export script`: Export marimo notebooks as flat Python scripts:
🐍 marimo export script: Export marimo notebooks as flat Python scripts:
marimo export script notebook.py -o flat_script.py
marimo notebooks are already executable as scripts (python notebook.py), but we're providing this for convenience, in case you need to use your notebook as a script in an environment that doesn't have marimo installed.
🔔 Better UX for undoing cell deletion. Many of you told us you didn't know how to undo cell deletions.
⌨ Tab to start completions. In addition to Ctrl+Space.
🏁 Windows compatibility. Fixes for our Windows users. Thanks for your patience!
marimo export script, to export notebook as a flat script by @mscolnick in https://github.com/marimo-team/marimo/pull/1199Full Changelog: https://github.com/marimo-team/marimo/compare/0.4.3...0.4.4
This release adds mo.ui.range_slider — thanks @wasimsandhu for your contribution! It also includes performance improvements and bug fixes.
This release adds mo.ui.range_slider — thanks @wasimsandhu for your contribution! It also includes performance improvements
and bug fixes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.4.2...0.4.3
This version includes improvements to mo.ui.plotly, the module autoreloader, mo.status.progress_bar, as well as other bug fixes.
This version includes improvements to mo.ui.plotly, the module autoreloader, mo.status.progress_bar, as well as other bug fixes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.4.1...0.4.2
⚡️ Reactive module autoreloading. marimo now ships with the most advanced module autoreloader out of any interactive Python programming environment. W
⚡️ Reactive module autoreloading. marimo now ships with the most advanced module autoreloader out of any interactive Python programming environment. When enabled (via the notebook settings menu), marimo automatically react to modifications made to packages and modules that your notebook imports. This lets you develop complex logic in Python modules, using an editor of your choice, and use the marimo notebook as a DAG or main script that orchestrates your logic.
Autoreloading comes in two flavors:
Thanks @MartinBernstorff, @astrowonk for the feature request!
⛓ Command-line arguments. Give arbitrary command-line arguments to your notebook, and read them with mo.cli_args(): this works in edit and run modes, and also while running as a script.
marimo edit notebook.py -- -arg1=foo -arg2=barmarimo run notebook.py -- -arg1=foo -arg2=barpython notebook.py -arg1=foo -arg2=barThanks @twrightsman for the feature request!
📄 Programmatic HTML export. Long requested, finally here: use marimo export html at the command-line to export your notebooks as beautiful documents:
marimo export html notebook.py -o notebook.htmlmarimo export html notebook.py -o notebook.html -- -arg1=foo -arg2=barThanks @egemenimre, @scls19fr, @bmeyers for the feature request!
🔎 Check if running in a notebook. Use mo.running_in_notebook() to tell whether Python is executing inside a marimo notebook. Use this when developing library code that integrates with marimo, or to tell whether your notebook file is running via the notebook kernel or as a Python script.
P.S. Check out our new guide on integrating your objects with marimo.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.4.0...0.4.1
🏠 Edit multiple notebooks with marimo edit!: marimo edit now opens a notebook homepage that lets you create new notebooks, and start and stop exiting
🏠 Edit multiple notebooks with marimo edit!: marimo edit now opens a notebook homepage that lets you create new notebooks, and start and stop exiting ones. That is, this homepage gives you a single marimo server to edit multiple notebooks.
You can still use marimo edit notebook.py to edit a specific notebook. To create a new notebook without going through the notebook server, use marimo new.
This feature is new and will evolve rapidly — please give us your feedback!
<img width="997" alt="image" src="https://github.com/marimo-team/marimo/assets/1994308/690484bc-95e4-4864-8ebb-6bb146f46d99">
🗂️ File browser: Use mo.ui.file_browser to add an interactive file browser to your notebooks! Thanks @wasimsandhu for the contribution!
Quality-of-life improvements: Version 0.4.0 includes accessibility updates to mo.ui.number, lets you format notebooks with ruff (in addition to Black), and other small improvements.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.12...0.4.0
A small bug-fix for release 0.3.11, which has many interesting new features.
A small bug-fix for release 0.3.11, which has many interesting new features.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.11...0.3.12
Autoreload modules. marimo can now be configured to automatically reload modules before executing cells, bringing in any modifications you may have ma
Autoreload modules. marimo can now be configured to automatically reload modules before executing cells, bringing in any modifications you may have made to modules used by your notebook.
If you're coming from IPython/Jupyter, this is similar to the autoreload 2 magic.
Enable it in your settings:
https://github.com/marimo-team/marimo/assets/1994308/3b2aea42-4fdc-40cd-b9e7-11e6455465ba
Snippets. marimo now ships with a library of code snippets that you may find useful when working with data. Open the snippets panel via the toolbar at the bottom of a marimo notebook. We'll add more snippets over time; if there's a snippet you'd like to contribute, just click the + button in the snippets panel to send it our way.
https://github.com/marimo-team/marimo/assets/1994308/63f607b3-ac0d-4f55-b4da-bad648810ab8
mo.audio: you can now pass a path to a file to mo.audio, and it'll do the right thing. This function now accepts arbitrarily large audio files.
PyArrow tables: mo.ui.table() now supports PyArrow tables.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.10...0.3.11
Quality-of-life improvements to mo.ui.file, and misc. bug fixes.
Quality-of-life improvements to mo.ui.file, and misc. bug fixes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.9...0.3.10
🤖 AI Suggestions: Bring your own OpenAI API key to unlock AI-powered suggestions!
<img width="857" alt="image" src="https://github.com/marimo-team/marimo/assets/1994308/06c5be42-33f8-4277-99a9-abeb1c3c7401">
Get started by updating your ~/.marimo.toml config file:
[ai.open_ai]
# Get your API key from https://platform.openai.com/account/api-keys
api_key = "sk-..."
# Choose a model, we recommend "gpt-3.5-turbo"
model = "gpt-3.5-turbo"
# Change the base_url if you are using a different OpenAI-compatible API
base_url = "https://api.openai.com"
Read the docs to learn more.
Lazy evaluation/rendering of components The new library function mo.lazy() lets you defer the computation and rendering of components, especially useful if you have expensive components that are hidden by default (e.g., in a tab or accordion).
__spec__ attr by @akshayka in https://github.com/marimo-team/marimo/pull/1058Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.8...0.3.9
Thanks @riyavsinha and @fuenfundachtzig for your contributions -- welcome to the marimo family!!
Thanks @riyavsinha and @fuenfundachtzig for your contributions -- welcome to the marimo family!!
Highlights.
mo.query_params() to access the URL query parameters; this makes it possible to parametrize notebooks when sharing.Cmd/Ctrl+p -- no mouse clicks required -- and use Cmd/Ctrl+Shift+m to toggle markdown view on and off.All changes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.7...0.3.8
fix local file reading for mo.audio by @akshayka in https://github.com/marimo-team/marimo/pull/1020
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.6...0.3.7
This release includes contributions from several contributors -- thanks @wasimsandhu , @dmadisetti , and @deepyaman!
This release includes contributions from several contributors -- thanks @wasimsandhu , @dmadisetti , and @deepyaman!
Highlights. This release includes a new public API for programmatically running multiple apps (in run/read-only mode) -- this lets you create multi-page apps out of marimo notebooks, as well as seamlessly serve marimo apps as part of, eg, a larger FastAPI app.
Docs: https://docs.marimo.io/guides/deploying/programmatically.html
Example:
from typing import Annotated, Callable, Coroutine
from fastapi.responses import HTMLResponse, RedirectResponse
import marimo
from fastapi import FastAPI, Form, Request, Response
# Create a marimo asgi app
server = (
marimo.create_asgi_app()
.with_app(path="", root="./pages/index.py")
.with_app(path="/dashboard", root="./pages/dashboard.py")
.with_app(path="/sales", root="./pages/sales.py")
)
# Create a FastAPI app
app = FastAPI()
app.add_middleware(auth_middleware)
app.add_route("/login", my_login_route, methods=["POST"])
app.mount("/", server.build())
# Run the server
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="localhost", port=8000)
All changes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.4...0.3.5
Automatic package discovery and installation. marimo now automatically detects when you're missing packages in your Python environment, and gives you
Automatic package discovery and installation. marimo now automatically detects when you're missing packages in your Python environment, and gives you the option to install them using pip, uv, or rye. When installation is successful, cells depending on the packages are automatically re-run!
marimo will alert you to missing packages:
and keeps you updated on installation progress:
This feature makes it really easy to get started with new notebooks and projects, especially when working in a fresh Python environment: just install packages as you go!
Visualize arrays and matrices with mo.image()! mo.image() can now visualize NumPy arrays, torch Tensors, and Scipy sparse matrices as images.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.3...0.3.4
improvement: patch urllib in bootstrap to support networking by @akshayka in https://github.com/marimo-team/marimo/pull/934
Improvements and bug fixes
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.2...0.3.3
improvement: patch IPython.display.display to call mo.output.append by @akshayka in https://github.com/marimo-team/marimo/pull/919
Bug fixes and improvements.
IPython.display.display to call mo.output.append by @akshayka in https://github.com/marimo-team/marimo/pull/919Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.1...0.3.2
This release includes bug fixes.
This release includes bug fixes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.3.0...0.3.1
The default host is now 127.0.0.1; previously, marimo listened on all interfaces by default. This is the only change that might be considered breaking
The default host is now 127.0.0.1; previously, marimo listened on all interfaces by default. This is the only change that might be considered breaking in this release.
Highlights.
mo.carousel, which lets you create a simple slide-like presentation of of a list of outputs; you can even view a carousel in full screen!AnyWidget widgets and making them reactive — this also lets you write custom reactive plugins! https://docs.marimo.io/api/inputs/anywidget.htmlAll Changes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.13...0.3.0
fix: clear serializedEditorState after used by @mscolnick in https://github.com/marimo-team/marimo/pull/878
Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.12...0.2.13
fix: ignore vscode bindings in pyodide by @mscolnick in https://github.com/marimo-team/marimo/pull/875
Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.11...0.2.12
improvement: flush sync in wasm instead of async by @mscolnick in https://github.com/marimo-team/marimo/pull/868
Bug fixes and improvements.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.10...0.2.11
improvement: rename files, file viewer, move files by @mscolnick in https://github.com/marimo-team/marimo/pull/849
Improvements and bug fixes.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.9...0.2.10
New feature: Importable and runnable cells.
New feature: Importable and runnable cells.
It's now possible to import cells defined in one notebook into other Python files and run them as functions.
This has two key benefits:
🧩 modularity: this lets you re-use notebook logic as you would regular Python code, wherever you like -- in other notebooks or Python files 🔬 testing: this makes it possible, and easy, to test notebook logic using tools like pytest
Check out the documentation for a full reference, or the below for an overview.
To use this feature, you first must name a cell -- either through the cell action menu, or by editing the name of the cell in the notebook file. For example, here we name a cell greetings:
Then to use the named cell in another notebook, just import it and call its run method:
# import a cell called greetings
from my_notebook import greetings
# output is the cell's last expression -- in this case, the markdown
# definitions is a mapping of the cell's definition names to their values
output, definitions = greetings.run()
You can also substitute values for the cell's references. For example, to greet someone else:
output, definitions = greetings.run(name="Alice")
This release also includes a number of bug fixes and improvements.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.8...0.2.9
improvement: improve download menu nesting and add more actions by @mscolnick in https://github.com/marimo-team/marimo/pull/818
Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.7...0.2.8
⏳ New Feature: top-level await!
Highlights.
⏳ New Feature: top-level await!
In this release, it's now possible to use await in marimo cells. This makes it easy to use async functions.
Additionally, in WASM-powered marimo notebooks, this lets you use micropip to install packages: just use
import micropip
await micropip.install("package name")
Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.6...0.2.7
This release contains bug fixes and improvements.
This release contains bug fixes and improvements.
mo.state by @akshayka in https://github.com/marimo-team/marimo/pull/809Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.5...0.2.6
🌐 marimo runs in the browser — no backend required!
🌐 marimo runs in the browser — no backend required!
This release makes it possible for marimo notebooks to run entirely in the browser, without a backend. Instead, Python is executed via WebAssembly and Pyodide.
This capability is a big step forward in making marimo notebooks easier to share. marimo-in-the-browser lets you share educational notebooks, tutorials, interactive blog posts, and more — without having to pay for a server.
You can see an example of marimo running in the browser by navigating to https://marimo.app.
To share your notebook as interactive static HTML, click the "Share WebAssembly notebook" link in the notebook action menu:
This will generate a URL at https://marimo.app that runs your notebook code in the browser. For example, here's a link to the tutorial notebook, running via WebAssembly.
These URLs are a bit long, since they encode the Python code of the notebook as a parameter. In the future, we'll add the ability to download your notebooks as WASM-based static HTML (e.g., mynotebook.html).
When running marimo in the browser via WASM, most but not all Python packages are supported. To learn more about which packages are supported, refer to the Pyodide documentation.
Full Changelog: https://github.com/marimo-team/marimo/compare/0.2.4...0.2.5
Your coding agent can read these notes before it upgrades. Set up the MCP server →