github marimo-team/marimo 0.19.8

20 hours ago

This release introduces notebook galleries with OpenGraph previews, along with anywidget improvements, AI enhancements, and many bug fixes.

⭐️ Highlights

Serve a gallery of notebooks

You can now serve multiple marimo notebooks as a gallery using marimo run with folders or multiple files. This is useful for showcasing collections of notebooks, tutorials, or dashboards in a single browsable interface.

# Serve all notebooks in a folder
marimo run my_notebooks/

# Serve multiple folders and files
marimo run tutorials/ examples/ standalone.py

# Run with sandboxed environments per notebook
marimo run my_notebooks/ --sandbox

Rich gallery previews with OpenGraph metadata

Gallery cards can be customized with OpenGraph metadata. Define metadata in your notebook's PEP 723 script block to control how each notebook appears in the gallery:

[tool.marimo.opengraph]
title = "My Analysis"
description = "Exploratory data analysis of Q4 results"
image = "https://example.com/thumbnail.png"

For dynamic metadata, define a generator function that computes OpenGraph fields at runtime.

You can also auto-generate thumbnail images for your notebooks using marimo export thumbnail:

# Generate thumbnails (code-only, no execution)
marimo export thumbnail my_notebooks/

# Generate thumbnails with notebook execution for richer previews
marimo export thumbnail my_notebooks/ --execute --sandbox

Thumbnails are stored in the __marimo__/ directory alongside your notebooks and served automatically in gallery mode.

Attach images to "Generate with AI"

You can now attach images when using "Generate with AI" to provide visual context for code generation. This is useful for sharing mockups, charts, or screenshots that help the AI understand what you're trying to build.

✨ Enhancements

  • Add attachments for 'Generate with AI' & ensure UI consistency (#7996)
  • Update models.yml for Opus 4.6 (#8142)
  • Add proxy_path support for ClickHouse Connections (#8128)
  • Require playwright installation for pdf export (#8121)
  • Improve design of chat mode selector (#8114)
  • Set markdown to hide after conversion for consistency (#8117)
  • Anywidget dynamic imports in static notebooks (#8110)
  • Rich notebook previews through OpenGraph metadata (#8097)
  • Graduate performant table charts and chat modes from experimental (#8107)
  • Sandboxed gallery (#8076)
  • Replace logo with back button for notebooks in gallery mode (#8099)
  • Register Office document mimetypes for cross-platform compatibility (#8068)
  • Support serving a gallery of notebooks (#8056)

🐛 Bug fixes

  • Fix spurious "truth value of UIElement" warning for anywidgets (#8148)
  • Decouple anywidget model and view (#8124)
  • Support pandas 3.0 str col (#8146)
  • Follow ruff rules for formatting trailing space after imports/ functions (#8086)
  • Search functionality for DataFrames with index columns (#8136)
  • Support multiple vfile registries with shared inmemorystorage (#8145)
  • Don't error when writing UI elements values that already exist (#8147)
  • Avoid unnecessary throwing error in delete cell (#8134)
  • Remove some deprecation warnings (#8113)
  • Handle bang statement edgecases in ipynb convert (#8126)
  • Top-level defs showing up in wasm (#8138)
  • Use cell name to identify setup cells when id is null (#8137)
  • Hash on unspecified keyword values (#8127)
  • Handle marimo tex components when exporting to PDF (#8062)
  • Sandbox package listing (#8104)
  • Preserve whitespaces & new lines when inferring parts during rendering outputs (#8116)
  • Don't allow '.' when creating custom provider names (#8115)
  • Fix schema drift for chat-ui (ai-sdk 6) (#8105)
  • Handle objects with __getattr__ returning non-callable values in serialization (#8109)
  • Gracefully handle timeouts/input from uv when adding script metadata (#8111)
  • Add missing word to UI tutorial (#8087)
  • Handle sqlglot OptimizeError for DuckDB unnest with JSON access (#8083)
  • Enable weave tracing on chat widget (#8078)
  • Table data not refreshing after mo.output.replace() when first-page data is unchanged (#8066)

📚 Documentation

  • Clarify markdown section in Jupyter users tutorial (#8092)

📝 Other changes

  • Update all biome dependencies to v2.3.13 (#8044)
  • Upgrade pytest plugins, upperbound sqlglot (#8077)
  • Update WebSocket URL generation for agents to work on remote deployments (#8065)
  • Update all npm non-major dependencies (#8085)
  • Add missing type field to control requests (#8071)

Contributors

Thanks to all our community and contributors who made this release possible: @dmadisetti, @gvwilson, @koaning, @Light2Dark, @lucharo, @manzt, @maruthgoyal, @mscolnick, @peter-gy, @marcodlk

New Contributors

Full Changelog: 0.19.7...0.19.8

Don't miss a new marimo release

NewReleases is sending notifications on new releases.