Troubleshooting Expo Observe

Edit page

Solutions for common Expo Observe issues.


For the complete documentation index, see llms.txt. Use this file to discover all available pages.

Common issues

Metrics not appearing in the dashboard

  1. Ensure you have created a new build after installing expo-observe. Metrics are only collected from builds that include the library.
  2. Check that you are viewing the correct project in the EAS dashboard.
  3. If testing in a debug build, ensure dispatchInDebug is set to true via configure(). See Enable metrics in development.

Time to first render not showing

Verify that your root layout is wrapped with the root HOC:

import { AppMetricsRoot } from 'expo-observe'; function RootLayout() { return (/* your layout */); } export default AppMetricsRoot.wrap(RootLayout);
import { ObserveRoot } from 'expo-observe'; function RootLayout() { return (/* your layout */); } export default ObserveRoot.wrap(RootLayout);

Time to interactive not showing

This metric requires manual instrumentation. Verify that:

  1. You are calling AppMetrics.markInteractive() after your splash screen is hidden.
  2. The call is actually being executed (add a console.log to verify).
  1. You are calling markInteractive() (from useObserve()) after your splash screen is hidden.
  2. The call is actually being executed (add a console.log to verify).
Migrating from expo-eas-observe

If you were part of the private preview and previously used expo-eas-observe, follow these steps to migrate to expo-observe.

1

Replace the package

Terminal
npx expo install expo-observe
npm uninstall expo-eas-observe

If you previously installed expo-eas-client as a separate dependency, you can remove it:

Terminal
npm uninstall expo-eas-client

2

Update imports

- import AppMetrics from 'expo-eas-observe'; + import { AppMetrics } from 'expo-observe';

3

Replace manual markFirstRender() with the root HOC

Instead of calling markFirstRender() manually, wrap your root layout with the root HOC for your SDK. This handles the measurement automatically.

Before:

import { useEffect } from 'react'; import AppMetrics from 'expo-eas-observe'; export default function RootLayout() { useEffect(() => { AppMetrics.markFirstRender(); }, []); return (/* your layout */); }

After:

import { AppMetricsRoot } from 'expo-observe'; function RootLayout() { return (/* your layout */); } export default AppMetricsRoot.wrap(RootLayout);
import { ObserveRoot } from 'expo-observe'; function RootLayout() { return (/* your layout */); } export default ObserveRoot.wrap(RootLayout);

4

Create a new build

After completing the migration, create a new build of your app:

Terminal
eas build