This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
Querying with EAS CLI
Edit page
Query EAS Observe metrics, events, and sessions from the terminal with the eas observe commands.
Everything the EAS Observe dashboard shows is also available from the terminal. Use the eas observe commands to compare releases, investigate slow sessions, and pipe results into scripts.
Prerequisites
3 requirements
3 requirements
1.
Follow the instructions for installing the CLI.
2.
Follow Get started to install expo-observe and create your first
build.
3.
Log in with eas login. By default, each command reads the project ID from the app config in
the current directory. Pass --project-id to query a project from anywhere, using an account
that has access to it:
EAS CLI help
Run any command with --help to see the flags supported by your installed EAS CLI version.
Some data is available only on certain plans. When your account's plan does not include what a command asks for, the command fails with an upgrade message that links to your billing page. Session timelines are checked before the interactive picker runs, so a blocked plan is reported immediately. See Pricing for what each plan includes.
Commands
Every command accepts these flags:
--platform androidor--platform ios: filter by platform. Both are included by default. Not available onobserve:session, which already targets one session.--days <number>: show data from the last N days.--start <ISO date>and--end <ISO date>: set an explicit time range. Mutually exclusive with--days.--project-id <id>: query a project without running inside its directory.--json: machine-readable output. Implies--non-interactive.--non-interactive: fail instead of prompting.
When no time range is given, commands return the last 60 days.
Metric names
Startup metrics are collected automatically once the app is instrumented. See the Metrics reference for what each one measures.
Navigation metrics are per route. They require SDK 56 or later and one of the navigation integrations, either Expo Router or React Navigation.
observe:metrics and observe:metrics-summary accept all nine names. observe:routes accepts the three navigation names.
eas observe:metrics-summary
Shows aggregated statistics grouped by app version, with a separate table per platform. Use it to compare startup performance across releases.
Command flags:
--metric <name>: metric to display. Repeat the flag for several metrics.--stat <name>: statistic to display per metric. One ofmin,median,max,average,p80,p90,p99, oreventCount.
The table shows median and eventCount by default, and merges them into one cell, such as 0.45s (150). The App version column includes the build number in parentheses. Update IDs are omitted from the table to keep it readable, but --json returns them as an array per version.
eas observe:metrics
Shows individual samples rather than aggregates. Use it to investigate outliers and to find the session behind a slow launch.
The metric is a positional argument. Omitting it prompts for a choice, and fails in non-interactive mode.
Command flags:
--sort <order>: one ofoldest(default),newest,slowest, orfastest.--limit <number>: samples per page. Defaults to 10, capped at 100.--after <cursor>: theendCursorfrom a previous run.--app-version <version>: filter by app version.--update-id <id>: filter by EAS Update ID.
When more results are available, the command prints the flag needed to fetch the next page. JSON output adds sessionId, easClientId, and any custom params attached to the sample.
eas observe:routes
Shows navigation metrics grouped by route name, with a separate section per platform. Use it to find the screens that are slowest to reach.
Command flags:
--metric <name>: one ofnav_cold_ttr,nav_warm_ttr, ornav_tti. Repeat the flag for several metrics. Defaults to all three.--stat <name>: one ofmedian,p90, orcount.--route-name <name>: filter by route name. Repeat the flag for several routes.--app-version <version>and--build-number <number>: filter to one release.--update-id <id>: filter by EAS Update ID.--limit <number>: routes per page. Defaults to 50, capped at 200.--after <cursor>: theendCursorfrom a previous run.
Route names are patterns, such as /(tabs)/sessions/[sessionId], so distinct parameter values group together. Each platform paginates separately, so the next-page hint names the platform it applies to.
eas observe:session
Shows every metric and log event recorded during one session, in order. Use it after observe:metrics surfaces a slow sample, to see what else happened during that launch.
The session ID is a positional argument. Omitting it in interactive mode prompts you to pick from a list of candidate sessions. In non-interactive mode, including under --json, the session ID is required. Session IDs are also included in the --json output of observe:metrics and observe:events.
Command flags:
--event-name <name>: the metric or user-defined event used to build the candidate list, such asttioronboarding.completed.--sort <order>: orders the candidate events. One ofslowest,fastest,newest, oroldest.
The flags that build the candidate list —--event-name,--sort,--days,--start, and--end— describe how to find a session, so they cannot be combined with a session ID. Pass the ID on its own to inspect a session you already have.
eas observe:events
Shows user-defined events logged with Observe.logEvent, as well as events emitted by the SDK and its integrations, such as expo.memory.warning and expo-image.oversized. With no arguments, it lists event names and their counts.
Command flags:
--all-events: list every event instead of the name summary. Cannot be combined with an event name.--session-id <id>: filter to one session. For the full timeline, including metrics, useobserve:session.--app-version <version>: filter by app version.--update-id <id>: filter by EAS Update ID.--limit <number>and--after <cursor>: paginate the results.
Querying a name that has no events prints the available names for the same time range, which makes typos easy to spot.
eas observe:versions
Lists the app versions in the field with their build numbers, update IDs, and event counts. Use it to find the identifiers that the other commands filter by.
The table shows app version, first seen, events, users, builds, and updates. JSON output returns the full hierarchy, with EAS Build and update details nested under each version.
Common workflows
Compare the current release against the previous one:
Find and investigate the slowest launches:
Check which screens are slowest to become interactive:
Check how over-the-air updates download in the field:
Gate a script or CI job on a metric: