EAS Observe - Performance monitoring built for Expo and React Native

by
Observe measures how fast your Expo app starts and how fast each screen becomes usable, on real user devices. Install the library, wrap your root layout, and startup metrics arrive with nothing to instrument. Every native build and every EAS Update gets its own marker on the chart, so you can see which release moved the line. Full device context on every session: model, OS, country, network type, thermal state, frame data. Free plan covers 100K events a month.

Add a comment

Replies

Best
Hunter
📌
Hey Product Hunt! Observe is performance monitoring for Expo and React Native apps. It went generally available last week after a few months of open beta. Mobile releases don't behave like web releases. Users update when they feel like it, and over-the-air JavaScript updates stack on top of native builds, so three native releases plus two updates leaves you with five different apps live at once. A tool that models a release as a single version string will average all five into one p90 and call it a day. Observe treats every native build and every EAS Update as its own release. It measures how fast your app starts and how fast each screen becomes usable on real user devices, then drops a marker on the chart when each release's first event arrives. Click the marker and you get the version, the build number or update ID, and the metric value at that point. What you get after `npx expo install expo-observe` and one wrapper around your root layout: - Launch time split into cold and warm, bundle load, and time to render. Nothing to instrument. - Time to interactive, once you call `markInteractive()`. That one needs a line from you, because only your code knows when the first screen actually has data in it. - Per-route cold and warm time to first render on SDK 56 and later, through the Expo Router or React Navigation integration. First visits and repeat visits are tracked separately, since they're usually different problems. - Release markers for every build and update, filters down to a single version, build, or update ID, and a downloads tab with median and p90 per update. - Device context on every session: model, OS version, country, language, app version and build, route. Plus the fields a browser tab doesn't have, like frozen and slow frames, thermal state, low power mode, and network type. - Custom events through `Observe.logEvent()`, landing on the same session timeline as the startup metrics. - JavaScript error reporting, in preview on SDK 57 and later. Set `uploadSourceMaps: true` in eas.json and production stack traces come back readable. - A "hand off to your AI assistant" button that copies the dashboard state as a prompt for Claude Code, Cursor, or Codex. The library is open source and emits OpenTelemetry. EAS Observe is the default collector and you can point it at your own instead. You give up release attribution if you do, since joining a metric to a build and a commit needs the build pipeline. There are some gaps/limitations in this early version of the service: no alerting yet (email, Slack and webhooks are in progress), no session replay, no backend tracing, no native crash reporting. If you already run Sentry, keep it. They work side by side. You need SDK 55 or later, an EAS project, and a development or production build. It doesn't run in Expo Go, and turning it on takes a new binary. Free plan is 100K events a month. Starter is $19 and Production is $199, both including 500K events with usage pricing beyond that. Metric data is retained at least 90 days. Happy to answer anything in the comments. Bug reports go to the #eas channel in the Expo Discord.

 The release-by-release tracking sounds really useful, especially with native builds and updates living side by side.

Hunter

 it's incredibly useful. If all is well it allows you to rest a little easier. But if there are performance regressions it allows you to spot them and solve them asap (instead of waiting to hear about them from users).

 Exactly! Catching regressions early is so much better than finding out from frustrated users 😅

Hunter

 i feel seen.

Hi, congratulations on the launch! Does free plan cover single user per session? Or is it different?
Hunter

 free plan covers up to 100k events. Which is plenty for getting a good signal of how your app is performing in production.

I love it because it shows release health across builds AND updates. When you ship with Expo, you can't just rely on tracking the performance of version 1.9.2 in the app store, you need to know which update a user is on as well. Observe handles it gracefully and is purpose built for RN+Expo from tip to tail.

amazing product!

Hunter

 thank you! Would love to get your feedback. Would be good to catch up in general. I'll reach out to book some time.

so it's like Sentry but optimized for Expo mobile apps?

i need this so bad!

awesome work & team! selfishly hoping all the mobile apps i use become less buggy as people get easy tools like this :P