v3.2.0#
Published on September 3, 2026.
Summary#
Jupyter AI v3.2.0 refactors the entire stack to make real-time collaboration (RTC) optional, and removes jupyter-server-documents (JSD) as a required dependency. The default distribution (jupyter-ai) will no longer require RTC moving forwards. AI personas are still able to edit, run, and debug notebooks in real-time, with or without RTC.
This release is largely a refactor that fixes the various bugs reported by users and admins following the v3.0 official release, many of which have been tied to JSD and its RTC implementation. Aside from a more reliable and stable experience, user-facing changes are intended to be minimal.
Jupyter AI will continue to support RTC as an optional integration point, with either jupyter-collaboration or JSD. Users interested in using Jupyter AI with RTC should install one of the two new optional dependency groups:
jupyter-ai[rtc]-jupyter-aiwithjupyter-collaborationjupyter-ai[rtc-jsd]-jupyter-aiwithjupyter-server-documents
New jupyter-live-content#
A new package, jupyter-live-content, has been introduced to update the UI in response to file changes on disk. Agent edits to .py and .md files, for example, are always immediately reflected in the browser, even without RTC. This fixes a real gap in the default JupyterLab experience, and we will work with other maintainers to upstream this project.
This extension is automatically disabled when RTC is installed and enabled, since this capability is already provided by RTC.
Two caveats worth mentioning:
Notebooks are not updated in real time when their contents change on disk. Supporting this reliably requires a robust design that needs more review and testing.
Scroll position is lost when the file UI refreshes. We are aware of this usability issue and will work to address it in subsequent releases.
Note that agents and AI personas in the Jupyter AI chat panel are still able to edit and run notebooks in real-time. This is described in more detail below.
Refactored chat backend#
This release upgrades to Jupyter Chat v0.25.0, which also removes its dependency on RTC. It now ships its own WebSocket protocol that is used when RTC is not installed in the environment. Thank you @brichet for building the initial implementation and testing all of the subsequent changes on short notice!
When RTC is installed and enabled, the server extension falls back to the original YChat implementation used before v3.2.0. We are still exploring whether having two different server-side chat models is necessary moving forwards.
Refactored tools#
The MCP tools provided by Jupyter AI have all been refactored to work without RTC. AI personas are still able to edit, run, and debug notebooks in real-time without RTC by calling JupyterLab frontend commands provided by jupyterlab-ai-commands. This is the same set of tools used in Jupyterlite AI.
When RTC is installed and enabled, the tools fall back to the original implementation that relied on RTC APIs, used before v3.2.0.
We have also fixed a major bug where tool calls powered by JupyterLab frontend commands were run on all browsers connected to the server. This has now been fixed, and tool calls that run JupyterLab frontend commands are only run on the browser which sent the message triggering them.
Thank you#
Thank you to everyone who helped report bugs, review proposals, test pre-releases, fix bugs, refactor code, and share feedback! This release would not have been possible without the support of the community.
Full changelog#
jupyter-chat#
Upgraded from v0.23.2 β v0.25.0. (See full changelog)
API and Breaking Changes#
Enhancements made#
Load and save content from/to file in jupyterlite #533 (@brichet, @dlqqq)
Announce the writing indicator to assistive technology #519 (@opensource-joe, @brichet, @dlqqq)
Allow displaying cell output widget as message #507 (@brichet, @dlqqq)
Allow updating a message without setting the update state #503 (@brichet, @dlqqq)
Server-side ChatManager and message observer #499 (@dlqqq, @brichet)
Support server-side writers without YDoc awareness #497 (@dlqqq, @brichet)
Bugs fixed#
Drop the re-broadcast required for writing status in WS chat #534 (@dlqqq)
Push user and metadata updates to WS chat clients #531 (@dlqqq)
Adopt synced document id under RTC instead of minting a new one #528 (@dlqqq)
Fix LabChatModel.id returning undefined due to shadowed accessor #527 (@dlqqq)
fix: avoid background tasks for synchronous YChat updates #521 (@uuzzrm, @dlqqq)
Return typed attachments from
YChat.get_attachments()#515 (@bhavana-nair, @dlqqq)Trigger a rerender of the message when the mime model only is updated #506 (@brichet, @dlqqq)
Allow bot users to send empty messages in the frontend #500 (@brichet, @dlqqq)
Explicitly request file/directory content from the contents manager #484 (@brichet, @dlqqq)
Maintenance and upkeep improvements#
Other merged PRs#
jupyter-ai-router#
Upgraded from v0.0.7 β v0.1.1. (See full changelog)
Enhancements made#
Maintenance and upkeep improvements#
Other merged PRs#
jupyter-ai-persona-manager#
Upgraded from v0.1.2 β v0.2.0. (See full changelog)
Enhancements made#
Keep a WebSocket chat alive while a persona processes a message #148 (@dlqqq)
Allow persona instances to be resolved to a specific web client #145 (@dlqqq)
Prepare persona upon selection #144 (@bhavana-nair, @dlqqq)
Add prepare() lifecycle hook #136 (@bhavana-nair, @dlqqq)
Replace persona awareness with Jupyter Events API #129 (@dlqqq)
Decouple persona manager from YChat and RTC internals #121 (@bhavana-nair, @dlqqq)
Replace the control dropdown with a searchable list #116 (@rickmcgeer, @claude, @srdas)
Rescan entry point personas on refresh #47 (@wattmto, @dlqqq, @srdas)
Bugs fixed#
Maintenance and upkeep improvements#
Other merged PRs#
jupyter-ai-acp-client#
Upgraded from v0.2.1 β v0.3.0. (See full changelog)
Enhancements made#
Stop agents from editing notebooks directly #188 (@bhavana-nair, @dlqqq)
Spawn the ACP agent lazily via a prepare() lifecycle hook #182 (@bhavana-nair, @dlqqq)
Decouple ACP client from YChat #173 (@bhavana-nair, @dlqqq)
Bugs fixed#
prepare() waits for login in instead of fast-failing #187 (@bhavana-nair, @dlqqq)
Remove duplicate handle_uncaught_exception #184 (@bhavana-nair, @dlqqq)
Maintenance and upkeep improvements#
Other merged PRs#
Bump the npm-security-updates group across 1 directory with 3 updates #179 (@dlqqq)
Bump the npm-security-updates group across 1 directory with 21 updates #176 (@dlqqq)
Bump the npm-security-updates-ui-tests group across 1 directory with 6 updates #175 (@dlqqq)
Group Dependabot npm security updates into a single PR #174 (@srdas)
jupyter-server-mcp#
Upgraded from v0.2.1 β v0.3.0. (See full changelog)
Enhancements made#
Other merged PRs#
jupyter-ai-tools#
Upgraded from v0.6.1 β v0.7.0. (See full changelog)
Enhancements made#
Maintenance and upkeep improvements#
Other merged PRs#
jupyterlab-commands-toolkit#
Upgraded from v0.1.6 β v0.2.0. (See full changelog)
Enhancements made#
Maintenance and upkeep improvements#
jupyter-ai-litellm#
Upgraded from v0.0.3 β v0.1.0. (See full changelog)
Note
This is an optional package, installed only with the corresponding jupyter-ai extra.
Maintenance and upkeep improvements#
jupyter-ai-jupyternaut#
Upgraded from v0.1.0b1 β v0.1.0rc0. (See full changelog)
Note
This is an optional package, installed only with the corresponding jupyter-ai extra.
Enhancements made#
Bugs fixed#
Maintenance and upkeep improvements#
Other merged PRs#
Unchanged subpackages#
The following subpackages did not advance their version floor in this release:
jupyter-ai-chat-commands(v0.0.4)jupyter-ai-magic-commands(v0.0.4)jupyter-server-documents(v0.3.3)jupyterlab-notebook-awareness(v0.2.0)