From 5a99ce05af9c9a83d695c9c38bd9f1ef08a1d054 Mon Sep 17 00:00:00 2001 From: Dougal Matthews Date: Wed, 18 Mar 2026 13:53:05 +0100 Subject: [PATCH 1/2] fix(replay): fix playback stopping when skipping backwards with virtual DOM When using the virtual DOM (useVirtualDom: true), skipping backwards could cause playback to stop entirely. destroyTree() was called before legacy missing nodes were resolved, resetting the virtual DOM mirror. Subsequent createOrGetNode() and diff() calls used the empty mirror, producing nodes with -1 IDs that were never added to the real DOM mirror. Move destroyTree() after the legacy missing nodes loop so the virtual DOM mirror is still available when converting legacy nodes. --- .changeset/fix-virtual-dom-backward-skip.md | 5 +++++ packages/rrweb/src/replay/index.ts | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 .changeset/fix-virtual-dom-backward-skip.md diff --git a/.changeset/fix-virtual-dom-backward-skip.md b/.changeset/fix-virtual-dom-backward-skip.md new file mode 100644 index 0000000000..47cc00a86c --- /dev/null +++ b/.changeset/fix-virtual-dom-backward-skip.md @@ -0,0 +1,5 @@ +--- +'rrweb': patch +--- + +Fix playback stopping when skipping backwards with useVirtualDom enabled diff --git a/packages/rrweb/src/replay/index.ts b/packages/rrweb/src/replay/index.ts index a2a7091bd5..09a3c0efbb 100644 --- a/packages/rrweb/src/replay/index.ts +++ b/packages/rrweb/src/replay/index.ts @@ -266,10 +266,8 @@ export class Replayer { console.warn(e); } - this.virtualDom.destroyTree(); - this.usingVirtualDom = false; - // If these legacy missing nodes haven't been resolved, they should be converted to real Nodes. + // This must happen before destroyTree() which resets the virtual DOM mirror. if (Object.keys(this.legacy_missingNodeRetryMap).length) { for (const key in this.legacy_missingNodeRetryMap) { try { @@ -292,6 +290,9 @@ export class Replayer { } } + this.virtualDom.destroyTree(); + this.usingVirtualDom = false; + this.constructedStyleMutations.forEach((data) => { this.applyStyleSheetMutation(data); }); From 69158a57dfa8046482827beac6bdf1f721fb2ac5 Mon Sep 17 00:00:00 2001 From: d0ugal Date: Wed, 18 Mar 2026 12:57:04 +0000 Subject: [PATCH 2/2] Apply formatting changes --- .changeset/fix-virtual-dom-backward-skip.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/fix-virtual-dom-backward-skip.md b/.changeset/fix-virtual-dom-backward-skip.md index 47cc00a86c..fc67e486a8 100644 --- a/.changeset/fix-virtual-dom-backward-skip.md +++ b/.changeset/fix-virtual-dom-backward-skip.md @@ -1,5 +1,5 @@ --- -'rrweb': patch +"rrweb": patch --- Fix playback stopping when skipping backwards with useVirtualDom enabled