You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Android] TTID (Time to Initial Display) is never emitted on Android despite native initialization and v3 SDK upgrade #1314
After upgrading @datadog/mobile-react-native from 2.14.1 to 3.5.1 (which embeds dd-sdk-android:3.10.0) to unlock Mobile Vitals/TTID metrics, Android TTID (time_to_initial_display) is completely missing / never emitted.
iOS TTID works flawlessly out of the box. On Android, while initial native views (ApplicationLaunch + MainActivity) are correctly created and other mobile vitals like slow_frames / frozen_frames are streaming normally, the core time_to_initial_display attribute remains persistently absent.
Reproduction steps
Setup an Expo project using SDK 51+ with @datadog/mobile-react-native v3.5.1.
Initialize the Datadog SDK natively inside MainApplication.onCreate using an Expo Config Plugin before the React Native bridge starts.
Configure Datadog with nativeViewTracking: true and the new V3 FileBasedConfiguration.
Build the Android app locally or via EAS (eas build --profile production --platform android --local).
Open the app on an Android device, trigger initial views, and inspect the RUM Explorer via Datadog dashboard.
SDK logs
Expected behavior
According to the Datadog documentation, once native initialization is properly configured before the RN runtime starts, the Android SDK should capture the application launch lifecycle and emit the time_to_initial_display metric for the initial view.
Affected SDK versions
3.5.1
Latest working SDK version
None (Upgraded from 2.14.1 which did not support this feature)
Did you confirm if the latest SDK version fixes the bug?
Using Expo Managed Workflow. The native setup is dynamically injected via a custom Expo Config Plugin (withDatadogNativeInit.ts) that adds the required Datadog native initialization code directly into MainApplication.onCreate before the React Native host starts.
Device Information
Device: Samsung Galaxy S25 Ultra (SM-S938B)
OS Version: Android 15
Network State: Wifi / Cellular
Other relevant information
Summary of the current behavior observed via Datadog RUM (MCP):
Category
iOS
Android
View Tracking (ApplicationLaunch / MainActivity)
✅ Success
✅ Success
Mobile Vitals (slow_frames / frozen_frames)
✅ Success
✅ Success
time_to_initial_display (TTID)
✅ Success
❌ Never Emitted
Additional Findings:
We noticed that while the underlying dd-sdk-android (v3.10.0) contains multiple upstream TTID fixes (such as #2921, #3031, #3173, #3199), the issue seems to stem from how the React Native wrapper layer interacts with or consumes these native events during startup in a modern React 19 / architecture context.
This looks highly related to the auto-closed issue #1214 where a similar gap was reported but closed due to inactivity without explicit confirmation of a fix.
TTID and TTFD are not yet officially supported on the Datadog RN SDK. TTID works on iOS by default as it is due to how it operates on the native iOS SDK, but the SDK is not yet prepared to support it on Android when initializing the SDK from JS/TS.
This feature is already in our pipeline and actively being worked on, so it will be added to the SDK shortly.
However, it should work when initializing the SDK natively as you mention. Can you please share a bit more about your setup?, or perhaps a minimum reproduction sample app?, it would be particularly interesting to see how and when you are performing the native initialization.
Hi @sbarrio, we're seeing the same Android TTID gap on @datadog/mobile-react-native@3.5.1 (bundled natives: iOS 3.11.0, Android 3.10.0), RN 0.85.3, Expo 56.
Native init (Android): Expo config plugin injects DdSdkNativeInitialization.initFromNative(this.applicationContext) right after super.onCreate() in MainApplication, and writes datadog-configuration.json to app assets at prebuild. JS uses FileBasedConfiguration with the same config, including nativeViewTracking: true. iOS is JS-only (TTID works there).
Observed in RUM:
✅ ApplicationLaunch / MainActivity views on Android
✅ slow_frames / frozen_frames on Android
❌ @vital.name:time_to_initial_display never emitted on Android (works on iOS)
Questions:
When JS init runs after native init, does the second datadog.initialize() + Rum.enable() discard the TTID measurement from process launch?
Is Android TTID expected to work on 3.5.1 with native init, or is RN-wrapper support still pending?
Any guidance on whether this is a known RN-wrapper limitation vs. something misconfigured on our side would be very helpful. Thanks 🙇!
Again, and as mentioned above, TTID and TTFD are not yet supported by the RN SDK. We are currently implementing it and will be released in a future release soon. What you are seeing is the native iOS/Android SDKs reporting their own TTID calculations, which show up on iOS but not on Android (unless native initialization of the RN SDK takes place early enough). This is not the expected
When JS init runs after native init, does the second datadog.initialize() + Rum.enable() discard the TTID measurement from process launch?
The JS layer and the RN SDK do not alter the TTID calculation in any way at the moment. What you see is being tracked by the native SDK alone.
Is Android TTID expected to work on 3.5.1 with native init, or is RN-wrapper support still pending?
No, it will be supported properly in the near future.
However, it should work when initializing the SDK natively as you mention. Can you please share a bit more about your setup?,
I'm a bit confused by this comment. My understanding is that you're saying it should work on Android if the SDK is initialized natively, even when using the React Native SDK. That's actually how we're currently setting it up, as I described above.
No, it will be supported properly in the near future.
Above comment seems to contradict your latest reply here.
Are you saying that it should work today only if we use the native Android SDK directly and initialize it ourselves, rather than using the React Native SDK and initilizing it natively? Or should it already work with the React Native SDK as long as the native initialization is done correctly?
However, it should work when initializing the SDK natively as you mention. Can you please share a bit more about your setup?,
I'm a bit confused by this comment. My understanding is that you're saying it should work on Android if the SDK is initialized natively, even when using the React Native SDK. That's actually how we're currently setting it up, as I described above.
No, it will be supported properly in the near future.
Above comment seems to contradict your latest reply here.
Are you saying that it should work today only if we use the native Android SDK directly and initialize it ourselves, rather than using the React Native SDK and initilizing it natively? Or should it already work with the React Native SDK as long as the native initialization is done correctly?
Sorry, I may not have been clear enough before.
So, TTID and TTFD are not yet officially supported on React Native apps using the Datadog RN SDK.
However, the native Datadog SDKs already introduced this, and as every other metric tracked by them it is being reported for React Native apps, and being shown on the Datadog Dashboard whenever available.
The problem here is that this was not properly linked with React Native, so the support is inconsistent on React Native apps at the moment, and not how this feature will look like once we properly support the feature at RN level.
On iOS, due to how the feature is built it works without any other tweak nor specific configuration from RN.
On Android, for most apps initializing from JS it should not report the metric, as this feature relies on the SDK being initialized very early on the app lifecycle, which most apps using JS instrumentation on RN won't do. However, if for some reason the host app integrating the SDK relies on native initialization (as you have reported happens on your apps), and such initialization is carried early enough, TTID may be being tracked through the native SDK's normal flow. Since this is known to work, and since you were reporting problems on that specific scenario I was asking for more information on your specific issue, to be able to debug it properly.
So, in summary, the feature is not yet properly supported on RN. IMHO it should still not even be reported on the Dashboard to avoid confusion, but since there's a specific case on which it does report values on Android I wanted to get the full picture to better understand the situation, as it may suppose a real problem on Expo-based apps which will affect the real implementation of the feature on RN.
Thanks @sbarrio for clarifying. Would you be able to share a rough ETA (or target release) for proper TTID/TTFD support in this React Native sdk, especially on Android? Even a quarter-level estimate would help us decide whether to wait for the official RN integration or invest further in workaround metrics on our side.
Hey @sbarrio, just checking if DataDog/dd-sdk-android#3635 is the PR for Android TTID metric support discussed here? (Wanted to reference it here to track the RN SDK release date.)
Hi @szarbartosz Indeed, that's the PR that will enable TTID reporting for the RN SDK. We'll need to get that merged (and released) first, and then this PR will enable the feature on the React Native SDK side.
We'll keep you posted as soon as it releases, thanks for your patience 🙇
Activity
sbarrio commentedon Jun 22, 2026
Hi @nht-spect, thanks for reaching out.
TTID and TTFD are not yet officially supported on the Datadog RN SDK. TTID works on iOS by default as it is due to how it operates on the native iOS SDK, but the SDK is not yet prepared to support it on Android when initializing the SDK from JS/TS.
This feature is already in our pipeline and actively being worked on, so it will be added to the SDK shortly.
However, it should work when initializing the SDK natively as you mention. Can you please share a bit more about your setup?, or perhaps a minimum reproduction sample app?, it would be particularly interesting to see how and when you are performing the native initialization.
Thanks again 🙇
hoangman1108 commentedon Jun 22, 2026
@sbarrio, is there any legacy version that supports TTID and TTFD for android devices?
sbarrio commentedon Jun 22, 2026
No, TTID and TTFD is a new feature for v3 only. Since it was recently added to the native SDKs the RN SDK is still playing catch up.
binhnguyen-moonbase commentedon Jun 22, 2026
Hi @sbarrio, we're seeing the same Android TTID gap on
@datadog/mobile-react-native@3.5.1(bundled natives: iOS 3.11.0, Android 3.10.0), RN 0.85.3, Expo 56.Native init (Android): Expo config plugin injects
DdSdkNativeInitialization.initFromNative(this.applicationContext)right aftersuper.onCreate()inMainApplication, and writesdatadog-configuration.jsonto app assets at prebuild. JS usesFileBasedConfigurationwith the same config, includingnativeViewTracking: true. iOS is JS-only (TTID works there).Observed in RUM:
ApplicationLaunch/MainActivityviews on Androidslow_frames/frozen_frameson Android@vital.name:time_to_initial_displaynever emitted on Android (works on iOS)Questions:
datadog.initialize()+Rum.enable()discard the TTID measurement from process launch?Any guidance on whether this is a known RN-wrapper limitation vs. something misconfigured on our side would be very helpful. Thanks 🙇!
sbarrio commentedon Jun 23, 2026
Hi @binhnguyen-moonbase,
Again, and as mentioned above, TTID and TTFD are not yet supported by the RN SDK. We are currently implementing it and will be released in a future release soon. What you are seeing is the native iOS/Android SDKs reporting their own TTID calculations, which show up on iOS but not on Android (unless native initialization of the RN SDK takes place early enough). This is not the expected
The JS layer and the RN SDK do not alter the TTID calculation in any way at the moment. What you see is being tracked by the native SDK alone.
binhnguyen-moonbase commentedon Jun 23, 2026
Hi @sbarrio, thanks for the response!
I'm a bit confused by this comment. My understanding is that you're saying it should work on Android if the SDK is initialized natively, even when using the React Native SDK. That's actually how we're currently setting it up, as I described above.
Above comment seems to contradict your latest reply here.
Are you saying that it should work today only if we use the native Android SDK directly and initialize it ourselves, rather than using the React Native SDK and initilizing it natively? Or should it already work with the React Native SDK as long as the native initialization is done correctly?
sbarrio commentedon Jun 23, 2026
Sorry, I may not have been clear enough before.
So, TTID and TTFD are not yet officially supported on React Native apps using the Datadog RN SDK.
However, the native Datadog SDKs already introduced this, and as every other metric tracked by them it is being reported for React Native apps, and being shown on the Datadog Dashboard whenever available.
The problem here is that this was not properly linked with React Native, so the support is inconsistent on React Native apps at the moment, and not how this feature will look like once we properly support the feature at RN level.
On iOS, due to how the feature is built it works without any other tweak nor specific configuration from RN.
On Android, for most apps initializing from JS it should not report the metric, as this feature relies on the SDK being initialized very early on the app lifecycle, which most apps using JS instrumentation on RN won't do. However, if for some reason the host app integrating the SDK relies on native initialization (as you have reported happens on your apps), and such initialization is carried early enough, TTID may be being tracked through the native SDK's normal flow. Since this is known to work, and since you were reporting problems on that specific scenario I was asking for more information on your specific issue, to be able to debug it properly.
So, in summary, the feature is not yet properly supported on RN. IMHO it should still not even be reported on the Dashboard to avoid confusion, but since there's a specific case on which it does report values on Android I wanted to get the full picture to better understand the situation, as it may suppose a real problem on Expo-based apps which will affect the real implementation of the feature on RN.
Hope that made it a bit more clear 🙇
binhnguyen-moonbase commentedon Jun 23, 2026
Thanks @sbarrio for clarifying. Would you be able to share a rough ETA (or target release) for proper TTID/TTFD support in this React Native sdk, especially on Android? Even a quarter-level estimate would help us decide whether to wait for the official RN integration or invest further in workaround metrics on our side.
sbarrio commentedon Jun 24, 2026
@binhnguyen-moonbase We can't share anything too specific, but the aim is to release this at some point during Q3.
szarbartosz commentedon Aug 18, 2026
Hey @sbarrio, just checking if DataDog/dd-sdk-android#3635 is the PR for Android TTID metric support discussed here? (Wanted to reference it here to track the RN SDK release date.)
sbarrio commentedon Aug 31, 2026
Hi @szarbartosz Indeed, that's the PR that will enable TTID reporting for the RN SDK. We'll need to get that merged (and released) first, and then this PR will enable the feature on the React Native SDK side.
We'll keep you posted as soon as it releases, thanks for your patience 🙇