feat: add session replay support for react native#357
Merged
Conversation
3e1346c to
8b1fb92
Compare
sdk/@launchdarkly/react-native-ld-session-replay/android/src/main/AndroidManifest.xml
Dismissed
Show dismissed
Hide dismissed
...launchdarkly/react-native-ld-session-replay/example/android/app/src/main/AndroidManifest.xml
Dismissed
Show dismissed
Hide dismissed
...native-ld-session-replay/example/android/app/src/main/res/drawable/rn_edit_text_material.xml
Dismissed
Show dismissed
Hide dismissed
...native-ld-session-replay/example/android/app/src/main/res/drawable/rn_edit_text_material.xml
Dismissed
Show dismissed
Hide dismissed
...-replay/android/src/main/java/com/sessionreplayreactnative/SessionReplayReactNativeModule.kt
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayReactNative.mm
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayReactNative.mm
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayReactNative.mm
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/SessionReplayReactNative.podspec
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
Vadman97
reviewed
Feb 9, 2026
73e0355 to
cbb094f
Compare
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayAdapter.swift
Outdated
Show resolved
Hide resolved
… better readability
…apter - Refactored state handling in start and stop methods to ensure proper synchronization and prevent race conditions. - Enhanced logic to manage ldReplayState transitions more clearly, ensuring that stopping and starting behaviors are correctly handled in a thread-safe manner.
- Updated the state handling to set ldReplayState to .starting before invoking LDClient.start(), ensuring accurate detection of in-flight start and stop processes. - Removed redundant state assignment within the completion handler to streamline the logic and enhance clarity.
…mpletion callback
a54e553 to
c0cf2e0
Compare
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
...ReactNativeExample.xcodeproj/xcshareddata/xcschemes/SessionReplayReactNativeExample.xcscheme
Show resolved
Hide resolved
...ReactNativeExample.xcodeproj/xcshareddata/xcschemes/SessionReplayReactNativeExample.xcscheme
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
sdk/@launchdarkly/react-native-ld-session-replay/ios/SessionReplayClientAdapter.swift
Show resolved
Hide resolved
Merged
Vadman97
pushed a commit
that referenced
this pull request
Feb 23, 2026
🤖 I have created a release *beep* *boop* --- <details><summary>observability: 1.0.2</summary> ## [1.0.2](observability-1.0.1...observability-1.0.2) (2026-02-23) ### Dependencies * The following workspace dependencies were updated * dependencies * highlight.run bumped to 9.27.0 </details> <details><summary>session-replay: 1.0.2</summary> ## [1.0.2](session-replay-1.0.1...session-replay-1.0.2) (2026-02-23) ### Dependencies * The following workspace dependencies were updated * dependencies * highlight.run bumped to 9.27.0 </details> <details><summary>highlight.run: 9.27.0</summary> ## [9.27.0](highlight.run-9.26.1...highlight.run-9.27.0) (2026-02-23) ### Features * add session replay support for react native ([#357](#357)) ([7f6ed30](7f6ed30)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Version/changelog/manifest updates only; no source logic changes in this diff beyond consuming the new `highlight.run` release. > > **Overview** > **Release bump PR** updating published versions across the workspace. > > Bumps `highlight.run` from `9.26.1` to `9.27.0` (changelog notes React Native session replay support), and bumps `@launchdarkly/observability` and `@launchdarkly/session-replay` from `1.0.1` to `1.0.2` to pick up the updated `highlight.run` dependency; manifests and changelogs are updated accordingly. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 27f0e71. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
Merged
Vadman97
pushed a commit
that referenced
this pull request
Feb 23, 2026
🤖 I have created a release *beep* *boop* --- <details><summary>session-replay-react-native: 0.2.0</summary> ## [0.2.0](session-replay-react-native-0.1.0...session-replay-react-native-0.2.0) (2026-02-23) ### Features * add session replay support for react native ([#357](#357)) ([7f6ed30](7f6ed30)) ### Bug Fixes * **session-replay-react-native:** session replay start with options enabled/disabled ([#386](#386)) ([d012adc](d012adc)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Release metadata-only changes (version bump + changelog) with no runtime code modifications, so behavioral risk is low. > > **Overview** > Updates the Release Please manifest and `@launchdarkly/session-replay-react-native` package version from `0.1.0` to `0.2.0`. > > Adds a new `CHANGELOG.md` entry for `0.2.0`, documenting React Native session replay support and a fix for starting session replay when options enable/disable it. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ab97259. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implement support for session replay into react native through swift-observability-sdk
How did you test this change?
e2e testing, example app is provided
Are there any deployment considerations?
it is a front-end package for building mobile apps
Note
Medium Risk
Introduces new native mobile build artifacts and a new iOS session-replay startup path (including offline SDK initialization), which may affect app build/config and runtime behavior; Android support is explicitly non-functional but present.
Overview
Adds a new
@launchdarkly/session-replay-react-nativeworkspace package that exposesconfigureSessionReplay/startSessionReplay/stopSessionReplayand anLDPluginadapter (createSessionReplayPlugin) to initialize session replay from LaunchDarkly React Native client metadata.Implements the native bridge: iOS uses a Swift
SessionReplayClientAdapter+ TurboModule ObjC++ wrapper to start an offline SwiftLDClientwithObservability+SessionReplayplugins and toggleLDReplayenablement; Android is stubbed to reject calls as not supported.Includes a full React Native example app (iOS/Android projects, env setup) and adds repo/tooling tweaks: pin
turboto2.8.7viaresolutions, changeobservability-sharedtests tovitest run, and add Lefthook configuration (root example + package-specific hooks).Written by Cursor Bugbot for commit de1939b. This will update automatically on new commits. Configure here.