• Week 29


    • New default components: AnchoredThreads and FloatingThreads to display threads that are tied to a specific part of the document, similar to Notion, Linear, etc:

      • FloatingThreads displays floating Thread components below text highlights in the editor.
      • AnchoredThreads displays a list of Thread components vertically alongside the editor.
      • These components can be used in the same application to create a UI that works on both mobile and desktop.
    • Add useDeleteInboxNotification and useDeleteAllInboxNotifications hooks.

    • Fix resolved query not being applied when filtering threads with useThreads.

    • Various refactorings to Suspense internals.

    • Add "Delete notification" action to InboxNotification.

    • Hide "Mark as read" action in InboxNotification when already read.

    • Improve keyboard navigation within emoji pickers.

    • Add deleteInboxNotification and deleteAllInboxNotifications methods.


    • Added delete all notifications button to notifications examples.



    • Fix changelog images on mobile.


    Contributors include:nimeshnayajuofoucherotnviemarcbouchenoiredant2021ctnicholas

    6 authors

  • Week 28


    • Fix missing avatar in textMention inbox notifications.
    • Fix textMention usage (and its props type) when customizing rendering via kinds on InboxNotification.
    • Fix broken CSS selector in default styles.


    • Don’t attempt to write Yjs changes if the current user has no write access


    Contributors include:jrownynviemarcbouchenoire

    3 authors

  • Week 27


    We are making resolved a first-class citizen property on threads, for more information about this change please read our Upgrade Guide for 2.2.

    • Add useMarkThreadAsResolved and useMarkThreadAsUnresolved hooks.

    • Support query.resolved when filtering threads.

    • The useStorageStatus hook now also has a { smooth: true } setting to make building calm UIs with it a bit easier.

    • The useClient() hook is now also available for users of createRoomContext() and/or createLiveblocksContext().

    • Fix: avoid unnecessary re-renders if inbox notifications haven't changed.

    • Use first-class citizen resolved property in Thread component.

    • Preserve rich text when pasting into the composer.

    • Add support for custom links to the composer. (either by pasting URLs with plain text selected or by pasting existing links)

    • Preserve whitespace and empty lines in comments.

    • Mark threads as read when visible (like before), but only if the window is focused.

    • Fix improper useTransition fallback which would break on React versions lower than 18.

    • Add markThreadAsResolved and markThreadAsUnresolved methods.

    • Add ThreadMarkedAsResolvedEvent and ThreadMarkedAsUnresolvedEvent webhook events.

    • Support query.resolved when querying threads.

    • Upgrade lexical peer dependency to version ^0.16.1 that fixes compatibility issues with Next.js versions 14.2.0 and above.

    • Upgrade lexical peer dependency to version 0.16.1.




    Contributors include:flowflorentofoucherotnviemarcbouchenoirenimeshnayajuctnicholasTeddarificstevenfabre

    8 authors

  • Week 26


    • Various internal refactorings

    • Add new hook useStorageStatus, which returns the current storage status of the room, and will re-render your component whenever it changes. This can used to build "Saving..." UIs.

    • Add useDeleteThread hook to delete a thread and its associated comments.

    • Fix: add missing JSDoc comments

    • Fix: improve some error messages and stack traces to contain more info

    • Refactorings to Suspense internals

    • Fix improper useSyncExternalStore import which would break on React versions lower than 18.


    • Improved DX: useDeleteThread will now throw a client-side error if someone else than the thread owner tries to delete the thread. This will help you catch and handle this case more easily.




    • Versioning and publishing of public packages is now decoupled from versioning/publishing of our CLI tools.


    Contributors include:flowflorentctnicholasnviestevenfabrepierrelevaillantmarcbouchenoire

    6 authors

  • Week 25


    • Improve TS error messages and error locations if custom UserMeta or ActivitiesData types do not match their requirements.

    • Add missing type export for CommentReaction

    • Don’t attempt to write missing initialStorage keys if the current user has no write access to storage. This will no longer throw, but issue a warning message in the console.

    • Add useDeleteThread hook to delete a thread and its associated comments.


    • In client.enterRoom(), the options initialPresence and initialStorage are now only mandatory if your custom type requires them to be.

    • In <RoomProvider>, the props initialPresence and initialStorage are now only mandatory if your custom type requires them to be.

    • Nesting <LiveblocksProvider>s will now throw to prevent incorrect usage

    • Prevent the composer from splitting text being composed.

    • Handle parentheses around and within auto links.

    • Count whitespace as empty to prevent posting empty comments.

    • Prevent clearing the composer if it's not handled. (via onComposerSubmit)

    • Add missing type exports


    • Add deleteThread method to the client to delete a room's thread.
    • Add the threadDeleted webhook event to notify when a thread is deleted.
    • Fix type signatures of client.identifyUser() and client.prepareSession() to require userInfo if it's mandatory according to your global UserMeta type definition.





    Contributors include:ctnicholasstevenfabrematthewlipskiflowflorentnvie

    5 authors

  • Week 24


    This major release marks the maturity of Liveblocks. It contains new products (@liveblocks/react-lexical) and clarifications (e.g. @liveblocks/react-comments is now called @liveblocks/react-ui). t Also, we bring major DX improvements by allowing you to specify your types globally now. These types will be typed once and shared across all Liveblocks APIs, which includes your Node backend.

    // ❌ Beforeexport const {  suspense: {    RoomProvider,    useRoom,    // etc  },} = createRoomContext<Presence, Storage>(client);
    // ✅ Afterdeclare global { interface Liveblocks { Presence: Presence; Storage: Storage; }}

    In @liveblocks/react, you can now import hooks directly:

    // ❌ Before: get hooks exported from your Liveblocks configimport { RoomProvider, useRoom, ... } from "./liveblocks.config";
    // ✅ After: import hooks directlyimport { RoomProvider, useRoom, ... } from "@liveblocks/react";import { RoomProvider, useRoom, ... } from "@liveblocks/react/suspense";
    // ❌ Beforeconst client = createClient(/* options */);
    // ✅ After<LiveblocksProvider /* options */> <App /></LiveblocksProvider>

    For full upgrade instructions and codemods, see the 2.0 upgrade guide.

    • Update config generation for Liveblocks 2.0.

    • Add --upgrade flag to automatically update all Liveblocks package to their latest version.

    • DX improvements: type once, globally, benefit everywhere

    • DX improvement: import hooks directly

    • DX improvement: <ClientSideSuspense> no longer needs a function as its children

    • New provider: LiveblocksProvider (replaces the need for createClient)

    • New hook: useClient

    • Tweak useMutation error message to be less confusing.

    • Allow thread and activity metadata types to contain undefined values.

    • Rename from @liveblocks/react-comments.

    • Rename <CommentsConfig /> to <LiveblocksUIConfig />.

    • Improve InboxNotification props types.

    • Initial release.

    • Initial release.

    • LiveblocksProvider is no longer a default export, it’s now import { LiveblocksYjsProvider } from "@liveblocks/yjs".

    • DX improvements: all Node client methods will pick up the same global types you’re using in your frontend

    • Rename RoomInfo to RoomData.

    • The webhook event NotificationEvent’s type can represent multiple kinds of notifications. ("thread", "textMention", and custom ones (e.g. "$myNotification"))

    • Initial release.




    • Added new example: nextjs-lexical
    • Upgraded and adjusted all examples to 2.0


    • Webhooks are now available to everyone.


    • Show Lexical information in rooms that use the new Lexical plugin.


    Contributors include:adigauctnicholasflowflorentguillaumesallesjrownymarcbouchenoirenimeshnayajunvieofoucherotpierrelevaillantstevenfabre

    11 authors

  • Week 21


    • Added a brand new project analytics page with graphs that gives you better insights into active users, active rooms, comments, notifications, and data stored.
    • Improved the billing and usage view.
    • Moved Webhooks notification throttle interval setting to the project settings page
    • Fixed a number formatting issue by enforcing US number formatting for all locations


    • Ongoing internal refactorings to enable simpler setup for @liveblocks/react in the future.


    Contributors include:ofoucherotflowflorentstevenfabreguillaumesallesnvie

    5 authors

  • Week 20


    • Liveblocks events are now visible in the dashboard.
      • New "Events" tab within a project.
      • Filter room events by type (e.g. userEntered, userLeft), exact roomId, and exact userId.
      • Select a date range (with available presets).
      • Click on an event to open the event details modal.
      • Navigate between events using the previous/next buttons without leaving the modal.
    • On the room's detail page, click "View room events" at the top right to access the room events.
    • Added a new date picker to the "Overview" and "Events" pages.
    • Improved onboarding.
      • Making sure the default team name isn't too long and can be submitted.
      • Improved form submission performance by only calling the required API endpoints.


    • Fixed broken link in one onboarding email.
    • Internal refactorings to enable simpler setup for @liveblocks/react in the future.


    Contributors include:pierrelevaillantofoucherotstevenfabrenvie

    4 authors

  • Week 19



    • Completely rewritten API reference for @liveblocks/client.
    • New components for showing arguments, returns, properties.
    • Refreshed banner components.
    • Add webhooks source IP addresses for receiving endpoints behind NAT or firewalls.
    • Fixed a typo in query language rooms guide.


    • The project quickstart connection status can now be dismissed.
    • Improved copy to clarify the difference between production and development projects.
    • Improved project overview banner copy for when Liveblocks hasn't yet been set up.


    • Made batch processing of webhook and other events more efficient at scale.


    Contributors include:ctnicholasstevenfabrepierrelevaillantofoucherotflowflorent

    5 authors

  • v1.12.0


    • Add support for custom notification kinds.
    • Add new useInboxNotificationThread hook to createLiveblocksContext, which can be used to retrieve threads within thread notifications for more flexibility.
    • Add support for startsWith operator to useThreads when filtering based on metadata.


    • Add support for custom notification kinds to the InboxNotification component via the kinds prop and the InboxNotification.Custom component.
    • Add destructive color tokens. (--lb-destructive, --lb-destructive-foreground, and --lb-destructive-contrast)


    • Add triggerInboxNotification method that lets you trigger custom notification kinds.
    • Enable filtering rooms by room ID in the getRooms method. This works via query.roomId, metadata is deprecated and is now query.metadata.
    • Add support for our query language when filtering with the getRooms and getThreads methods.
    • Add support for an alternative object-based query notation to the getRooms and getThreads methods, which supports exact matches and the startsWith operator.