Releases: marimo-team/marimo
0.6.5
What's Changed
Highlights
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!
All changes
- fix: gtd control key by @akshayka in #1467
- fix: helper message to open the native browser search, fix when a dialog is open by @mscolnick in #1470
- feat: add output replace_by_index function by @seantur in #1466
- feat: add download as html or png in Run mode by @mscolnick in #1469
- bring back island changes by @akshayka in #1471
- more defensive underline clearing on keyup by @akshayka in #1473
- Add markdown edgecase test by @dmadisetti in #1472
- UX improvement: panel footer icons -> sidebar by @akshayka in #1476
- 0.6.5 by @akshayka in #1480
Full Changelog: 0.6.4...0.6.5
0.6.4
What's Changed
- fix: maybe fixes cmd+click, remove all underlines by @mscolnick in #1463
- 0.6.4 by @akshayka in #1465
Full Changelog: 0.6.3...0.6.4
0.6.3
0.6.2
What's Changed
Small fixes.
- Update routes docs by @akshayka in #1453
- fix: check mimetype when merging console outputs in BE by @akshayka in #1454
- fix: mo.ui.data_voyager when keys have a period by @mscolnick in #1455
- fix: websocket connection from connecting twice by @mscolnick in #1456
- 0.6.2 by @akshayka in #1457
Full Changelog: 0.6.1...0.6.2
0.6.1
What's Changed
Highlights
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.
All changes
- improvement: markdown shortcuts by @mscolnick in #1398
- improvement: start cell editor in markdown if is markdown-compatible by @mscolnick in #1401
- enable SetUIElementValue on unnamed elements by @akshayka in #1406
- fix: formatting when no formatter is found by @akshayka in #1405
- Update tutorials by @akshayka in #1407
- feat: adding reactive html export by @gvarnavi in #1360
- Fix for Incorrect OS Version Displayed for Windows 11 in
marimo env
Command by @Haleshot in #1410 - explicitly add yaml as a dep by @dmadisetti in #1420
- feat: auto-import marimo for markdown by @mscolnick in #1404
- improvement: Add cell buttons at bottom by @mscolnick in #1402
- fix: add snowflake to pipy module names by @mscolnick in #1422
- tests: run all examples and smoke_tests as script by @mscolnick in #1419
- fix: don't break on vendored dependencies by @dmadisetti in #1421
- fix: renaming a file extension should save in file format by @dmadisetti in #1423
- Go to definition functionality added to hotkey and context menu by @robmck1995 in #1411
- adds ploomber cloud deployment by @edublancas in #1426
- Shorter PR template by @akshayka in #1429
- fix: limit console outputs to last 5000 lines per cell by @akshayka in #1424
- feat: go-to-definition with cmd+click by @mscolnick in #1425
- feat: ai completion button by @mscolnick in #1433
- fix: random ids for ui elements made in functions by @akshayka in #1434
- fix: pin pyodide by @mscolnick in #1437
- fix: check python id before deleting UI element by @akshayka in #1439
- deploying docs by @akshayka in #1440
- fix: base64 encode vfile buffers in html export by @akshayka in #1441
- styling: responsive "add cell buttons" and reduce placeholder color by @mscolnick in #1442
- feat: mo.routes() by @mscolnick in #1356
- feat: admonition in markdown by @mscolnick in #1447
- fix: checkbox styling on firefox by @mscolnick in #1450
- fix: button styling with nested markdown by @mscolnick in #1448
- 0.6.1 by @akshayka in #1452
New Contributors
Welcome to the marimo family!
- @gvarnavi made their first contribution in #1360
- @Haleshot made their first contribution in #1410
- @edublancas made their first contribution in #1426
Full Changelog: 0.6.0...0.6.1
0.6.0
What's Changed
Version 0.6.0 includes two big new features — first-class markdown support and token-authentication — and small quality of life improvements.
Highlights
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-'
.
Breaking changes
mo.hstack
and mo.vstack
now require you to use keyword args (except for the list of items).
New Contributors
Welcome to the marimo family!
- @robmck1995 made their first contribution in #1381
- @hattajr made their first contribution in #1387
- @maks-ivanov made their first contribution in #1373
Full changelog
- fix: mo.lazy rendering by @mscolnick in #1355
- fix: cloning of forms in arrays/dicts by @akshayka in #1357
- fix: isolate modules in module watcher by @akshayka in #1358
- feat: basic-auth support and minimal login page by @mscolnick in #1363
- fix: readme images when displayed off github by @mscolnick in #1366
- fix: scroll to variable by @mscolnick in #1365
- fix: circular dep in wasm controller by @mscolnick in #1369
- improvement: wasm startup perf by @mscolnick in #1371
- improvement: seperate worker for saving by @mscolnick in #1375
- feat: marimo export ipynb by @akshayka in #1367
- Merge SetUIElementRequests on the backend by @akshayka in #1374
- fix: respect auto-instantiate while in wasm by @mscolnick in #1378
- fix: race-condition when connecting to websocket sometimes by @mscolnick in #1377
- refactor: lazy-load vega plugins by @mscolnick in #1376
- feat: Hotkey for splitting cells by @robmck1995 in #1381
- Update editor_features.md by @hattajr in #1387
- feat: marimo edit/run markdown.md by @dmadisetti in #1332
- Skip disabled cells in script by @maks-ivanov in #1373
- chore: skip test_run_disabled_cells for windows by @mscolnick in #1390
- chore: add pre-commit, migrate to biomejs by @mscolnick in #1389
- improvement: enable markdown support in the fe by default by @mscolnick in #1391
- improvement: add footer to sidebar and disbale some Html fluid apis (callout, batch) by @mscolnick in #1392
- fix: enable rpcs unnamed UI elems by @akshayka in #1393
- small playwright fix by @akshayka in #1394
- fix: cleanup of UIElements by @akshayka in #1395
- fix tutorial: hstack by @akshayka in #1399
- 0.6.0 by @akshayka in #1400
Full Changelog: 0.5.2...0.6.0
0.5.2
Highlights
mo.sidebar
to portal any elements into a collapsible sidebar for your application
mo.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",
),
])
What's Changed
- fix: ai completion streaming by @mscolnick in #1349
- fix: # %% in export script by @akshayka in #1350
- fix: HoloMap formatter by @mscolnick in #1347
- feat: mo.sidebar by @mscolnick in #1352
- fix: use theme in bokeh formatter by @mscolnick in #1353
Full Changelog: 0.5.1...0.5.2
0.5.1
Highlights
🏝️ 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.
What's Changed
- feat: preview marimo-islands, add docs by @mscolnick in #1335
- chore: upgrade deps, upgrade to node 20 in CI by @mscolnick in #1331
- fix: ignore warnings when analyzing modules in watcher by @akshayka in #1338
- fix: check for module staleness when registering a cell by @akshayka in #1336
- feat: add export as markdown from the UI by @mscolnick in #1339
- docs: upgrade doc deps by @mscolnick in #1342
- docs: add links by @akshayka in #1343
- improvement: allow renaming markdown files when enabled by @mscolnick in #1341
- feat: add mo.nav_menu by @mscolnick in #1344
- fix: include console outputs in HTML exports when code is shown by @akshayka in #1345
- 0.5.1 by @akshayka in #1346
Full Changelog: 0.5.0...0.5.1
0.5.0
What's Changed
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.
Highlights
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.
What's coming
Future updates in the 0.5.x series will bring more improvements to both the runtime and using markdown -- stay tuned!
All changes
Thanks @Ubehebe for making your first contribution; welcome to the marimo fam!
- feat: convert and export from markdown by @dmadisetti in #1296
- fix: add markdown sanitization for malicious notebooks by @dmadisetti in #1315
- fix: handle duplicate columns in pandas when inferring datatype by @mscolnick in #1313
- fix: don't crash the table on 1 million rows by @mscolnick in #1314
- test: consolidate some 'edit' e2e tests to a single server by @mscolnick in #1320
- Run typos checks in makefile by @akshayka in #1318
- fix: allow int columns in mo.ui.dataframe by @mscolnick in #1322
- chore: improve wasm development, e2e test by @mscolnick in #1323
- improvement: load pyodide dev version on marimo dev releases by @mscolnick in #1324
- feat: lazy runtime by @akshayka in #1302
- refactor: lazy-load top-level pages, reduce initial page load by @mscolnick in #1295
- improvement: add cell actions and input/output variables to dag viewer panel by @mscolnick in #1328
- fix: marimo config to follow_symlink in StaticFiles by @Ubehebe in #1327
- fix: Fix playwright tests by @mscolnick in #1329
- Persist App state + Cell state in md conversions by @dmadisetti in #1326
- docs: lazy runtime by @akshayka in #1333
- 0.5.0 by @akshayka in #1334
New Contributors
Full Changelog: 0.4.11...0.5.0
0.4.11
What's Changed
This release includes a few major UX improvements to the marimo editor.
Highlights
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.

Hardware utilization meters. The editor footer shows total RAM and CPU usage on your machine.

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]")
All changes
Shout out to @seantur for making their first contribution (thank you!), and @fuenfundachtzig for continuing to make marimo better.
- 0.4.10 by @mscolnick in #1294
- fix: sanitize stdout and stderr by @mscolnick in #1297
- improvement: mo.lazy supports async functions by @mscolnick in #1300
- fix: disconnect from consumer if there is a stale connection by @mscolnick in #1301
- feat: add TB and LR tree view to the dependency viewer by @mscolnick in #1276
- feat: show usage stats (memory, cpu) in the footer by @mscolnick in #1303
- fix: find/replace opening by @mscolnick in #1307
- Improvement: annotate cycles with variable names by @fuenfundachtzig in #1304
- feat: allow status.progress_bar to be used as a context manager by @seantur in #1308
- chore: lint by @akshayka in #1309
- 0.4.11 by @akshayka in #1310
New Contributors
Full Changelog: 0.4.10...0.4.11