Skip to content

Expo Router integration improvement: Prefetch route performance measurement with automatically created spans#5606

Merged
alwx merged 10 commits intomainfrom
alwx/feature/prefetch-tracking
Feb 3, 2026
Merged

Expo Router integration improvement: Prefetch route performance measurement with automatically created spans#5606
alwx merged 10 commits intomainfrom
alwx/feature/prefetch-tracking

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

alwx added a commit to getsentry/sentry-docs that referenced this pull request Mar 18, 2026
We've recently added a bunch of changes to Expo integrations in the
React Native SDK, this PR adds the missing information about those
changes to the docs.

Here is the list of PRs it covers:

- Expo Updates
- getsentry/sentry-react-native#5794
- getsentry/sentry-react-native#5788
- getsentry/sentry-react-native#5748
- Expo Config Plugin
- getsentry/sentry-react-native#5796 — 06d4e245
— Add environment option to Expo config plugin
- EAS Build Integration
- getsentry/sentry-react-native#5666
- getsentry/sentry-react-native#5773
- getsentry/sentry-react-native#5617
- Expo Router / Tracing
- getsentry/sentry-react-native#5606
- getsentry/sentry-react-native#5718
- Tooling / Fixes
- getsentry/sentry-react-native#5636
  - getsentry/sentry-react-native#5733
stephanie-anderson pushed a commit to getsentry/sentry-docs that referenced this pull request Mar 18, 2026
We've recently added a bunch of changes to Expo integrations in the
React Native SDK, this PR adds the missing information about those
changes to the docs.

Here is the list of PRs it covers:

- Expo Updates
- getsentry/sentry-react-native#5794
- getsentry/sentry-react-native#5788
- getsentry/sentry-react-native#5748
- Expo Config Plugin
- getsentry/sentry-react-native#5796 — 06d4e245
— Add environment option to Expo config plugin
- EAS Build Integration
- getsentry/sentry-react-native#5666
- getsentry/sentry-react-native#5773
- getsentry/sentry-react-native#5617
- Expo Router / Tracing
- getsentry/sentry-react-native#5606
- getsentry/sentry-react-native#5718
- Tooling / Fixes
- getsentry/sentry-react-native#5636
  - getsentry/sentry-react-native#5733
constantinius pushed a commit to getsentry/sentry-docs that referenced this pull request Mar 20, 2026
We've recently added a bunch of changes to Expo integrations in the
React Native SDK, this PR adds the missing information about those
changes to the docs.

Here is the list of PRs it covers:

- Expo Updates
- getsentry/sentry-react-native#5794
- getsentry/sentry-react-native#5788
- getsentry/sentry-react-native#5748
- Expo Config Plugin
- getsentry/sentry-react-native#5796 — 06d4e245
— Add environment option to Expo config plugin
- EAS Build Integration
- getsentry/sentry-react-native#5666
- getsentry/sentry-react-native#5773
- getsentry/sentry-react-native#5617
- Expo Router / Tracing
- getsentry/sentry-react-native#5606
- getsentry/sentry-react-native#5718
- Tooling / Fixes
- getsentry/sentry-react-native#5636
  - getsentry/sentry-react-native#5733
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

3 participants