We've written new guides and examples that detail how to build AI agents into Comments, and how to create collaborative grids with Handsontable. We’ve also improved Storage performance, added a new history method, and made it easier to get started with Liveblocks from AI coding tools.
Liveblocks allows you to
add AI agents to your comment threads,
and we’ve created new examples highlighting how you can deeply integrate it into
your apps. We’ve also created a new helper to simplify adding markdown to
comments.
In our
flowchart example,
you can place comment pins down and ask AI to make changes to the document.
Because our React flow integration
uses Liveblocks Storage, our sync engine, multiple agents can work at the same
time as humans.
In our
issue tracker example,
agents have the ability to read and edit issue content and properties. While the
AI makes changes, its agent presence is displayed in the UI, so you can see
exactly which changes it’s making.
AI agents often generate markdown output, so to simplify AI replies, we’ve
created a new helper function that converts markdown into a CommentBody object
that can be posted back into threads. Here’s how
markdownToCommentBody
works.
import{ markdownToCommentBody }from"@liveblocks/node"; // Generate a markdown replyconst{ text: markdown }=awaitgenerateText({ model:openai("gpt-5.5"), prompt:`Reply to the comment thread: ${thread}`,}); // Convert to a comment bodyconst commentBody =markdownToCommentBody(markdown); // Reply to the threadawait liveblocks.createComment({ roomId, threadId, data:{ userId:"agent-123", body: commentBody,},});
We’ve written new guides and examples that show you how to add collaboration to
Handsontable grids. The first example enables you
to add contextual comments to individual cells.
In the second example, the table state is multiplayer, and you can edit cells in
realtime with other users. As cells are selected, live presence shows who’s
editing them.
Previously, all changes to Storage were tracked by the undo/redo history. You
could batch changes together, but they were still added to the history stack.
Our new method,
room.history.disable,
allows you to make changes that aren’t saved in history.
This method is particularly useful for background or async changes, for example
adding AI-generated content to the document—changes that a user didn’t make
themselves, and shouldn’t be able to undo. Import
useHistory to use
disable() in React.
We've made it much faster to start building with Liveblocks from inside AI
coding tools like Cursor and Claude Code. Every get started guide now has a
“Copy prompt” button that copies a ready-to-paste prompt straight into your
editor, and any docs page can be copied as Markdown from a new dropdown.
You can even get started from our homepage—your agent will quiz you on what
you’d like to add before it starts working.
We've also added a new Integrations section to our
documentation, covering how to bring Liveblocks into the tools you already use,
including Bolt, Claude, Codex, Cursor, Lovable, Neon, PlanetScale, Reply,
Supabase, and v0.
Added AI comments to the
AI Dashboard Reports
example, which can answer questions on the app's data.
Update provider models in @liveblocks/node and the Python SDK to support
newer models up to GPT-5.5 variants, Sonnet 4.6, Opus 4.7, and Gemini 3/3.1
variants.
Fix unexpected disconnects that could happen while receiving large or
long-running streaming responses from the server (e.g. loading a large initial
storage state).
Fix @liveblocks/client so clients with backgroundKeepAliveTimeout enabled
no longer disconnect before pending Yjs updates have synced to the server.
Fix keyboard shortcut in the strikethrough tooltip in
@liveblocks/react-tiptap. Thank you
@HellBoy-OP!
Fix Yjs undo/redo silently breaking in @liveblocks/react-tiptap after
editor.registerPlugin / unregisterPlugin is called (e.g. when Tiptap's
BubbleMenu, DragHandle, or SlashCommand mount). Thank you
@lucasmotta!
New breadcrumb UI on docs pages.
Add --random-port (-P) flag to liveblocks dev in the
dev server (v1.5.0) to bind a random free port,
ideal for avoiding port collisions in CI.
Fix LiveList.push() in the dev server so concurrent pushes from multiple
clients no longer settle out of order.
Fix client.getOrCreateRoom() in the dev server so it no longer errors when
the room already exists, matching production behavior.
Fix Yjs document updates made via PUT /v2/rooms/<roomId>/ydoc in the dev
server so they get broadcast to connected WebSocket clients, matching
production behavior.