This release introduces a refreshed UI with lighter cell styling and a new Developer Panel, along with reorganized sidebar panels and important bug fixes.
Highlights
Introducing the Developer Panel
marimo has many panels for configuring and inspecting notebooks, but mixing essential tools with advanced features can overwhelm new users. This release introduces a dedicated Developer Panel at the bottom of the editor (similar to VS Code's panel or browser DevTools) to house specialized tools like the terminal, logs, tracing, and scratchpad.
The sidebar now focuses on core panels that all users need, while power users can open the Developer Panel when they need deeper visibility into execution or want a scratchpad for experimentation. If you prefer a different arrangement, panels can be freely moved between the sidebar and Developer Panel—just drag them where you want.
- Toggle the Developer Panel with
Cmd/Ctrl + Jor via the footer - Drag panels between the sidebar and Developer Panel to customize your layout
Consolidated Sidebar Panels
To reduce clutter, several panels have been reorganized:
- Minimap has moved into the Dependencies panel as a tab. The same keyboard shortcut opens it (
Cmd/Ctrl+Shift+I) - Variables & Data Sources are now combined into a single panel with collapsible accordion sections
✨ Enhancements
- Unify panel actions to work across sidebar and developer panel (#7743)
- Move minimap into "Dependencies" panel with tabbed UI (#7742)
- Implement wrap around feature for
mo.carousel()(#7709) - Add ADBC DB-API engine for SQL connections (#7664)
- Also allow
Ctrlas modifier key on macOS (#7608) - Add panel section context for orientation-aware layouts (#7724)
- Add cross-list drag-drop for sidebar and developer panel (#7697)
- Small fixes for cell shadows and hover (#7715)
- Shadow adjustments (#7700)
- implement pydantic-ai provider for mo.ui.chat (#7636)
- Lighten shadows (#7682)
- Fix sidebar drag-and-drop requiring click before drag (#7669)
- Pytest fixtures (#7654)
- Add command history navigation with arrow keys (#7617)
- Add send button, and clean styles of AI buttons (#7445)
- Lazy backend (#7523)
- Add support for reactive Plotly bar chart (#7733)
- Feat add pivot transform to
mo.ui.dataframe(#7584) - Reactive Plotly heatmap (#7546)
- Support uv
devinstall (#7372) - Combine "Variables" & "Data Sources" panels into "Variables & Data Sources" panel (#7459)
- Detect
!pipand give better error message (#7525) - Cell styles on sort/pagination (#7452)
- Consolidate developer tools into dedicated "Developer Panel" (#7458)
- Double click to reveal hidden markdown code (#7495)
- Create cell button, collapse strokes/size (#7448)
- Always collapse runtime settings into a single dropdown (#7461)
🐛 Bug fixes
- Remove width param for data editor (#7741)
- Relative path fixes for home mode (#7722)
- Fix duplicate HTML5 backend error in file explorer (#7723)
- refresh table on cell styles change (#7705)
- Fix path resolution for .resolve() and .absolute() for correctness and security (#7703)
- Disallow file access outside directory where 'marimo edit <folder' is run (#7701)
- Ipynb export matplotlib (#7696)
- Windows path validation, convert to longpath (#7691)
- Specific handling for lazy requests (#7698)
- Fix
Ctrl+Clickto select cell type on Windows/Linux (#7580) - Fix escape logic for selections and multiple cursors in a cell (#7434)
- Fix request type (#7601)
- Fix dataframe flaky test (#7589)
- Fix example code in
UIElement.formdocstring (#7578) - Fix for pasting images in markdown (#7536)
📚 Documentation
- Add "using claude code" section (#7687)
- Add pydantic-ai to chatbot docs (#7706)
- Add Codex agent support to agents guide and update AI completion reference (#7658)
- Correct spelling of 'sqlalchemy' in SQL docs (#7509)
- Fix new stat docs (#7503)
- Use update cell code to not wait for cell editor (#7520)
📝 Other changes
- Split out docker ci to be manually run (#7740)
- Add repository to package.json (#7725)
- Single release.yml with switch (#7719)
- Address windows flakiness by reducing introspection calls (#7678)
- Turn off auto install for micropip (#7680)
- Update all storybook dependencies to ^10.1.11 (#7610)
- Path validation test and public asset logic (#7688)
- Home page lazy loading (#7689)
- interpolate globals into sql query using string formatting for validate_sql (#7562)
- Fix cross-view interactions (e.g., brush selections) breaking in concatenated Altair charts when using
mo.ui.altair_chart. (#7673) - Preserve symlinks in path validation check (#7671)
- Better parsing for pep dependencies in pyodide (#7670)
- Point selection for altair heat maps (#7675)
- Respect include_code setting for code downloads in run mode, and show "Download as .py" (#7642)
- Add accept & reject buttons for setup cell (#7667)
- Cgroup-aware machine stats (#7488)
- Add marimo as a dependency if it isn't already (#7656)
- Add cell prefix to setup cell registration (#7648)
- Invalid error thrown when undefined setup variables (#7649)
- Wider duckdb support, wider types check (#7644)
- Remove some duplication in pyproject.toml (#7646)
- Use dependency-groups in pyproject.toml (#7325)
- Better minimum resolutions (#7639)
- Allow saving notebooks on /tmp_mnt paths (#7641)
- Do not use shared memory in run case (#7637)
- Quarto specific code block (#7623)
- Cleanup app-router (#7628)
- Move find-free port so _plugins don't depend on _server (#7633)
- Improve clarity in Traditional Chinese README (#7635)
- Set only partial updates for config changes (#7634)
- Use Command instead of Request in put_control_request (#7632)
- Send only partials of updated config data (#7553)
- Update min starlette for fixed httpx compat (#7630)
- Don't trigger browser auth popup for API requests (#7629)
- Typesafe app-state (#7627)
- Move session files (#7626)
- Migrate to pydantic-ai for google & anthropic providers (#7425)
- Run auto-instaniate on the backend for run mode (#7603)
- Dataframe plugin - move columns logic to the backend (#7611)
- Cleanup markdown serializers (#7569)
- Lint fixes (#7622)
- Improve column legibility (#7614)
- Fix flakey sys.stderr test (#7613)
- Show up to h6 for Outline (#7609)
- Fixes for fe-tests (#7607)
- Fullscreen icon, collapse icon, focus ring (#7571)
- Unparsable cell is not idempotent (#7583)
- More session extensions (#7602)
- Change copyright to 2026 including scripts (#7606)
- Missing endpoint test coverage (#7598)
- Pull out variable logic from notification schemas (#7596)
- Test extensions (#7600)
- Update build tools (#7594)
- Revamp Ollama models list (#7595)
- Rename kernel Requests to Command (#7593)
- Change open api schema diff tool (#7592)
- Rename Op to Notification (#7590)
- Split up ws monolith (#7587)
- Generate notification schema (#7586)
- Pull out notification utils (#7585)
- SessionConsumer as a SessionExtension (#7570)
- Update testing dependencies (#7577)
- Session extensions (#7542)
- CLI flag to configure whether a notebook is trusted (#7556)
- Fix flaky hypothesis test for pandas GROUP_BY transforms (#7563)
- Change/cleanup transport logic for different backens (ws, pyodide, static) (#7552)
- Re-enable sql linter (#7561)
- Internal api for template rendering (#7555)
- Update dependency storybook to v10.1.10 [security] (#7550)
- Traverse previous directories even if directory is not located in home (#7551)
- Skip watching test on windows (#7541)
- DRY up endpoints that proxy directly to the kernel (#7540)
- Reduce fields exposed on the Session object (#7537)
- Convert edges class to util functions, remove unused siblings (#7533)
- Split up SessionManager (#7534)
- Config cell_output prefault "below" (#7535)
- Provide toplevel/ NameError explanations for private variables (#7524)
- Split up
DirectedGraphinto smaller components (#7527) - Break down session.py into smaller bits (#7532)
- Outline deployment with skypilot (#7400)
- Suppress signature help for external edits (#7528)
- Contextual docs hint for local variables on NameError (#7522)
- More edge cases in codeblock stripping (#7511)
- Handle ImportErro and ModuleNotFoundError in output formatting (#7482)
- Dataframe download encoding (#7385)
marimo editlocal static notebooks (#7474)- Additional hyprlinks (#7512)
- App.embed(defs={'mine': value}) (#7146)
- Add signature docstring, and remove list of autocompletion after empty paren & commas (#7331)
- Focus on editors and buttons after layout shift from hidden code (#7489)
- Strip first and last chunks for backtick checking (#7510)
- Add lazy argument to ui.dataframe (#7476)
- Fix OSError when running marimo with uv projects on Windows (#7502)
- Copy as markdown in the dataframe table (#7507)
- When formatting structures, don't flatten formattable structures (#7492)
- Focus cells when undeleted (#7491)
- Correct imports to actual file instead of accidental exports (#7490)
- Fix tutorial access from UI (#7465)
- Revert removal of useEffect, fix table search focus (#7486)
- Enable reactive reference highlighting by default (#7483)
- Remove unneeded options in notebook menu (#7480)
- Parse urls and install commands from console outputs (#7479)
- Simplify cell menu (#7481)
- Fix OSError when displaying Polars DataFrames with old timestamps on Windows (#7477)
- Stderr (#7478)
- Add wait step for PyPI package availability in Docker release workflow (#7466)
- add error banner for acp to save the notebook (#7470)
- Clean up organization (#7464)
- Enhance GitHub Copilot integration with advanced configuration options (#7457)
- Fix breaks to polars upgrades (#7454)
- Clarify ancestor code is still important for cache invalidation (#7473)
- Do not style stderr as red (#7472)
- Fetch index.html from
--asset-urlas a fallback (#7453) - Handle comprehension shadowing when parsing required references for variables (#7446)
- Add dynamic model selection for ACP agents (#7432)
Contributors
Thanks to all our community and contributors who made this release possible: @akshayka, @andrewsoonqn, @corleyma, @dmadisetti, @koaning, @Light2Dark, @m-rgba, @majiayu000, @manzt, @mscolnick, @nojaf, @prateek, @thliang01
And especially to our new contributors:
- @lmReef made their first contribution in #7512
- @vavavavavavavavava made their first contribution in #7385
- @dmayilyan made their first contribution in #7372
- @shunichironomura made their first contribution in #7578
- @majiayu000 made their first contribution in #7617
- @Ddfulton made their first contribution in #7488
- @prateek made their first contribution in #7658
- @m-rgba made their first contribution in #7700
- @heizerbalazs made their first contribution in #7584
- @corleyma made their first contribution in #7664
- @andrewsoonqn made their first contribution in #7709
Full Changelog: 0.18.4...0.19.0

