From 0da1909313577b889f4fad1f210609c9df1dda14 Mon Sep 17 00:00:00 2001 From: Amir Mujacic Date: Sat, 25 Jul 2026 09:37:38 +0200 Subject: [PATCH 1/2] fix(unreal): Add Unreal (gaming platforms) to supported replay categories --- static/app/data/platformCategories.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/static/app/data/platformCategories.tsx b/static/app/data/platformCategories.tsx index 7830502b35a0..9199c8c6229e 100644 --- a/static/app/data/platformCategories.tsx +++ b/static/app/data/platformCategories.tsx @@ -717,11 +717,15 @@ export const replayMobilePlatforms: PlatformKey[] = [ 'cocoa-swift', ]; +// These are the gaming/engine platforms that can set up replay. +export const replayGamingPlatforms: PlatformKey[] = ['unreal']; + // These are all the platforms that can set up replay. export const replayPlatforms: readonly PlatformKey[] = [ ...replayFrontendPlatforms, ...replayBackendPlatforms, ...replayMobilePlatforms, + ...replayGamingPlatforms, ]; /** From 71b281cd9feca3af50f8508f11ac1a953a001b34 Mon Sep 17 00:00:00 2001 From: Amir Mujacic Date: Sat, 25 Jul 2026 10:42:20 +0200 Subject: [PATCH 2/2] Add session replay onboarding docs --- .../components/replaysOnboarding/sidebar.tsx | 13 ++- static/app/data/platformCategories.tsx | 1 + .../app/gettingStartedDocs/unreal/index.tsx | 2 + .../unreal/sessionReplay.tsx | 79 +++++++++++++++++++ 4 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 static/app/gettingStartedDocs/unreal/sessionReplay.tsx diff --git a/static/app/components/replaysOnboarding/sidebar.tsx b/static/app/components/replaysOnboarding/sidebar.tsx index f7281b8e6dd7..70cf93e0514b 100644 --- a/static/app/components/replaysOnboarding/sidebar.tsx +++ b/static/app/components/replaysOnboarding/sidebar.tsx @@ -26,6 +26,7 @@ import {TextOverflow} from 'sentry/components/textOverflow'; import { replayBackendPlatforms, replayFrontendPlatforms, + replayGamingPlatforms, replayJsLoaderInstructionsPlatformList, replayMobilePlatforms, replayOnboardingPlatforms, @@ -218,6 +219,12 @@ function OnboardingContent({ currentProject.platform && replayBackendPlatforms.includes(currentProject.platform); const mobilePlatform = currentProject.platform && replayMobilePlatforms.includes(currentProject.platform); + const gamingPlatform = + currentProject.platform && replayGamingPlatforms.includes(currentProject.platform); + // Mobile SDKs and gaming engines record replays as video: they use their own + // native replay onboarding (not the browser JS-loader flow) and don't expose + // the rrweb mask/block toggles. + const nativeReplayPlatform = mobilePlatform || gamingPlatform; const npmOnlyFramework = currentProject.platform && replayFrontendPlatforms @@ -313,7 +320,7 @@ function OnboardingContent({ /> ) : ( - !mobilePlatform && + !nativeReplayPlatform && (docs?.platformOptions?.siblingOption || docs?.platformOptions?.packageManager) && !isProjKeysLoading && ( @@ -399,7 +406,7 @@ function OnboardingContent({ {radioButtons} !['javascript-backbone'].includes(p)), ...replayBackendPlatforms, ...replayMobilePlatforms, + ...replayGamingPlatforms, ]; // These are the supported replay platforms that can also be set up using the JS loader. diff --git a/static/app/gettingStartedDocs/unreal/index.tsx b/static/app/gettingStartedDocs/unreal/index.tsx index c52f302fd9e9..62dee282fb04 100644 --- a/static/app/gettingStartedDocs/unreal/index.tsx +++ b/static/app/gettingStartedDocs/unreal/index.tsx @@ -3,10 +3,12 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {crashReport} from './crashReport'; import {logs} from './logs'; import {onboarding} from './onboarding'; +import {sessionReplay} from './sessionReplay'; export const docs: Docs = { onboarding, feedbackOnboardingCrashApi: crashReport, crashReportOnboarding: crashReport, + replayOnboarding: sessionReplay, logsOnboarding: logs, }; diff --git a/static/app/gettingStartedDocs/unreal/sessionReplay.tsx b/static/app/gettingStartedDocs/unreal/sessionReplay.tsx new file mode 100644 index 000000000000..578a20e5b32d --- /dev/null +++ b/static/app/gettingStartedDocs/unreal/sessionReplay.tsx @@ -0,0 +1,79 @@ +import {ExternalLink} from '@sentry/scraps/link'; + +import type {OnboardingConfig} from 'sentry/components/onboarding/gettingStartedDoc/types'; +import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/types'; +import {t, tct} from 'sentry/locale'; + +const getConfigureIniSnippet = () => `[/Script/Sentry.SentrySettings] +AttachSessionReplay=True`; + +export const sessionReplay: OnboardingConfig = { + install: () => [ + { + type: StepType.INSTALL, + content: [ + { + type: 'text', + text: tct( + 'Session Replay is available in the Sentry Unreal Engine SDK. Make sure the Sentry plugin is installed and configured by following the [link:Unreal Engine setup guide] before enabling Session Replay.', + { + link: , + } + ), + }, + { + type: 'alert', + alertType: 'info', + showIcon: false, + text: t('Session Replay for Unreal Engine is currently experimental.'), + }, + ], + }, + ], + configure: () => [ + { + type: StepType.CONFIGURE, + content: [ + { + type: 'text', + text: tct( + 'Enable Session Replay from the Sentry configuration window by going to [strong:Project Settings > Plugins > Sentry] and toggling the [strong:Enable session replay (experimental)] option.', + {strong: } + ), + }, + { + type: 'text', + text: t( + 'Alternatively, you can enable Session Replay by adding the following to your project config file:' + ), + }, + { + type: 'code', + language: 'ini', + code: getConfigureIniSnippet(), + }, + { + type: 'text', + text: tct( + 'You can tune the replay duration, target framerate, and target bitrate from the same settings window. For the full list of options, see the [link:Session Replay documentation].', + { + link: ( + + ), + } + ), + }, + { + type: 'alert', + alertType: 'warning', + showIcon: false, + text: t( + 'Unlike our browser and mobile SDKs, the Unreal Engine SDK does not automatically mask sensitive content in the recorded footage. Make sure no sensitive information is displayed while Session Replay is enabled.' + ), + }, + ], + }, + ], + verify: () => [], + nextSteps: () => [], +};