Changelog¶
2026/09/16¶
Browser SDK 3.3.16 additions and optimizations:
- The full RUM and slim RUM packages support reusing the App's Visitor ID in WebViews.
When
visitorId.enabledis enabled, the current domain passes the native bridge allowlist check, and the App provides the synchronousFTWebViewJavascriptBridge.getVisitorid()interface and returns a valid identifier, the XHR and Fetch request headers that match the rules and the RUMcontext.visitor_iduse this identifier first; when the bridge is unavailable, the returned value is invalid, or reading fails, the SDK falls back to the original web identifier. The validity and rotation of the native identifier are managed by the App; when a valid native identifier is read, the webresetVisitorId()does not rotate the ID separately. Using this capability requires a companion mobile SDK that supports this interface. - Optimized the reporting timing of the first View: Views generated by the initial page and each route change are scheduled for reporting as soon as they first meet the sampling and sending conditions, without waiting for the batch sending interval; subsequent updates are still merged and reported at the original cadence. When the page is hidden or the user exits, the latest state of each View is retained, and compressed upload and degradation on compression failure are supported, reducing View loss during short visits and rapid page switching.
- Fixed the interaction between forced Sessions and error compensation sampling. After calling
setForcedSession()orstartSessionReplayRecording({ force: true }), the current Session's RUM data and any started Replay can be reported without waiting for an error, and existing error replay buffers are released. Also fixed cross-tab Session switching, the renewal boundary when expiration is delayed, and error marking and compensation reporting for new Sessions after a forced Session ends.setForcedSession()itself does not start Replay recording; subsequent Sessions still follow the configured sampling rules. - Fixed the issue where some JavaScript errors only had an error message and lacked location information. When
Error.stackcannot be parsed into stack frames, the script URL, line number, and available column number provided by the browser throughwindow.onerrorare retained, covering scenarios such as script syntax errors; existing stacks remain unchanged, and location information not provided by the browser is not fabricated. - Fixed the issue where large stylesheets could be lost in Session Replay. When the combined DOM and CSS do not exceed the full snapshot capacity limit, larger external and inline CSS are retained, reducing missing replay styles caused by limits on individual stylesheet rule count, character count, processing time, or ordinary string length. Privacy handling and overall capacity protection remain in place; when a stylesheet cannot be read or exceeds the capacity, the existing degradation logic is applied.
- Corrected the public TypeScript declarations of Core, full RUM, slim RUM, and Logs to align them with the runtime APIs. The full
and slim RUM packages support direct import of
TraceType, andtraceTypeaccepts supported string values; legacy configuration aliases, public type exports, the Logs'all'forwarding configuration, and log level method declarations have been completed, reducing type errors for existing valid usage. - Corrected the
Content-Typeof JSON reporting requests toapplication/json;charset=UTF-8, covering compressed upload scenarios as well. - Added a performance evaluation report and performance self-check guides for CDN and npm integration to the SDK repository, all
collected under the
performance/directory, making it easier to evaluate the SDK's impact on page performance.
2026/09/07¶
RUM SDK 3.3.15 additions and optimizations:
- Added the
visitorIdconfiguration, which injects a stable anonymous visitor identifier into matching XHR and Fetch requests and associates the value in the RUMcontext.visitor_id. It supports same-origin string prefixes, regular expressions, and function matching, as well as TTL, storage degradation, andresetVisitorId()rotation; it does not depend on Session or Distributed Tracing sampling. Visitor ID - Visitor ID preserves request semantics in Fetch parameters and XHR synchronous callbacks, and unmatched requests retain their original custom headers; rotation at the same timestamp does not restore the old degraded ID or occupy resource-related headers, and prevents View/event context from overwriting the SDK identifier.
- Fixed the retention of custom request headers for cross-iframe
Request, duplicate identifiers when retrying after a synchronous XHR failure, and Visitor ID initialization compatibility when nativeWeakSetis unavailable; added identifiers to events buffered before initialization, and avoided repeatedly deep-copying global fields every time the RUM public context is read.
2026/08/31¶
RUM SDK 3.3.14 additions and optimizations:
- Added the
enablePrivacyForActionNameconfiguration, disabled by default. When enabled, automatic Action names follow DOM privacy levels: masked content uses fixed placeholder names, private form fields do not leak text or standard naming attributes, and clicks in hidden subtrees do not generate automatic Actions; explicitly specified custom names remain usable on non-hidden nodes. User Actions
2026/08/28¶
Additions and optimizations in subsequent RUM SDK versions:
- Added support for distinguishing Windows 10 from Windows 11 via
platformVersionwhen the browser provides User-Agent Client Hints, and ensures that the first batch of RUM data uses the same system version information; when the browser does not support this capability, refuses to return high-entropy values, or the query times out, the traditional User-Agent continues to be used. RUM Data Structure
2026/08/26¶
RUM SDK 3.3.11 additions and optimizations:
- Fixed Session Replay's recognition of cross-iframe JavaScript realm elements in micro-frontends such as Wujie: native form inputs,
DOM mutations, and started Canvas recording created by the iframe realm and mounted to the open ShadowRoot of the current page can
now be included in replay normally; property assignments such as
value,checked, andselectedIndexon form elements can also be recorded. In Canvas command capture mode, cross-realm Canvas automatically falls back to bitmap snapshots. This capability does not include iframe internal documents or closed Shadow DOM. Session Replay Access Instructions
RUM SDK 3.3.10 additions and optimizations:
- Automatic Actions now support clicked elements inside open Shadow DOM, including elements created by an iframe's JavaScript realm and then mounted to a ShadowRoot (for example, Wujie micro-frontends). The SDK generates names and locating information with Shadow boundaries based on the actual click target, and avoids mistaking the aggregated text of containers such as table rows and cards as Action names; Closed Shadow DOM remains restricted by the browser's encapsulation boundaries. User Actions
2026/08/25¶
RUM SDK 3.3.9 additions and optimizations:
- SPA
route_changeViews support the Chrome Soft Navigation API. When natively supported by the browser, route changes can add FCP, LCP, LCP element selector, andview_navigation_type; when the native API is not supported, Route Views continue to be created through the Navigation API, History API, or hash routing compatibility logic, preserving thepush,replace, andtraversenavigation types without supplementing FCP/LCP for that route. RUM Data Structure - Fixed the issue where View data might be delayed for a long time during continuous page updates, ensuring that when a pending View is updated, it still uses the original batch's reporting deadline and reports the latest data at the existing sending interval.
2026/08/20¶
RUM SDK 3.3.8 additions and optimizations:
- Added the segment end page path field
resource_websocket_end_view_pathfor WebSocket Resources; the segment start path reuses the standard fieldview_path, so you can filter by the connection start or end page in the Resource Explorer. WebSocket Long-Connection Tracking
2026/08/11¶
RUM SDK 3.3.7 additions and optimizations:
- Added an optional WebGL/WebGL2 Session Replay plugin supporting NPM and CDN integration, which records game and visualization frames through draw-driven, budget-constrained pixel snapshots. The WebGL implementation is split from the main RUM package, so applications that do not use WebGL do not need to include the plugin. Canvas Recording Guide
- Added the
allowTraceHeaderWithoutSessionconfiguration. When enabled, even if the current RUM Session is not sampled, trace headers can still be injected into XHR and Fetch requests matchingallowedTracingUrls; this does not create or force-enable a Session, nor does it report RUM data for the unsampled Session. Web Application Access - Optimized Canvas 2D automatic recording and command capture, adding more drawing APIs and states; fixed missed captures on partial or opacity changes, out-of-order asynchronous frames, incomplete coverage of scaled snapshots, and flickering caused by sending reset and bitmap separately. Multiple canvases use fair scheduling, mutation detection, and bounded concurrency to balance dynamic frame continuity and page performance. Canvas Recording Guide
- Optimized replay for large DOMs, dynamic Shadow DOM, and stylesheets. Large snapshots and burst DOM mutations use chunking, atomic commits, and baseline recovery, reducing page jitter caused by node moves being split into "remove then add" operations, as well as missing styles for large elements or CSS. Session Replay Access Instructions
- Enhanced compressed upload and Session Replay transport reliability: when the compression Worker encounters an exception, the SDK automatically falls back to uncompressed upload to avoid losing RUM data such as View, Action, Error, and Resource; it also preserves the Replay baseline and subsequent segment order during encoding backpressure, network retries, and page exit, reducing incomplete or missing replays.
- Fixed query parameter parsing for Hash Router View URLs; parameters in
#/path?key=valueare now correctly written to the View URL Query. RUM Data Structure
Upgrade note: WebGL Replay is available starting from SDK
3.3.7and requires RUM main package version>= 3.3.7; it is recommended that the plugin and the main package use the same SDK release version. The plugin only works in Canvasautomode and must be registered atinit(), before the WebGL engine initializes; it does not provide GL command replay, frame-by-frame video, orOffscreenCanvasrecording.When Canvas 2D does not use a named quality preset, the default automatic capture interval/cooldown changes from
1000/1000 msto250/250 ms; thelow,medium, andhighpresets also adopt faster Canvas 2D scheduling. Dynamic frames will be smoother, but CPU, encoding, and upload overhead may increase. When WebGL is not explicitly configured with interval/cooldown, the more conservative GPU readback cadence is retained.A positive
replayCanvasSamplingvalue is used to select the snapshot path and does not represent the capture frequency; the frequency is controlled by interval, cooldown, and backoff. String presets forreplayCanvasQualityadjust quality, sampling, and the scheduling budget together, while numeric values only adjust encoding quality.
2026/07/29¶
RUM SDK 3.3.6 additions:
- Framework plugins for React, Vue, Angular, Next.js, and Nuxt, supporting View collection based on route templates and providing corresponding framework error entry points. Access Instructions
- Client-side integration for Next.js App Router, Pages Router, and Nuxt 3/4. SSR Access Instructions
- Experimental native WebSocket long-connection collection, aggregating connection statistics into RUM Resources. WebSocket Long-Connection Tracking
startView()now supports specifying the View URL throughurl, for use with manual Views and framework Router integration. Custom View- Added
startSession(), which supports immediately ending the current Session, re-running session sampling, and overridingsessionSampleRateat runtime. Sampling and Runtime Session Control
2026/06/30¶
RUM SDK 3.3.3 additions:
- Added the slim RUM SDK, supporting NPM and CDN integration. It retains regular RUM capabilities such as View, Resource, Long Task,
Error, Action, Context, custom events, and Distributed Tracing, but does not include Session Replay, Canvas recording, or
compressIntakeRequestsintake compression. Slim RUM SDK Access Instructions
2026/04/17¶
Added Canvas Session Replay recording. See also Added the Resource Hook feature. See also
2025/04/23¶
Added remoteConfiguration, which supports remote dynamic modification of data collection configuration.
2025/04/13¶
- Added the
shouldMaskNodeconfiguration to customize node masking for Session Replay. - Added the
sessionOnErrorSampleRateconfiguration, which collects only error session events. See also - Added the
sessionReplayOnErrorSampleRateconfiguration, which collects only error-related Session Replay data. See also
2022/9/29¶
Added the isIntakeUrl initialization parameter, which determines, based on the requested resource URL, whether to collect the
corresponding resource data; all resources are collected by default.
2022/3/10¶
- Added the
traceTypeconfiguration for the Distributed Tracing tool type. If not configured, it defaults toddtrace. Six types are currently supported:ddtrace,zipkin,skywalking_v3,jaeger,zipkin_single_header, andw3c_traceparent. - Added
allowedTracingOrigins, the list of all requests allowed to have the headers required by the Trace collector injected. The entries can be request origins or regular expressions. - The original
allowedDDTracingOriginsand the newallowedTracingOriginsprovide the same functional configuration. Either one can be configured; if both are configured,allowedTracingOriginstakes precedence overallowedDDTracingOrigins.
2021/5/20¶
- To support the V2 metric data changes, upgrade to a version after DataKit 1.1.7-rc0. For more details, see DataKit Configuration.
- The SDK has been upgraded to V2, and the CDN URL has changed to
https://static.truewatch.com/browser-sdk/v2/dataflux-rum.js. - Removed collection of the
rum_web_page_performance,rum_web_resource_performance,js_error, andpagemetric data, and added collection of theview,action,long_task, anderrormetric data. - Added the
trackInteractionsinitialization configuration, which enables Action (user behavior data) collection. It is disabled by default.