Release history
liveblocks releases
Realtime infrastructure for multiplayer apps and agents
All releases
27 shown
- @liveblocks/node: markdownToCommentBody helper added
- @liveblocks/client: room.history.disable now stable
Full changelog
@liveblocks/node
- Add new
markdownToCommentBodyhelper to convert Markdown strings into
CommentBodyobjects.
@liveblocks/client
room.history.disable(fn)is now officially supported and no longer
experimental. It allows running storage mutations without them appearing on
the undo/redo stacks and it’s intended for background/async writes (e.g.
writing back AI generation results) that should not be undoable.
@liveblocks/react-tiptap
- Fix keyboard shortcut in strikethrough tooltip. (Thanks @HellBoy-OP for the
contribution!) - Fix Yjs undo/redo silently breaking after
editor.registerPlugin/
unregisterPluginis called (e.g. when Tiptap'sBubbleMenu,DragHandle,
orSlashCommandmount). The reattachrestore()is now installed
unconditionally on view destroy, matching upstream
@tiptap/extension-collaboration. (Thanks @lucasmotta for the contribution!)
- Support for overlapping comment marks in AnchoredThreads and FloatingThreads
Full changelog
@liveblocks/react-tiptap
- Support overlapping comment marks, they now all appear in the
AnchoredThreadsandFloatingThreadscomponents.
### `@liveblocks/emails` - Mark `yjs` and `y-prosemirror` as required peer dependencies.
Changelog
@liveblocks/emails
- Mark
yjsandy-prosemirroras required peer dependencies.
- Install yjs, @tiptap, and @blocknote as explicit dependencies if your project uses them
- yjs, @tiptap/*, and @blocknote/* moved from bundled to peer dependencies — projects must explicitly install these libraries
Full changelog
@liveblocks/*
- Third-party libraries like
yjs,@tiptap/*, and@blocknote/*are now declared as peer dependencies instead of bundled dependencies across all packages that use them.
- Experimental `room.history.disable(fn)` API for excluding storage mutations from undo/redo stacks, intended for background/async writes
- Fixed `ToJson` type losing specific value types for `Record` storage fields
Full changelog
@liveblocks/client
- New experimental
room.history.disable(fn)API that allows running storage mutations without them appearing on the undo/redo stacks. Intended for background/async writes (e.g. writing back AI generation results) that should not be undoable. - Fix
ToJsontype losing specific value types forRecord<string, T>fields in Storage
- Mentions suggestions now appear after punctuation (!, ., () and emojis
Full changelog
@liveblocks/react-ui
- Mentions suggestions now appear in more cases after typing
@:- After punctuation like
!,.,(, etc. (e.g.Hello!@,
cc: the other team (@) - After emojis (e.g.
Hello 👋@)
- After punctuation like
- useStorage now returns plain objects for LiveMap values instead of Map instances
- Legacy APIs removed: .toImmutable(), .toObject(), .toArray()
- New .toJSON() method on all Live structures for JSON-compatible snapshots
- LiveObject.from(obj) creates Live structures from plain JSON recursively
- New @liveblocks/react-flow/node package for server-side mutations
- New @liveblocks/react-flow package with useLiveblocksFlow hook for synced collaborative diagrams
- Cursors component displays other users' cursors in React Flow diagrams
- Customizable cursors via components={{ Cursor: MyCursor }} prop in Cursors component
Full changelog
@liveblocks/react-flow
- Introduce the package. Install with
npm install @liveblocks/react-flow.
Provides hooks and components that add collaboration to any React Flow diagram
using Liveblocks Storage:- Use the
useLiveblocksFlowhook to make React Flow synced and
collaborative. - Use the
Cursorscomponent to show other users' cursors inside React Flow.
- Use the
@liveblocks/react-ui
- Allow customizing cursors in the
Cursorscomponent by passing a
components={{ Cursor: MyCursor }}prop.
- Room-scoped feeds with metadata and messages across React, Node, and Python SDKs
- Chat SDK adapter backed by Liveblocks Comments with webhooks and message management
- Comment component body prop for custom rich-text rendering
Full changelog
@liveblocks/chat-sdk-adapter
- Introduce the package. Install with
npm install @liveblocks/chat-sdk-adapter. Provides a
chat-sdk-compatible backend adapter
backed by Liveblocks Comments: webhooks, posting and editing messages,
reactions, paginated fetches, thread and channel helpers, and optional
resolveUsers/resolveGroupsInfohooks.
@liveblocks/react
- Add Feeds hooks:
useFeeds,useFeedMessages,useCreateFeed,
useDeleteFeed,useUpdateFeedMetadata,useCreateFeedMessage,
useDeleteFeedMessage, anduseUpdateFeedMessage.
@liveblocks/node
- Add REST client methods for Feeds:
getFeeds,getFeed,createFeed,
updateFeed,deleteFeed,getFeedMessages,createFeedMessage,
updateFeedMessage, anddeleteFeedMessage.
Python SDK
- Add Feeds REST API support on the sync and async clients (
get_feeds,
get_feed,create_feed,update_feed,delete_feed,get_feed_messages,
create_feed_message,update_feed_message,delete_feed_message) with
matching request/response models.
@liveblocks/client
- Add Feeds: room-scoped feeds with metadata and messages and APIs to list,
create, update, and delete feeds and messages (fetchFeeds,
fetchFeedMessages,addFeed,updateFeed,deleteFeed,addFeedMessage,
updateFeedMessage,deleteFeedMessage).
@liveblocks/react-ui
- Add
bodyprop toCommentto allow overriding only the default rich-text
comment body while still keeping attachments, reactions, and
additionalContentas is, unlike when using thechildrenprop. - Fix
AvatarStacknegative margin breaking alignment.
Fixed Python SDK request body validation where required fields were incorrectly marked as optional.
- Liveblocks.getAttachment() method in Node.js SDK to retrieve attachment metadata and presigned download URLs
- get_attachment() method in Python SDK to retrieve attachment metadata and presigned download URLs
Full changelog
@liveblocks/node
- Add
Liveblocks.getAttachment()method to get an attachment's metadata and a
presigned download URL.
Python SDK
- Add
get_attachment()method to get an attachment's metadata and a presigned
download URL.
- Python SDK with sync and async clients for rooms, storage, threads, and comments APIs
- Thread component showSubscription prop to control subscription status display
Full changelog
Python SDK
- Introduce the Python package. Install with
pip install liveblocks. Provides
sync and async clients for the full Liveblocks API (rooms, storage, threads,
comments, etc.) for backend use.
@liveblocks/react-ui
- Add
showSubscriptionprop toThreadto control whether to show the
thread’s subscription status.
Deprecated engine option in @liveblocks/client, @liveblocks/react, and @liveblocks/node.
- @liveblocks/react-blocknote now requires BlockNote v0.43.0 or later
- Thread and Comment components now support extensive customization via components prop and additional props (children, additionalContent, avatar, author, date)
- createRoomContext() now creates isolated contexts, allowing independent room contexts and RoomProvider components to be nested
- Inline components in components props are now kept stable to prevent unnecessary re-mounting
Full changelog
@liveblocks/react-ui
- Add various new ways to customize
ThreadandComment:- Comments in
Threadcan now be overridden or customized via the
componentsprop. - New parts of
Comment(content, avatar, author, and date) can now be
overridden or customized via thechildren,additionalContent,avatar,
author, anddateprops.
- Comments in
- Fix
commentDropdownItemsprop onThreadnot working as expected in some
cases.
@liveblocks/react
- Each
createRoomContext()invocation now creates its own isolated context to
allow nesting independent room contexts and theirRoomProvidercomponents.
@liveblocks/react-blocknote
- Support newer BlockNote versions and bump the minimum required version to
v0.43.0. (Thanks @nperez0111 for the contribution!)
@liveblocks/react-ui, @liveblocks/react-tiptap, and @liveblocks/react-lexical
- Improve how inline components passed to
components={{ ... }}props are
handled by keeping them stable instead of re-mounting them on every render. - Move
@radix-ui/*dependencies to theradix-uimono package.
Fixed paginated hooks stopping pagination after first fetchMore() call in auto-pagination.
- tenantId parameter deprecated in @liveblocks/node client methods — use organizationId instead
- Storage engine remains version 1 by default; engine cannot be changed after room creation
- Removed largeMessageStrategy client option from @liveblocks/client; WebSocket message limit increased from 1 MB to 32 MB
- New storage engine v2 support (opt-in per room with engine: 2) — larger documents, better performance, more stable
- New baseUrl config option in createClient() for connecting to Liveblocks dev server
- New .setPresence() REST API method in @liveblocks/node for setting ephemeral user presence
Full changelog
This release adds support for opting-in to the new storage engine on a per-room basis. The new storage engine can support larger documents, is more performant, is considered more stable, and will eventually become our default engine for all new rooms in the future.
As of this release, the default storage engine still remains engine version 1.
To give it a try, simply pass engine: 2 when entering a new room. After a room is created, you cannot change the engine it was created with anymore.
For example:
// Vanilla JS
client.enterRoom("my-new-room", { engine: 2 });
or:
// In React
<RoomProvider id="my-new-room" engine={2}>
...
</RoomProvider>
@liveblocks/client
- Support for selecting the preferred engine when entering new rooms:
client.enterRoom("my-new-room", { engine: 2 }) - Internal protocol optimizations to support larger storage documents
- Add new config option
createClient({ baseUrl: "https://..." })to allow connecting to the Liveblocks dev server - Improve
LiveListperformance when processing large batches of operations - Improve
LiveList.push()efficiency to prevent unbounded position string growth over time - Fix crash when clearing documents with a large number of keys
- Remove the
largeMessageStrategyclient option. The WebSocket message limit has been increased from 1 MB to 32 MB, making this setting obsolete.
@liveblocks/react
- Support for selecting the preferred engine when entering new rooms:
<RoomProvider id="my-new-room" engine={2}>...</RoomProvider> - Add new config option
<LiveblocksProvider baseUrl="https://..." />to allow connecting to the Liveblocks dev server - Exclude marking a thread or inbox notification as read from blocking navigation when
preventUnsavedChangesis enabled.
@liveblocks/react-tiptap and @liveblocks/react-lexical
- Portaled elements now respect the
portalContaineroption from@liveblocks/react-ui’sLiveblocksUiConfiginstead of always usingdocument.body.
@liveblocks/zustand and @liveblocks/redux
- Support for selecting the preferred engine when entering new rooms:
enterRoom("my-new-room", { engine: 2 })
@liveblocks/node
- Add new
.setPresence()method to set ephemeral presence for a user in a room via the REST API, without requiring a WebSocket connection - Deprecated
tenantIdparameter in client methods, useorganizationIdinstead.
Fixed plugin key conflict in Blocknote by replacing y-tiptap with y-prosemirror
- Add alwaysUseKnowledge option to control when copilots retrieve uploaded knowledge sources
Fixed storage subscriptions failing to fire after concurrent move and set operations.
- Comment metadata support with new parameters in createThread, createComment, and editComment
- New editCommentMetadata method and useEditCommentMetadata hook for independent metadata updates
- New commentMetadataUpdated webhook event for server-side integrations
Full changelog
This release adds support for comment metadata, allowing you to attach custom
metadata to individual comments in the same way as thread metadata.
All packages
- Support typing comment metadata globally via the
Liveblocksinterface. - Improve
CommentBodytypes. - Internal refactorings to prepare for upcoming protocol updates.
@liveblocks/client
- Add new parameters to
createThread,createComment, andeditCommentto
attach and update comment metadata. - Add
editCommentMetadatamethod to update only a commentʼs metadata.
@liveblocks/react
- Add new parameters to
useCreateThread,useCreateComment, and
useEditCommentto attach and update comment metadata. - Add
useEditCommentMetadatahook to update only a commentʼs metadata.
@liveblocks/react-ui
- Add
commentMetadataprop toComposerto attach and update comment
metadata.
@liveblocks/react-lexical and @liveblocks/react-tiptap
- Add
commentMetadataprop toFloatingComposerto attach and update comment
metadata.
@liveblocks/react-tiptap
- Fix
Toolbarnot reflecting the editorʼs current state.
@liveblocks/node
- Add new parameters to
createThread,createComment, andeditCommentto
attach and update comment metadata. - Add
editCommentMetadatamethod to update only a commentʼs metadata. - Add
commentMetadataUpdatedwebhook event.