Skip to main content
reopt Handbook
reopt Handbook
Expo Enterprise Production

New Architecture

SDK 56 Breaking ChangesNew Architecture Deep DiveReact 19.2 Concurrency Patterns

Native Extensions

Expo UI Nativeexpo-widgets Home Screen WidgetsExpo Modules API v2 Native Extensions

Build and Release

Advanced EAS Build PipelinesEAS Update OTA StrategySecurity, Signing, and Compliance

Operations and Quality

Performance Monitoring and ProfilingTesting StrategyEnterprise Distribution and MDM

Appendix

Verification ReportUpdates
Handbook›Expo Enterprise Production›Performance Monitoring and Profiling
한국어English

Performance Monitoring and Profiling

EAS Observe, Hermes profiling, memory management, ANR, and crash tracking.

Key takeaways

  • EAS Observe is Expo's official monitoring service, in Open Beta as of 2026-06, collecting Cold/Warm Launch, TTI, TTR, and Bundle Load Time from production builds.
  • Wrap the root with ObserveRoot.wrap and call markInteractive() where the app is truly usable; only the first call records the metric.
  • Compare P50/P75/P95 by OTA group and build ID, and stop a rollout when TTI P95 is 10% or more worse.
  • Hermes V1 is the SDK 56 default, so re-validate JSI boundaries such as Reanimated, MMKV, and Skia on devices.
  • Track OTA payload size and bundle load time together because bytecode diffing is enabled by default; aim for a JS thread frame drop rate of 5% or lower.

EAS Observe Open Beta

EAS Observe is Expo's official production performance monitoring service. As of 2026-06, it is in Open Beta and collects startup metrics from Android and iOS production builds.

MetricDescription
Cold Launchfirst app start
Warm Launchreturn from background
TTITime to Interactive
TTRTime to First Render
Bundle Load TimeJS bundle load duration

SDK 56 Setup Pattern

import { Stack } from 'expo-router';
import { ObserveRoot, useObserve } from 'expo-observe';
import * as SplashScreen from 'expo-splash-screen';
import { useEffect, useState } from 'react';

SplashScreen.preventAutoHideAsync();

function RootLayout() {
  const [ready, setReady] = useState(false);
  const { markInteractive } = useObserve();

  useEffect(() => {
    bootstrap().finally(() => setReady(true));
  }, []);

  useEffect(() => {
    if (ready) {
      SplashScreen.hide();
      markInteractive();
    }
  }, [ready, markInteractive]);

  return ready ? <Stack /> : null;
}

export default ObserveRoot.wrap(RootLayout);

markInteractive() can be called from multiple entry screens. Only the first call records the metric, so deep links, login, and onboarding should each mark the point where the app is actually usable.

Operational Queries

eas observe:versions
eas observe:metrics-summary --platform ios
eas observe:metrics --limit 50
eas observe:events
Use caseRecommended practice
release comparisoncompare P50/P75/P95 by OTA group and build ID
session investigationsegment by device class, OS, and update group
rollout gatestop rollout if TTI P95 is 10%+ worse
privacydo not put PII in custom events

Hermes V1

SDK 56 uses Hermes V1 by default through React Native 0.85.

  • Validate actual startup and memory behavior per app.
  • Test JSI boundaries such as worklets, Reanimated, MMKV, and Skia on devices.
  • Track OTA payload size and bundle load time together because bytecode diffing is enabled by default.

Tooling

ToolRole
React Native DevToolsdevelopment runtime debugging
Expo Atlasbundle composition and size analysis
EAS Observeproduction startup metrics
Sentry/BugSnagcrash reporting while EAS Observe crash coverage remains separate

JS Thread Frame Drop Rate

Drop rate=total frames−healthy framestotal frames×100\text{Drop rate} = \frac{\text{total frames} - \text{healthy frames}}{\text{total frames}} \times 100Drop rate=total framestotal frames−healthy frames​×100

Bundle Download Time

Download seconds=bundle size MB×8network Mbps\text{Download seconds} = \frac{\text{bundle size MB} \times 8}{\text{network Mbps}}Download seconds=network Mbpsbundle size MB×8​

Related docs

EAS Update OTA Strategy

Channels, branches, rollouts, rollback strategy, and enterprise OTA operations.

Testing Strategy

E2E, native module tests, visual regression, and release gates for Expo SDK 56 apps.

Metrics and Dashboards

CRM Standard · Connect CRM operations to a KPI tree and decision-ready dashboards.

Cmd. /verify

Claude Code Command Master · Build, run, and observe the app to verify a change (skill).

B2B SaaS Sales and Customer Success

A GTM operating handbook for pipeline, onboarding, expansion, renewal, and ARR quality.

Security, Signing, and Compliance

App integrity, OTA code signing, credential management, and enterprise release controls.

Testing Strategy

E2E, native module tests, visual regression, and release gates for Expo SDK 56 apps.

On this page

EAS Observe Open BetaSDK 56 Setup PatternOperational QueriesHermes V1ToolingJS Thread Frame Drop RateBundle Download Time