From 1d6ea2a7033fe72b56a76c81b9bfa79b5b015d73 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 13:52:27 +0000 Subject: [PATCH 1/2] Fix broken tutorial link on Liveblocks Storage docs page (#3182) Co-authored-by: Chris Nicholas Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../multiplayer/sync-engine/liveblocks-storage.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/ready-made-features/multiplayer/sync-engine/liveblocks-storage.mdx b/docs/pages/ready-made-features/multiplayer/sync-engine/liveblocks-storage.mdx index 0d5b56f81c..ca677c360d 100644 --- a/docs/pages/ready-made-features/multiplayer/sync-engine/liveblocks-storage.mdx +++ b/docs/pages/ready-made-features/multiplayer/sync-engine/liveblocks-storage.mdx @@ -16,7 +16,7 @@ maintenance for you. -Our [interactive React tutorial](/tutorial/react/storage) guides you through +Our [interactive React tutorial](/docs/tutorial/react/getting-started/storage) guides you through using each of the concepts listed on this page. From fb7d74e7e5390f8c3fdd2cdcd84cbd9c6964d2d5 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 16 Mar 2026 09:17:30 -0700 Subject: [PATCH 2/2] fix merge on load (PR 1642) Original commit: 438877607906e7eb345efbe93472ef72d05878fb --- packages/liveblocks-server/src/YjsStorage.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/liveblocks-server/src/YjsStorage.ts b/packages/liveblocks-server/src/YjsStorage.ts index 819922699b..da8f7e8c54 100644 --- a/packages/liveblocks-server/src/YjsStorage.ts +++ b/packages/liveblocks-server/src/YjsStorage.ts @@ -248,11 +248,13 @@ export class YjsStorage { doc: Y.Doc, docId: YDocId ): Promise => { - const storedKeys: string[] = []; - for (const [key, update] of await this.driver.iter_y_updates(docId)) { - Y.applyUpdate(doc, update); - storedKeys.push(key); - } + const docUpdates = Object.fromEntries( + await this.driver.iter_y_updates(docId) + ); + const updates = Object.values(docUpdates); + const newupdate = Y.mergeUpdates(updates); + const storedKeys = Object.keys(docUpdates); + Y.applyUpdate(doc, newupdate); // after compaction, there will only be one unique key. if (this.shouldCompact(storedKeys)) { await this._compactYJSUpdates(doc, docId, storedKeys);