This release introduces isolated sandbox environments for multi-notebook directories and migrates our AI integrations to pydantic-ai for improved reliability with modern LLM providers.
What's Changed
Multi-Notebook Sandboxed Home
You can now run marimo edit --sandbox directory/ to open a folder of notebooks where each notebook runs in its own isolated sandbox environment. This means:
- Every notebook automatically gets its own virtual environment with its own dependencies
- Dependencies are managed per-notebook using PEP 723 inline script metadata
- Each notebook remains reproducible and self-contained
This is useful when working on multiple notebooks with different dependency requirements, or for maintaining a collection of standalone, shareable notebooks.
# Open a directory with per-notebook isolation
marimo edit --sandbox ./notebooks/Note
This feature requires pyzmq as a dependency. If you're running marimo with uvx, use:
uvx --with pyzmq marimo edit --sandbox ./notebooks/Alternatively install marimo as marimo[sandbox] or marimo[recommended] to get all the recommended packages.
See our guide on sandboxed home and inlining dependencies guide for more details on sandboxed notebooks.
AI Provider Migration to pydantic-ai
We've migrated our AI integrations to use pydantic-ai, which brings several improvements:
- Better model support: Fixed issues with newer OpenAI models (GPT-5, Codex models) that require the Responses API and
max_completion_tokensparameter - Improved timeout handling: Resolved timeout issues when connecting to remote Ollama instances and other providers
- Support for more providers: Added support for providers like Mistral that aren't fully OpenAI-compatible
- Better error handling: More informative error messages when AI requests fail
This is a behind-the-scenes change that improves reliability—your existing AI configuration should continue to work without changes
✨ Enhancements
- Migrate AI providers to pydantic-ai (#7732)
- Add custom AI providers in config (#7771)
- Support custom models returning vercel chunks (#7797)
- Add
[tool.marimo.venv].pathto specify a specific venv (#7821) - Support images mimebundling in auto export for ipynb (#7825)
- Allow for
__contains__and__getitem__in anywidget (#7846) - Clarify column filtering is only for top 30 values (#7840)
- Update connecting alert to show a spinner and banner notification (#7839)
- Include errors with ipynb exports (#7811)
- Runtime configuration tooltips, docs (#7819)
- Parse indented code blocks (#7817)
- Don't steal focus when embedded in an iframe (#7798)
- Auto-close curly braces within strings (#7759)
- When previewing ibis tables in interactive mode, also include SQL and repr tabs (#7757)
- Sandboxed home (#7702)
- Ensure Plotly area chart is reactive (#7761)
🐛 Bug fixes
- Keep rich objects in chat message (#7851)
- Ibis Deferred expression object will not be handeled as datasource (#7801)
- Duplicate notebook when running 'marimo edit ' (#7841)
- Fix
mo.ui.dataframeshowing incorrect column count (#7845) - Start remote connection in a Connecting state (#7838)
- Escape key should not prevent exiting to Vim mode (#7812)
- Keep terminal mounted to preserve session across tab switches (#7833)
- Enhance keyboard handling in editable name cell component (#7818)
- Fix reactive Plotly heatmap selection with datetime axes (#7805)
- Limit private variable rename to current cell (#7814)
- More defensive edge cases when adding packages to inline metadata (#7813)
- Ensure
repr_mimebundlehandles empty include/exclude parameters gracefully (#7787) - Fixes chat config not updating (#7808)
- Fix opencode duplicate tokens bug (#7792)
- Return empty string if no tabs (#7772)
- Setup cell (#7778)
📚 Documentation
- Document
mo.ui.plotlysupport for bar and heatmap (#7769)
📝 Other changes
- Update react-aria dependencies (#7822)
Contributors
Thanks to all our community and contributors who made this release possible: @akshayka, @alonsosilvaallende, @andrewsoonqn, @AnirudhDagar, @dmadisetti, @koaning, @Light2Dark, @mscolnick, @NickCrews, @nojaf, @pepijndevos, @Ravinlathigra, @szst11
- @NickCrews made their first contribution in #7757
- @alonsosilvaallende made their first contribution in #7787
Full Changelog: 0.19.2...0.19.3