github rrweb-io/rrweb @rrweb/record@2.2.0

4 hours ago

Minor Changes

  • #1928 9b9a1ff Thanks @Juice10! - Add a top-level annotation event with record.addAnnotation() and replayer.on('annotation', handler). Annotation data uses type: 'caption' or type: 'timelineMarker'. Import annotationData from @rrweb/types to type annotation data. The player can display these annotations as captions and interactive timeline markers.

Patch Changes

  • #1971 235ae85 Thanks @eoghanmurray! - Fix record-side memory leaks and duplicate mutation emission:

    • Stopping a recording now releases the root document's mutation buffer and observer — previously the document observer was only disconnected, so each start/stop cycle leaked one buffer — and removes the cross-origin iframe message listener.
    • A same-origin iframe is observed once instead of re-observed on every full snapshot (checkoutEveryNth/checkoutEveryNms/manual takeFullSnapshot), so a single iframe mutation is no longer emitted once per checkout; its observers are also released when the iframe is removed or navigates away.
    • The untainted-MutationObserver helper iframe used on WebKit/Safari is reference-counted, so it is torn down only when the last observer stops and will get rebuilt for a later recording.
  • #1958 009b2dd Thanks @salzahrani-salla! - fix: disconnect shadow-DOM observers when their host is removed

    Each observed shadow root kept a live MutationObserver plus its mutation buffer for the rest of the recording session even if its host was removed, a memory leak problem for component-heavy pages. Fix: release shadow observers and buffers as soon as we observe them as removed/detached from dom with tests added for the still-attached host-moved case, and to ensure they get re-observed on reinsertion.

  • #1958 009b2dd Thanks @salzahrani-salla! - fix: release removed shadow trees from the mirror

    Removing a shadow host from DOM was leaving references to shadow descendants, so e.g. repeatedly replacing web components mem-leaked their detached trees. Fix by recursing into shadow roots during removal, including nested hosts and releasing strong references from the mirror.

  • Updated dependencies [9b9a1ff, 235ae85, 009b2dd]:

    • rrweb@2.2.0
    • @rrweb/types@2.2.0
    • @rrweb/utils@2.2.0

Don't miss a new rrweb release

NewReleases is sending notifications on new releases.