Introducing Observe: Performance monitoring for Expo apps
Key Points
- Real-user startup & TTI metrics with device/context breakdowns
- Per-screen navigation metrics and OTA update download timing
- Free open beta (10k MAUs); post-beta free tier up to 1k MAUs
Summary
Observe (EAS Observe) is a production performance monitoring tool for Expo / React Native apps that collects real-user metrics across devices, networks, and conditions. It captures startup timings (cold/warm launches, time to first render, time to interactive), bundle load, per-screen navigation metrics, OTA update download times, and custom events, and surfaces distributions (median, P90/P99) with full device and environment context to make regressions actionable.
Key Points
- Built-in metrics: cold launch, warm launch, time to first render, time to interactive (TTI), bundle load; reported with median, avg, min, max, P90/P99 and device/context metadata.
- Per-screen navigation: opt-in integrations for Expo Router and React Navigation; supports initial vs subsequent renders and screen-level TTI via markInteractive.
- OTA update metrics: automatic download counts and median/P90 download times per published update.
- Custom events & session drill-down: emit events with
logEvent()and inspect full session timelines with device context. - Quick integration: works on Expo SDK 56+. Wrap your root with ObserveRoot and call
markInteractive()once the app is ready. Example:
import { ObserveRoot, useObserve } from 'expo-observe';
// wrap root
export default ObserveRoot.wrap(RootLayout);
// mark interactive when ready
const { markInteractive } = useObserve();
useEffect(() => { if (isReady) { SplashScreen.hide(); markInteractive(); } }, [isReady]);
- CLI & automation: query metrics from the terminal with EAS CLI commands (observe:metrics, observe:metrics-summary, observe:routes, observe:events, observe:versions) — all support
--jsonoutput. - Agent support: the expo-observe skill can install/configure Observe and run agentic analyses (e.g., "which routes are slowest and why?").
- Pricing & beta: free while in open beta (includes first 10,000 MAUs). After beta, paid plans scale with MAUs and a free tier will remain (up to 1,000 MAUs with all five built-in metrics). Users receive at least 60 days' notice before pricing changes.
Roadmap / Next
- Dashboard improvements for clearer build/version/update comparisons and regression highlights.
- Crash collection for iOS/Android to factor into release health.
- Request timing to surface external API latency per request.
- Alerting via Email/Slack for performance regressions.
Getting started
- Ensure Expo SDK 56+ and link project to EAS (if not already).
- Install
expo-observeand wrap your root withObserveRoot.wrap(...). - Mark app readiness with
markInteractive()after auth/data loading and hiding the splash screen. - Make a production build and monitor metrics in the dashboard or via EAS CLI.
For details and configuration (sampling, environments, integrations) see the Observe docs and join #expo-observe on Discord to give feedback.