Releases: marimo-team/marimo
0.13.4
What's Changed
- docs: question format fix by @dmadisetti in #4753
- fix: invalid f-string in markdown mode breaks by @dmadisetti in #4739
- docs: touch up file format / watching guide by @akshayka in #4757
- fix: per-block reference resolution by @akshayka in #4743
- fix: remove old vega css for forcing full width by @mscolnick in #4755
- fix: more md conversion edge cases by @mscolnick in #4764
- chore(deps): update dependency clickhouse-connect to >=0.8.17 by @renovate in #4759
- chore(deps): update dependency google-generativeai to v0.8.5 by @renovate in #4760
- fix: json encode memory view, and anywidget partial updates by @mscolnick in #4752
- feat: added expandAll function to CollapsibleTree to handle expansion of all nested nodes by @bjoaquinc in #4758
- tests: add cleanup to iceberg tests by @mscolnick in #4767
- fix(deps): update all npm non-major dependencies by @renovate in #4766
- docs: update markdown docs for f-strings by @akshayka in #4769
- improvement: documentation of parameters as show in the completion box by @krassowski in #4673
- feat: expand tqdm support by @brenoca in #4765
- fix(deps): update all npm non-major dependencies by @renovate in #4771
- docs: fix broken link in reusing_functions.md by @AH-Merii in #4773
- feat: support ipython display update by @brenoca in #4772
- fix: leading whitespace by @dmadisetti in #4774
- fix: cleanup ipython display updates by @mscolnick in #4776
Full Changelog: 0.13.3...0.13.4
0.13.3
Highlights ⭐
📝 Enhanced Markdown Experience: Seamlessly toggle between markdown string formats (r-string, f-string). Directly edit f-string markdown in the markdown editor, with Python autocompletion support inside { } brackets.
🖥️ Resizable Notebook Columns: Effortlessly resize columns when editing multi-column notebooks.
🧊 PyIceberg Integration: Connect seamlessly to your Iceberg tables via REST, Glue, and more, with automatic table population in the Datasources panel.
🗃️ Expanded Ibis, PySpark, Datafusion, and MotherDuck Support: Ibis connections now automatically populate databases and schemas in the Datasources panel. Additionally, easily connect to PySpark, Datafusion, and MotherDuck directly from the "Add Connection" UI.
🏖️ Sandbox Support for Markdown Format: Now you can use marimo edit --sandbox mynotebook.md to edit markdown notebooks in sandbox mode, automatically tracking and recording dependencies.
📝 Quarto Integration: Open .qmd files, export to multiple formats, or embed reactive marimo notebooks directly into your Quarto site using our Quarto extension.
📖 MkDocs Documentation: Enhanced documentation on how to embed interactive marimo notebooks and playgrounds directly into your MkDocs site using our MkDocs plugin.
💻 Nested Python Autocompletion in SQL: Enjoy Python autocompletion when parameterizing SQL queries using { } brackets.
📊 Improved Table and Chart Loading: Enhanced performance and faster loading times for tables and visualizations.
🐞 Bug Fixes & Stability Improvements: Resolved issues related to date rendering and enhanced compatibility for Windows users.
What's Changed
- improve: scratchpad hint on multiple definition error by @akshayka in #4647
- fix: max width on md admonition, details by @akshayka in #4659
- tweak: settings menu section titles by @akshayka in #4661
- Allow other "globals" to be caught for builtins by @dmadisetti in #4662
- chore: upgrade pnpm and pre-commit by @Light2Dark in #4652
- fix(deps): update all radix dependencies by @renovate in #4663
- fix: code editor refresh with new state by @Light2Dark in #4666
- feat: toggle between markdown formats and set r-string as default by @Light2Dark in #4648
- improvement: add python variable completions inside SQL {} by @mscolnick in #4657
- chore: upgrade react-compiler by @mscolnick in #4664
- docs: update README_Japanese.md with improved links and content clarity by @kiwamizamurai in #4606
- fix: don't autorun markdown on f-string. use jedi for python completion by @mscolnick in #4672
- fix: only bold on selection by @mscolnick in #4674
- docs: publish to cloudflare workers by @mscolnick in #4676
- docs: fix close admonition by @akshayka in #4678
- tidy: break up the sandbox api for use in quarto by @dmadisetti in #4679
- fix: return 'False' to let normal error handling occur by @dmadisetti in #4686
- fix: date rendering resulting in 'Invalid Date' by @mscolnick in #4697
- test: fix snapshots for tests by @Light2Dark in #4702
- fix: handle list when filtering rows with dates by @Light2Dark in #4700
- chore(deps): update all storybook dependencies to ^8.6.12 by @renovate in #4684
- fix(deps): update all radix dependencies by @renovate in #4677
- [FEAT:DEV] Adding
pixito manage developer system deps by @lucharo in #4406 - improvement: better formats for table and charts. avoid additional round trip by @mscolnick in #4670
- fix: use proxy scheme instead of server by @mscolnick in #4707
- fix: Template snaps by @dmadisetti in #4710
- example: databricks connect, add support for mo.ui.table.lazy by @mscolnick in #4711
- feat: pyiceberg catalog support by @mscolnick in #4715
- feat: enables sandboxing for markdown files by @dmadisetti in #4685
- chore: cleanup proxy-middleware cleanup logic by @mscolnick in #4717
- feat: Ibis SQL engine by @zilto in #4683
- docs: fix typo by @greenpine82 in #4724
- fix lsp server not work on windows by @CyberQin in #4718
- Ensure terminal uses monospace font by @koaning in #4727
- improvement: configurable toggle-line-comment by @mscolnick in #4728
- feat: add pyspark, datafusion and some fixes for db by @Light2Dark in #4719
- feat: resizable columns in notebook by @Light2Dark in #4698
- improvement: make ruff optional, fallback to global ruff, prompt to install by @mscolnick in #4731
- fix: handle more duckdb data types by @mscolnick in #4732
- improvement: configurable max-size for mo.ui.file() upload by @mscolnick in #4733
- example: make quak compatible with wasm/cors by @mscolnick in #4734
- feat: Exposes types if they are explicitly declared by the user by @dmadisetti in #4720
- fix: esc should always propagate in vim by @akshayka in #4735
- feat: added a transformAll function to id-tree.tsx by @bjoaquinc in #4738
- fix: MARIMO_NO_JS is more agressive about formatters by @dmadisetti in #4737
- improvement: add motherduck to database modal by @mscolnick in #4740
- docs: add ibis backend and list of supported db's by @Light2Dark in #4741
- style: adds left handle & style fixes for resizable component by @Light2Dark in #4745
- chore: upgrade codemirror by @mscolnick in #4748
- docs: document markdown format and add quarto/ mkdocs plugins by @dmadisetti in #4736
New Contributors
- @zilto made their first contribution in #4683
- @greenpine82 made their first contribution in #4724
- @CyberQin made their first contribution in #4718
Full Changelog: 0.13.2...0.13.3
0.13.2
What's Changed
- fix: export to html when using arrow files by @mscolnick in #4645
- feat: add --include-cloudflare for easy deployment of wasm to cloudflare workers by @mscolnick in #4643
- fix: remove additional lsp feature-flag check by @mscolnick in #4654
Full Changelog: 0.13.1...0.13.2
0.13.1
Highlights ⭐
- 🔍 Column filtering - You can now filter columns by their top most common values for improved data exploration and faster insights (#4531)
- ⚡ PySpark formatters - Seamlessly visualize PySpark DataFrames with our rich DataFrame viewer (#4615)
- 🔧 SQL formatting button - One-click SQL beautification right in your notebook cells, enhancing code readability and maintaining consistent query styling (#4640)
What's Changed
- docs: changelog by @akshayka in #4592
- chore: add setup_cell to released experiments by @akshayka in #4593
- docs: Update README_Chinese.md by @metaboulie in #4595
- improve: add --compile and --compile-bytecode flags to uv by @Light2Dark in #4578
- fix: improve graceful shutdown when running under uv by @akshayka in #4596
- Fix: typo in authentication.md by @AH-Merii in #4597
- fix: add warning about vegafusion not working with chart selection by @mscolnick in #4609
- fix: json parse nan/inf for altair charts by @Light2Dark in #4582
- feat: add col filtering by @Light2Dark in #4531
- fix: add mathjax ignore so code does not get malformed by @mscolnick in #4610
- fix: Filter by values styling and selection by @mscolnick in #4611
- docs(guides)📚: Add section on specifying alternative package indexes by @ericmjl in #4612
- fix: tuples in dataclasses were not picked up for json encoding by @dmadisetti in #4613
- feat: pyspark formatters by @mscolnick in #4615
- nit: account for empty slots by @dmadisetti in #4618
- example: pyiceberg connection by @mscolnick in #4617
- fix: block should ad marimo last if there is a setup cell by @dmadisetti in #4621
- fix: prevent double trigger for column filtering by @Light2Dark in #4625
- feat: extend support to tqdm update() by @brenoca in #4623
- fix: add more markdown css rules to clamp at desired max-width by @mscolnick in #4626
- improvement: support mark_text for altair selection by @mscolnick in #4630
- fix: cell actions and notebook settings scroll by @mscolnick in #4634
- chore(deps): update build tools by @renovate in #4633
- improvement: let single table expand to full contents by @mscolnick in #4628
- typechecking: fix ci by @dmadisetti in #4639
- feat: charts addition by @Light2Dark in #4608
- feat: add sql formatting button to sql cells by @mscolnick in #4640
- fix: show start to end for datetimes in col summary by @Light2Dark in #4637
- fix: sandbox alerts to stderr by @dmadisetti in #4635
New Contributors
- @AH-Merii made their first contribution in #4597
- @ericmjl made their first contribution in #4612
- @brenoca made their first contribution in #4623
Full Changelog: 0.13.0...0.13.1
0.13.0
What's Changed
Release 0.13.0 introduces includes a big new feature: it's now possible to import functions and classes from marimo notebooks, as long as they meet certain criteria. This lets you write code like:
from my_notebook import my_function, my_classThis feature, contributed by @dmadisetti, is yet another way that marimo's pure Python format makes your notebook code reusable.
Reusable functions and classes
Starting with 0.13.0, you can import top-level functions and classes defined in a marimo notebook into other Python scripts or notebooks using normal Python syntax, as long as your definitions satisfy the following criteria:
- The cell must define just a single function or class.
- The defined function or class can only refer to symbols defined in the setup cell, or to other top-level symbols.
The setup cell is a new addition to marimo: it is an optional cell in which you can include modules used by functions and classes you'd like your notebook to expose.
When you create a cell containing just a single function or class, marimo will provide hints in the bottom-right that tell you if the criteria are met ...
... or if not what needs to be done to meet the criteria:
To learn more, visit our docs.
More legible markdown
Design is important to us; that's why markdown is now rendered with a maximum width of ~80 characters, improving legibility.
All changes
- fix: ui tweaks for saving secrets by @mscolnick in #4558
- break: markdown width clamped for more readable typography by @mscolnick in #4551
- docs: new file format documentation by @dmadisetti in #4497
- fix: Address mep feedback by @dmadisetti in #4557
- feat: display singular label in
FileUploadPluginfor single files by @peter-gy in #4569 - fix: remove auto-scroll from chat by @mscolnick in #4561
- Remove (#faq-show-code) from show code FAQ by @JoostGevaert in #4559
- feat: release reusable functions by @dmadisetti in #4560
- examples: refresh fastapi example by @dmadisetti in #4562
- docs: minor function fileformat edits by @akshayka in #4576
- docs: update links to examples and gallery by @akshayka in #4577
- fix: use context.issue in notify translators by @akshayka in #4587
- fix: get node version edge case by @akshayka in #4590
- stop gap: check header for race condition by @dmadisetti in #4589
New Contributors
- @JoostGevaert made their first contribution in #4559
Full Changelog: 0.12.10...0.13.0
0.12.10
Highlights ⭐
First class LSP Support: Install the python-lsp-server in the same environment and get the power of a full LSP for completions. See the documentation for more details.
Environment variable management: Previously, your dotenv configuration auto-loaded your environment variable. Now you can view your environment variables and create new ones
Expand / collapse H1/H2 sections: Expand / collapse H1/H2 sections via the command palette. Thanks to @bjoaquinc for this feature!
Download parquet: You can now download your table data as parquet.
What's Changed
- fix(deps): update react-aria dependencies by @renovate in #4517
- fix: Overload @app.cell for mypy typing by @dmadisetti in #4518
- feat: move LSP out of experimental, keep LSP optional by @mscolnick in #4516
- fix: (static parse) warn on bad cellconfig opposed to failing by @dmadisetti in #4524
- fix: fix refresh interval constraint by @bulletmark in #4528
- improvement: add secrets in db confiugration by @mscolnick in #4522
- feat: add default table page size configuration by @mscolnick in #4520
- fix: static pages for tables by @mscolnick in #4525
- fix: correct pnpm version check by @bulletmark in #4526
- fix: share context with post-hooks to prevent id collisions by @dmadisetti in #4529
- chore: cleanup DataTableColumnHeader by @mscolnick in #4540
- docs: clarify tests should be exclusive in cells by @dmadisetti in #4491
- fix: remove copy and pinning from variable table by @mscolnick in #4541
- chore: add more deps to
marimo envby @mscolnick in #4543 - feat: Add download parquet to table by @mscolnick in #4542
- fix: button stretch in vstack by @mscolnick in #4545
- fix: pass setup cell to toplevel resolution posthook by @dmadisetti in #4538
- fix: regression added in #4538 and relevant test by @dmadisetti in #4549
- docs: usage examples by @akshayka in #4530
- improvement: Use docstring_to_markdown and custom MarimoConverter for non marimo docs by @mscolnick in #4547
- feat: add expand and collapse all columns to notebook actions menu by @bjoaquinc in #4550
- docs: fix data editor example by @akshayka in #4552
- docs: run notebooks as scripts example by @akshayka in #4554
- docs: tabs examples fix by @Haleshot in #4553
- Fix broken links by @koaning in #4555
- feat: release .env secrets out of experimental by @mscolnick in #4556
New Contributors
- @bulletmark made their first contribution in #4528
- @bjoaquinc made their first contribution in #4550
Full Changelog: 0.12.9...0.12.10
0.12.9
Highlights ⭐
.vimrc support - reference your .vimrc file in your user config marimo.toml to be picked up in the marimo editor. Huge thanks to @andyrift for this feature.
mo.ui.data_editor() - released from experimental. Edit dataframes and get the edits back in Python.
Many more bug-fixes and improvements:
- PIL.Image support in mo.image()
- Fixes to GitHub Copilot
What's Changed
- chore: make touchup by @mscolnick in #4469
- docs: link to more docs from quickstart by @akshayka in #4471
- improvement: release data-editor out of experimental by @mscolnick in #4470
- chore: fix https for various urls by @mscolnick in #4474
- feat: support vimrc from the user config by @mscolnick in #4473
- fix: pytest failed in wasm due to not setting env variables in pyodid… by @dmadisetti in #4476
- improvement: use uv in docker by @mscolnick in #4475
- improve: prompt for save if notebook is stored in a tmp directory by @akshayka in #4477
- fix: setup cell is a 'root' to all cells by @dmadisetti in #4472
- fix: remove unused dataclass. make scratch request optional by @mscolnick in #4478
- improve: add clickhouse support for diff sql output types by @Light2Dark in #4456
- feat [exp]: add charts panel in table by @Light2Dark in #4405
- fix: clear variables when message is empty by @akshayka in #4479
- example: chroma multi-modal by @mscolnick in #4482
- fix: PIL.Image in mo.image() by @mscolnick in #4483
- Configure jedi completion for snippet support by @krassowski in #4489
- chore(deps): update dependency vite to v6.2.6 [security] by @renovate in #4490
- improve: vimrc support by @andyrift in #4487
- improvement: lazily load tracing panel by @Light2Dark in #4484
- Add debounce option to marimo-code-editor by @nojaf in #4461
- style: lighten button shadows by @akshayka in #4480
- security: statically load marimo notebooks for run and edit by @dmadisetti in #4400
- poc: display native result metadata by @Light2Dark in #4485
- fix: don't patch plotly show when running as a script by @akshayka in #4493
- fix: arviz formatter by @mscolnick in #4496
- example: duckdb (for duckdb docs) by @mscolnick in #4500
- ci: run "typos" command with "hatch run" in "fe-check" make command by @schlich in #4499
- fix: examples in
modalby @t-edzuka in #4504 - fix: pytest decorated class methods fails by @dmadisetti in #4498
- chore: bump codemirror-languageserver, fix GitHub Copilot incremental updates by @mscolnick in #4492
- fix: ensure valid ranges for delimiter in parseLatex function by @mscolnick in #4513
- tutorial: fix up SQL by @akshayka in #4501
- fix: disable LSP servers in run-mode by @mscolnick in #4514
New Contributors
Full Changelog: 0.12.8...0.12.9
0.12.8
Highlights ⭐
-
Configurable SQL output type - you can now configure the output type for SQL cells.
native, lazy-polars, pandas, polars, auto -
Reactive tests - By default, marimo detects and runs tests in your notebooks automatically. If the
pytestlibrary is installed, marimo will runpyteston any cells that contain test functions (functions that start withtest_) or test classes
(classes that start withTest) on a per cell basis. This can be turned off through configuration,
What's Changed
- fix: skip test when sqlalchemy when not installed by @akshayka in #4451
- improvement: Configurable SQL output type by @mscolnick in #4437
- improvement: map vim :w to save notebook by @mscolnick in #4455
- fix: dont show sql keywords when completion
.column_nameby @mscolnick in #4453 - fix: remove extra save keymap in vim mode by @andyrift in #4462
- fix: s3 usage in mo.ui.file_browser() by @mscolnick in #4457
- fix: sanitize big-ints in table manager by @mscolnick in #4468
- feat: release pytest from experimental by @dmadisetti in #4467
New Contributors
Full Changelog: 0.12.7...0.12.8
0.12.7
What's Changed
Highlights
Dataframe completions in DuckDB SQL. DuckDB SQL cells will now autocomplete your dataframes:

Native LazyFrame support. Polars LazyFrames are now rendered lazily by default, preventing potentially expensive computations on render. Tables can also be made lazy (given a Polars LazyFrame) with mo.ui.table.lazy(lazyframe).
All changes
- mep/8: Setup cell protections by @dmadisetti in #4382
- Added rendering script for static HTML exports to docs by @apoorvkh in #4441
- fix: bug in pytest scope determination by @dmadisetti in #4442
- fix: add completions from local dfs by @Light2Dark in #4444
- improvement: skip meta schemas for sql datasource discovery by @Light2Dark in #4443
- improvement: better support for polars LazyFrame, mo.ui.table.lazy(df) by @mscolnick in #4439
- fix: marimo new permission error (Windows) by @akshayka in #4447
- fix: marimo new handle long prompts by @akshayka in #4449
New Contributors
Full Changelog: 0.12.6...0.12.7
0.12.6
What's Changed
Highlights
✨ Prompt file support for marimo new. You can now pass a text file to marimo new. File contents will be used as the prompt to generate a notebook using an LLM:
marimo new prompt.txtThis is helpful when working with long prompts. On unix-like systems, you can also pipe prompt input from stdin:
cat prompt.txt | marimo newFor usage examples, run marimo new --help or see the docs.
🐍 Improved completions. Our autocompleter now gives completions for function arguments.
↕ Better sorting for table columns with nulls. Null entries are now shown at the end of table columns when sorting (for both ascending and descending). This makes it easy to see the largest and smallest values in your data, without having to page past nulls.
🧑💻 Copy-button for mo.ui.code_editor The code editor now includes a small button to copy code with one click. Thanks @nojaf for the contribution!
🛢️ Ibis support improvements. Improved support for Ibis in mo.ui.dataframe. Thanks @szst11!
All changes
- [exp]: change to uv add by @Light2Dark in #4407
- feat: marimo new prompt.txt by @akshayka in #4426
- [exp]: add cursor rules by @Light2Dark in #4408
- fix: ai edit cell when there is existing text by @mscolnick in #4429
- improvement: jedi completions on paren and comma for signature help by @mscolnick in #4427
- fix: expand cells that are collapsed by @mscolnick in #4431
- fix: place nulls at last by @Light2Dark in #4436
- Add option for copy button in code-editor by @nojaf in #4412
- improvement: print python code output for Ibis in mo.ui.dataframe by @szst11 in #4129
- docs: marimo AI by @akshayka in #4432
- fix: code_editor copy to clipboard default True by @mscolnick in #4438
New Contributors
Full Changelog: 0.12.5...0.12.6

