Skip to content

Add a first-class expoRouterIntegration() with auto-registration (#6156)#6189

Open
alwx wants to merge 4 commits into
mainfrom
alwx/feature/expo-router-integration
Open

Add a first-class expoRouterIntegration() with auto-registration (#6156)#6189
alwx wants to merge 4 commits into
mainfrom
alwx/feature/expo-router-integration

Conversation

@alwx
Copy link
Copy Markdown
Contributor

@alwx alwx commented May 19, 2026

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Fixes #6156

📝 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

Docs need to be updated as well

@alwx alwx self-assigned this May 19, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 19, 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).


  • chore(deps): update Sentry Android Gradle Plugin to v6.7.1 by github-actions in #6190
  • fix(core): Fix includeWebFeedback crash by stubbing browser wrapper modules by antonis in #6150
  • fix(core): Deduplicate native HTTP breadcrumbs by antonis in #6132
  • chore(deps): bump brace-expansion from 5.0.5 to 5.0.6 by dependabot in #6183
  • chore(deps): bump ws from 8.16.0 to 8.20.1 by dependabot in #6184
  • fix(ios): Use conditional import for SentrySwizzle.h by antonis in #6186
  • fix(ios): use framework-style import for SentrySwizzle.h by alwx in #6181
  • chore(deps): bump actions/create-github-app-token from 3.1.1 to 3.2.0 by dependabot in #6178
  • chore(deps): bump github/codeql-action from 4.35.4 to 4.35.5 by dependabot in #6176
  • chore(deps): bump getsentry/craft from 2.26.3 to 2.26.5 by dependabot in #6179
  • chore(deps): bump getsentry/craft/.github/workflows/changelog-preview.yml from 2.26.3 to 2.26.5 by dependabot in #6177
  • fix(core): Resolve expo CLI directly instead of using npx in sourcemap upload by antonis in #6155
  • feat(core): Surface textComponentNames option in Metro config by antonis in #6169
  • chore(deps): update Sentry Android Gradle Plugin to v6.7.0 by github-actions in #6153
  • Filter ExceptionsManager.reportException duplicates in app-start init by alwx in #6145
  • chore(deps): update JavaScript SDK to v10.53.1 by github-actions in #6139
  • feat(core): Enable autoInjectSentryLabel by default in Metro config by antonis in #6141
  • feat(core): Respect Mask boundaries when reading sentry-label by antonis in #6142
  • fix(android): Handle boolean values in JSON options converter by antonis in #6130
  • Multi-instance <TimeToInitialDisplay> / <TimeToFullDisplay> coordination; a multi-signal TTID/TTFD system by alwx in #6090
  • chore(deps): update Bundler Plugins to v5.3.0 by github-actions in #6138
  • chore: Merge 8.11.1 back to main by antonis in #6135
  • chore: Update warning regarding iOS crash in sentry-cocoa 9.12.0 by antonis in #6136

Plus 13 more


🤖 This preview updates automatically when you update the PR.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 19, 2026

Fails
🚫 Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request
Messages
📖 Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against ec3c3fe

@alwx
Copy link
Copy Markdown
Contributor Author

alwx commented May 19, 2026

@cursor review

@alwx alwx marked this pull request as ready for review May 19, 2026 13:24
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 25475dc. Configure here.

Comment thread samples/expo/app/_layout.tsx
Comment thread packages/core/src/js/tracing/expoRouterIntegration.ts Outdated
Comment thread packages/core/src/js/tracing/expoRouterIntegration.ts
Copy link
Copy Markdown
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.

Other than the lint issues that should be fixable with yarn fix and the agent comments LGTM

Comment on lines +142 to +144
if (hasTracingEnabled && options.enableAutoPerformanceTracing) {
integrations.push(expoRouterIntegration());
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Bug: User-provided options for expoRouterIntegration are ignored because a default instance is auto-registered first, preventing the user's configuration from being applied.
Severity: MEDIUM

Suggested Fix

Modify the integration setup logic to ensure that if a user-configured expoRouterIntegration exists, the default one is not added. Alternatively, merge the options from the user-provided instance into the existing one if it's already been created.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location: packages/core/src/js/integrations/default.ts#L142-L144

Potential issue: When tracing is enabled, `expoRouterIntegration()` is automatically
registered without options. If a user also manually provides `expoRouterIntegration`
with options (e.g., `enableTimeToInitialDisplay: true`), the final integration array
contains two instances. The first, default instance creates a
`reactNavigationIntegration`. The second, user-configured instance finds this existing
integration and reuses it, but fails to apply the user-provided options. As a result,
any options specified by the user for `expoRouterIntegration` are silently ignored.

Also affects:

  • samples/expo/app/_layout.tsx

Did we get this right? 👍 / 👎 to inform future reviews.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think the above is not an issue

@alwx alwx requested a review from antonis May 20, 2026 07:38
// Warning: (ae-forgotten-export) The symbol "ExpoRouterIntegrationOptions" needs to be exported by the entry point index.d.ts
//
// @public
export const expoRouterIntegration: (options?: Partial<ExpoRouterIntegrationOptions>) => Integration;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This would need to change after the latest fixes

Suggested change
export const expoRouterIntegration: (options?: Partial<ExpoRouterIntegrationOptions>) => Integration;
export const expoRouterIntegration: (options?: ExpoRouterIntegrationOptions) => Integration;

Copy link
Copy Markdown
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.

Other than the api change issue LGMT!

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a first-class expoRouterIntegration() with auto-registration

2 participants