feat(tracing): Add Sentry.NavigationContainer wrapper for React Navigation#6199
feat(tracing): Add Sentry.NavigationContainer wrapper for React Navigation#6199antonis wants to merge 13 commits into
Conversation
…ation Drop-in replacement for NavigationContainer that automatically wires up reactNavigationIntegration, removing the manual ref/onReady boilerplate that is a recurring source of misconfiguration. Closes #6065 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Semver Impact of This PR⚪ None (no version bump detected) 📋 Changelog PreviewThis is how your changes will appear in the changelog.
🤖 This preview updates automatically when you update the PR. |
|
…nContainer Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…n-container # Conflicts: # CHANGELOG.md
📲 Install BuildsAndroid
|
Android (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 3ce5254+dirty | 410.57 ms | 448.48 ms | 37.91 ms |
| 3b6e9f9+dirty | 442.70 ms | 486.44 ms | 43.74 ms |
| 4e0ba9c+dirty | 452.84 ms | 473.36 ms | 20.52 ms |
| 4966363+dirty | 400.04 ms | 431.08 ms | 31.04 ms |
| 5125c43+dirty | 497.18 ms | 543.78 ms | 46.60 ms |
| a5d243c+dirty | 424.52 ms | 485.18 ms | 60.66 ms |
| 3817909+dirty | 406.67 ms | 416.58 ms | 9.91 ms |
| 71abba0+dirty | 496.54 ms | 525.16 ms | 28.63 ms |
| 5fe1c6c+dirty | 401.62 ms | 445.28 ms | 43.66 ms |
| c823bb5+dirty | 409.87 ms | 478.57 ms | 68.70 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 3ce5254+dirty | 43.75 MiB | 48.12 MiB | 4.37 MiB |
| 3b6e9f9+dirty | 48.30 MiB | 53.54 MiB | 5.23 MiB |
| 4e0ba9c+dirty | 48.30 MiB | 53.49 MiB | 5.19 MiB |
| 4966363+dirty | 48.30 MiB | 53.54 MiB | 5.24 MiB |
| 5125c43+dirty | 48.30 MiB | 53.54 MiB | 5.24 MiB |
| a5d243c+dirty | 48.30 MiB | 53.54 MiB | 5.23 MiB |
| 3817909+dirty | 43.75 MiB | 48.08 MiB | 4.33 MiB |
| 71abba0+dirty | 48.30 MiB | 53.49 MiB | 5.19 MiB |
| 5fe1c6c+dirty | 43.75 MiB | 48.14 MiB | 4.39 MiB |
| c823bb5+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
Previous results on branch: feat/sentry-navigation-container
Startup times
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b941fc4+dirty | 458.94 ms | 503.52 ms | 44.58 ms |
| 161ef26+dirty | 419.96 ms | 463.76 ms | 43.80 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b941fc4+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
| 161ef26+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
iOS (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 7d8c8bd+dirty | 3837.24 ms | 1215.51 ms | -2621.73 ms |
| bc0d8cf+dirty | 3830.33 ms | 1220.52 ms | -2609.81 ms |
| df5d108+dirty | 1225.90 ms | 1220.14 ms | -5.76 ms |
| 7d6fd3a+dirty | 1223.29 ms | 1229.57 ms | 6.28 ms |
| 0d9949d+dirty | 1211.38 ms | 1219.67 ms | 8.29 ms |
| 5c1e987+dirty | 1204.30 ms | 1222.15 ms | 17.85 ms |
| b0d3373+dirty | 3831.75 ms | 1227.29 ms | -2604.46 ms |
| 3817909+dirty | 1183.90 ms | 1187.50 ms | 3.60 ms |
| 3ce5254+dirty | 1219.93 ms | 1221.90 ms | 1.96 ms |
| 04207c4+dirty | 1191.27 ms | 1189.78 ms | -1.48 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 7d8c8bd+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| bc0d8cf+dirty | 5.15 MiB | 6.67 MiB | 1.51 MiB |
| df5d108+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 7d6fd3a+dirty | 3.38 MiB | 4.77 MiB | 1.39 MiB |
| 0d9949d+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 5c1e987+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| b0d3373+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 3817909+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 3ce5254+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 04207c4+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
Previous results on branch: feat/sentry-navigation-container
Startup times
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b941fc4+dirty | 3842.59 ms | 1224.66 ms | -2617.93 ms |
| 161ef26+dirty | 3833.45 ms | 1215.96 ms | -2617.49 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b941fc4+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 161ef26+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
iOS (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 7d8c8bd+dirty | 3847.98 ms | 1230.77 ms | -2617.21 ms |
| bc0d8cf+dirty | 3834.64 ms | 1223.91 ms | -2610.73 ms |
| df5d108+dirty | 1207.34 ms | 1210.50 ms | 3.16 ms |
| 7d6fd3a+dirty | 1210.89 ms | 1217.63 ms | 6.74 ms |
| 0d9949d+dirty | 1203.94 ms | 1202.27 ms | -1.67 ms |
| 5c1e987+dirty | 1208.43 ms | 1220.72 ms | 12.29 ms |
| b0d3373+dirty | 3842.49 ms | 1218.49 ms | -2624.00 ms |
| 3817909+dirty | 1210.76 ms | 1215.64 ms | 4.89 ms |
| 3ce5254+dirty | 1217.70 ms | 1224.69 ms | 6.99 ms |
| 04207c4+dirty | 1228.55 ms | 1226.04 ms | -2.51 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 7d8c8bd+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| bc0d8cf+dirty | 5.15 MiB | 6.67 MiB | 1.51 MiB |
| df5d108+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 7d6fd3a+dirty | 3.38 MiB | 4.77 MiB | 1.39 MiB |
| 0d9949d+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 5c1e987+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| b0d3373+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 3817909+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 3ce5254+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 04207c4+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
Previous results on branch: feat/sentry-navigation-container
Startup times
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b941fc4+dirty | 3845.29 ms | 1222.18 ms | -2623.11 ms |
| 161ef26+dirty | 3844.87 ms | 1227.50 ms | -2617.37 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b941fc4+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 161ef26+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
Android (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 5c1e987+dirty | 444.71 ms | 475.13 ms | 30.42 ms |
| a736b76+dirty | 405.78 ms | 458.74 ms | 52.96 ms |
| 3b6e9f9+dirty | 442.39 ms | 486.44 ms | 44.05 ms |
| 4e0ba9c+dirty | 421.39 ms | 455.80 ms | 34.41 ms |
| 4966363+dirty | 415.67 ms | 448.60 ms | 32.93 ms |
| 3d377b5+dirty | 425.38 ms | 440.67 ms | 15.30 ms |
| 23598c3+dirty | 371.92 ms | 420.65 ms | 48.74 ms |
| 5125c43+dirty | 409.52 ms | 451.00 ms | 41.48 ms |
| 7ac3378+dirty | 410.67 ms | 442.60 ms | 31.92 ms |
| a5d243c+dirty | 499.20 ms | 525.62 ms | 26.42 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 5c1e987+dirty | 43.94 MiB | 48.94 MiB | 5.00 MiB |
| a736b76+dirty | 48.30 MiB | 53.48 MiB | 5.18 MiB |
| 3b6e9f9+dirty | 48.30 MiB | 53.54 MiB | 5.23 MiB |
| 4e0ba9c+dirty | 48.30 MiB | 53.49 MiB | 5.19 MiB |
| 4966363+dirty | 48.30 MiB | 53.54 MiB | 5.24 MiB |
| 3d377b5+dirty | 43.94 MiB | 49.00 MiB | 5.06 MiB |
| 23598c3+dirty | 43.94 MiB | 49.02 MiB | 5.08 MiB |
| 5125c43+dirty | 48.30 MiB | 53.54 MiB | 5.24 MiB |
| 7ac3378+dirty | 43.94 MiB | 48.99 MiB | 5.05 MiB |
| a5d243c+dirty | 48.30 MiB | 53.54 MiB | 5.23 MiB |
Previous results on branch: feat/sentry-navigation-container
Startup times
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b941fc4+dirty | 477.42 ms | 547.94 ms | 70.52 ms |
| 161ef26+dirty | 426.07 ms | 473.14 ms | 47.07 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b941fc4+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
| 161ef26+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
… NavigationContainer Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ck behavior Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
@sentry review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 134cc57. Configure here.
|
Re: Warden findings — 3 low-severity issues about module-level This is expected: the warn-once flags are intentional for production, and |
|
The props haven't changed since 2020 so it might be worth just adding the types manually. |
lucas-zimerman
left a comment
There was a problem hiding this comment.
see comments above
…n-container Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
antonis
left a comment
There was a problem hiding this comment.
Good catch @lucas-zimerman 👍
Adding the missing types with 254298f
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…n events" This reverts commit 7d90c08.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 8746805. Configure here.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>



📢 Type of change
📜 Description
Adds a
Sentry.NavigationContainercomponent — a drop-in replacement forNavigationContainerfrom@react-navigation/nativethat automaticallyregisters the navigation container with
reactNavigationIntegration.Before:
After:
The component:
registerNavigationContaineron readyforwardRefso users keep imperative navigation accessNavigationContainerpropsonReadycallbacks (Sentry registers first)@react-navigation/nativeis not installedrequire()result and warns only once to avoid noise💡 Motivation and Context
reactNavigationIntegrationrequires manual ref +onReadywiring that is arecurring source of misconfiguration — when users forget
onReady, navigationspans silently don't work. This is the biggest friction point for React Native
tracing adoption compared to iOS/Android where navigation auto-instruments via
OS lifecycle hooks.
Fixes #6065
💚 How did you test it?
CI, Manual, Unit tests
📝 Checklist
sendDefaultPIIis enabled🔮 Next steps