Skip to content

Conversation

@alwx
Copy link
Contributor

@alwx alwx commented Feb 2, 2026

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Fixes #5423
What happens here is we create spans automatically if enablePrefetchTracking is set to true for the reactNavigationIntegration OR if the ExpoRouter is wrapped with Sentry.wrapExpoRouter() — it's done this way because there are two ways of using prefetch with ExpoRouter.

💚 How did you test it?

CI, manually

📝 Checklist

  • I added tests to verify changes
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled
  • I updated the docs if needed.
  • I updated the wizard if needed.
  • All tests passing
  • No breaking changes

🔮 Next steps

@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • Expo Router integration improvement: Prefetch route performance measurement with automatically created spans by alwx in #5606
  • chore(deps): update Bundler Plugins to v4.9.0 by github-actions in #5608
  • e2e tests on Cirrus Labs runners by alwx in #5485
  • chore(deps): bump getsentry/craft from 2.20.0 to 2.20.1 by dependabot in #5603
  • chore(deps): bump getsentry/craft/.github/workflows/changelog-preview.yml from 2.20.0 to 2.20.1 by dependabot in #5604
  • chore(deps): bump github/codeql-action from 4.31.11 to 4.32.0 by dependabot in #5605
  • Ref: Add Claude task by lucas-zimerman in #5602
  • chore(deps): update JavaScript SDK to v10.38.0 by github-actions in #5596

🤖 This preview updates automatically when you update the PR.

@alwx alwx changed the title WIP: Expo Router improvement: Prefetch route performance measurement with automatically created spans WIP: Expo Router integration improvement: Prefetch route performance measurement with automatically created spans Feb 2, 2026
@alwx alwx changed the title WIP: Expo Router integration improvement: Prefetch route performance measurement with automatically created spans Expo Router integration improvement: Prefetch route performance measurement with automatically created spans Feb 2, 2026
@alwx alwx added the ready-to-merge Triggers the full CI test suite label Feb 2, 2026
@alwx alwx self-assigned this Feb 2, 2026
@alwx alwx marked this pull request as ready for review February 2, 2026 13:21
@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

Android (legacy) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 411.18 ms 432.30 ms 21.12 ms
Size 43.75 MiB 48.41 MiB 4.66 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
f3b058c+dirty 501.18 ms 536.70 ms 35.52 ms
bfe454a+dirty 573.44 ms 579.46 ms 6.02 ms
294387d+dirty 424.30 ms 465.40 ms 41.10 ms
955f2eb+dirty 422.74 ms 410.19 ms -12.55 ms
3bd3f0d+dirty 447.21 ms 472.31 ms 25.10 ms
d081295+dirty 408.08 ms 453.62 ms 45.54 ms
ad27f6e+dirty 471.44 ms 516.23 ms 44.79 ms
07808fb+dirty 419.10 ms 419.08 ms -0.02 ms
170d5ea+dirty 407.92 ms 422.49 ms 14.57 ms
8e653ac+dirty 360.28 ms 372.04 ms 11.76 ms

App size

Revision Plain With Sentry Diff
f3b058c+dirty 43.75 MiB 48.07 MiB 4.32 MiB
bfe454a+dirty 17.75 MiB 19.69 MiB 1.94 MiB
294387d+dirty 43.75 MiB 48.04 MiB 4.29 MiB
955f2eb+dirty 17.75 MiB 19.70 MiB 1.95 MiB
3bd3f0d+dirty 17.75 MiB 19.70 MiB 1.95 MiB
d081295+dirty 43.75 MiB 48.04 MiB 4.29 MiB
ad27f6e+dirty 43.75 MiB 48.07 MiB 4.32 MiB
07808fb+dirty 17.75 MiB 19.70 MiB 1.95 MiB
170d5ea+dirty 17.75 MiB 19.70 MiB 1.95 MiB
8e653ac+dirty 17.75 MiB 19.75 MiB 2.00 MiB

@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

iOS (legacy) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 1214.91 ms 1219.30 ms 4.39 ms
Size 3.38 MiB 4.60 MiB 1.22 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
6bd9054+dirty 1212.20 ms 1217.89 ms 5.70 ms
d73150f+dirty 1198.44 ms 1210.06 ms 11.62 ms
d081295+dirty 1214.40 ms 1211.27 ms -3.13 ms
d1fd647+dirty 1219.35 ms 1233.18 ms 13.83 ms
ea3e26e+dirty 1229.13 ms 1228.46 ms -0.67 ms
80e4616+dirty 1221.32 ms 1225.64 ms 4.32 ms
955f2eb+dirty 1235.06 ms 1253.88 ms 18.81 ms
5ee3314+dirty 1215.18 ms 1207.64 ms -7.54 ms
70250df+dirty 1214.51 ms 1215.04 ms 0.53 ms
664c66f+dirty 1215.37 ms 1221.30 ms 5.92 ms

App size

Revision Plain With Sentry Diff
6bd9054+dirty 3.41 MiB 4.67 MiB 1.25 MiB
d73150f+dirty 3.38 MiB 4.60 MiB 1.22 MiB
d081295+dirty 3.41 MiB 4.59 MiB 1.18 MiB
d1fd647+dirty 2.63 MiB 3.99 MiB 1.36 MiB
ea3e26e+dirty 3.41 MiB 4.58 MiB 1.17 MiB
80e4616+dirty 3.38 MiB 4.60 MiB 1.22 MiB
955f2eb+dirty 2.63 MiB 3.98 MiB 1.35 MiB
5ee3314+dirty 2.63 MiB 3.99 MiB 1.35 MiB
70250df+dirty 3.44 MiB 4.59 MiB 1.15 MiB
664c66f+dirty 3.38 MiB 4.60 MiB 1.22 MiB

@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

Android (new) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 399.10 ms 433.08 ms 33.98 ms
Size 43.94 MiB 49.27 MiB 5.33 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
f3b058c+dirty 422.90 ms 468.30 ms 45.40 ms
294387d+dirty 359.44 ms 393.40 ms 33.97 ms
1d62dde+dirty 366.59 ms 408.80 ms 42.21 ms
d081295+dirty 416.95 ms 461.24 ms 44.29 ms
ad27f6e+dirty 484.67 ms 532.79 ms 48.12 ms
1226664+dirty 377.65 ms 453.94 ms 76.29 ms
083f560+dirty 383.96 ms 417.76 ms 33.80 ms
ec14be7+dirty 401.58 ms 475.26 ms 73.68 ms
eb07ba3+dirty 419.49 ms 482.12 ms 62.63 ms
d1fd647+dirty 374.46 ms 409.51 ms 35.05 ms

App size

Revision Plain With Sentry Diff
f3b058c+dirty 43.94 MiB 48.90 MiB 4.96 MiB
294387d+dirty 43.94 MiB 48.87 MiB 4.93 MiB
1d62dde+dirty 7.15 MiB 8.46 MiB 1.31 MiB
d081295+dirty 43.94 MiB 48.87 MiB 4.93 MiB
ad27f6e+dirty 43.94 MiB 48.90 MiB 4.96 MiB
1226664+dirty 7.15 MiB 8.46 MiB 1.30 MiB
083f560+dirty 7.15 MiB 8.43 MiB 1.28 MiB
ec14be7+dirty 7.15 MiB 8.42 MiB 1.26 MiB
eb07ba3+dirty 7.15 MiB 8.42 MiB 1.27 MiB
d1fd647+dirty 7.15 MiB 8.43 MiB 1.28 MiB

@antonis
Copy link
Contributor

antonis commented Feb 2, 2026

@sentry review

@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

iOS (new) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 1212.58 ms 1206.69 ms -5.89 ms
Size 3.38 MiB 4.60 MiB 1.22 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
6bd9054+dirty 1207.02 ms 1199.27 ms -7.76 ms
d73150f+dirty 1224.52 ms 1227.17 ms 2.65 ms
d081295+dirty 1205.24 ms 1207.52 ms 2.28 ms
d1fd647+dirty 1218.16 ms 1225.82 ms 7.65 ms
ea3e26e+dirty 1216.61 ms 1214.15 ms -2.47 ms
80e4616+dirty 1206.90 ms 1205.94 ms -0.96 ms
955f2eb+dirty 1225.78 ms 1239.27 ms 13.49 ms
5ee3314+dirty 1234.25 ms 1235.44 ms 1.19 ms
70250df+dirty 1211.96 ms 1222.31 ms 10.35 ms
664c66f+dirty 1195.94 ms 1194.80 ms -1.14 ms

App size

Revision Plain With Sentry Diff
6bd9054+dirty 3.41 MiB 4.67 MiB 1.25 MiB
d73150f+dirty 3.38 MiB 4.60 MiB 1.22 MiB
d081295+dirty 3.41 MiB 4.59 MiB 1.18 MiB
d1fd647+dirty 3.19 MiB 4.56 MiB 1.37 MiB
ea3e26e+dirty 3.41 MiB 4.58 MiB 1.17 MiB
80e4616+dirty 3.38 MiB 4.60 MiB 1.22 MiB
955f2eb+dirty 3.19 MiB 4.55 MiB 1.36 MiB
5ee3314+dirty 3.19 MiB 4.55 MiB 1.37 MiB
70250df+dirty 3.44 MiB 4.59 MiB 1.15 MiB
664c66f+dirty 3.38 MiB 4.60 MiB 1.22 MiB

@alwx
Copy link
Contributor Author

alwx commented Feb 3, 2026

StartSpanOptions doesn't actually have an origin attribute but SpanAttributes has sentry.origin which is what I added and also added those to tests.
@antonis it's ready for a second look.

const { currentlyRunning } = useUpdates();
const rawRouter = useRouter();
// Wrap the router to monitor prefetch performance
const router = Sentry.wrapExpoRouter(rawRouter);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm getting an error

✖  sentry-react-native-expo-sample:fix
  
  /Users/antonis/git/sentry-react-native/samples/expo/app/(tabs)/index.tsx
    18:25  error  'wrapExpoRouter' not found in imported namespace 'Sentry'  import/namespace
  
  ✖ 1 problem (1 error, 0 warnings)

Copy link
Collaborator

@lucas-zimerman lucas-zimerman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR is looking good! thank you.!
A minor note: should we also mention this on sentry docs?

Copy link
Contributor

@antonis antonis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀
Let's wait for the tests to get 🟢 and merge

A minor note: should we also mention this on sentry docs?

Makes sense 👍

@alwx alwx merged commit 42a723e into main Feb 3, 2026
98 of 99 checks passed
@alwx alwx deleted the alwx/feature/prefetch-tracking branch February 3, 2026 14:01
@alwx
Copy link
Contributor Author

alwx commented Feb 3, 2026

@antonis @lucas-zimerman will do the docs change later today, no worries

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge Triggers the full CI test suite

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ExpoRouter] Route preloading

4 participants