Skip to content

Add download/apply timing to Expo Updates listener integration #6337

Description

@antonis

expoUpdatesListenerIntegration listens to the expo-updates state machine and emits breadcrumbs for transitions (checking, downloading, update pending, errors, rollback, restart). However, it captures zero timestamps and zero durations — you can see that a download happened but not how long it took.

Feasibility Assessment (Jul 2026)

Not yet covered — the integration is breadcrumbs-only. No timing, no spans.

Cross-SDK alignment: No other Sentry SDK has OTA update timing spans. This would be RN-first (Expo-specific). Flutter/Shorebird has no equivalent in sentry-dart.

Spec: No develop.sentry.dev spec exists for OTA update span ops. New op names (e.g., app.update.check, app.update.download) should be proposed before implementation.

Prior discussion: Closed issue #5425 (#5425) previously proposed monitoring OTA download/install performance.

Dashboard visibility: Spans would appear in Traces/Explore views.

Measurable durations from expo-updates state machine:

  • Check duration: isChecking=trueisUpdateAvailable=true or checkError — derivable
  • Download duration: isDownloading=trueisUpdatePending=true or downloadError — derivable
  • Apply/restart duration: isRestarting=true has no end signal (process terminates) — not cleanly measurable

Implementation

Add a downloadSpan variable to the integration closure:

  1. Start a span (startInactiveSpan({ name: 'expo.updates.download' })) when isDownloading transitions to true
  2. End the span when isUpdatePending transitions to true or on downloadError
  3. Similarly for check duration with isCheckingisUpdateAvailable/checkError
  4. Consider forceTransaction: true since OTA checks typically happen outside user-interaction transactions

Activity

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

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions