We’ve introduced APIs for end users to configure their notifications, server-side text editing for Tiptap, improved Yjs & WebSocket stability, and written lots of new content.
When using Liveblocks Notifications, your end users can now
individually configure which notifications should be sent outside your
application, and on which channel, for example via email, Slack, Microsoft
Teams, and Web Push. We’ve also released new React hooks that make it easy to
create a user notifications panel
in your application.
Users will be able to choose which notifications to receive, and on which
channel—for example, one user may wish to receive new comment notifications via
email, but not via Slack. This works by changing which webhook events are sent
by which user, allowing you to handle each separately. Both custom and
Liveblocks notifications are supported.
You can now edit your Tiptap, ProseMirror, and BlockNote state from the server.
Our latest text editor package has methods for initializing content, fetching
state, and more. For example, here’s how to insert a line of text into a
document.
You may notice that this package is called
@liveblocks/prosemirror,
but can be used for Tiptap and BlockNote. This is because these editors extend
ProseMirror, and in terms of APIs, a ProseMirror extension makes the most sense
for server-side editing.
Here’s another snippet, showing how to fetch your editor content as markdown.
const markdown =awaitwithProsemirrorDocument({ roomId:"my-room-id", client: liveblocks },async(api)=>{return api.toMarkdown();}); // # Hello world//// _This_ is a **paragraph**console.log(markdown);
Make sure to read our
@liveblocks/node-prosemirror
to learn more. We’ve also spent time improving our
@liveblocks/node-lexical
documentation, if you’d like to edit your Lexical documents from the server
instead.
If you’re curious about different text editor frameworks, we’ve written a new
guide that compares the features of a number of editors, highlighting the
important parts. Read it now—
Which rich text editor framework should you choose in 2025?
In some applications, Yjs documents would desynchronize at times, particularly
when dynamically switching between rooms. We’ve added a new function that solves
these issues, cleaning up Yjs correctly on page transitions. We now recommend
using this method to connect to our Yjs server in all frameworks.
import{ getYjsProviderForRoom }from"@liveblocks/yjs"; // Recommended way to set up Yjsconst yProvider =getYjsProviderForRoom(client, room);const yDoc = provider.doc;
If you’ve been having any problems with Yjs, we recommend you upgrade and start
using
getYjsProviderForRoom
now. You can learn more in the
Setup section of our API reference.
Internally, Liveblocks uses WebSockets, and there’s always been a technical
limit on how large WebSocket messages can be, which meant especially large
updates were not synced correctly. We’ve had an experimental feature for a while
that will send large messages over HTTP, but we now have another more reliable
option.
The new strategy is called split, and it’ll split large messages into smaller
chunks. We’ve added a new largeMessageStrategy option to
LiveblocksProvider
and createClient that
can enable this feature.
// Configure how to handle large messages<LiveblocksProviderlargeMessageStrategy="split"// .../>