The Releases dashboard
How each build's sessions end, which builds people run, how fast they start, the web vitals, the devices' health, and why the OS ended the app.
Who it is for: Whoever ships a build: how its sessions end, how fast it is adopted, and what the devices running it go through.
Open it from Dashboards in the Observatory: choose Releases. It is a built-in board, so it is read-only; Save a copy makes one you can change. How every panel reads the range, its colors and its empty states is on Reading a board.
The toolbar: the filters Build, Platform and Service, each All until you pick a value, and the time range. Each menu lists the values flutter.session.count carries in the range. Each panel below names the filters that narrow it.
Overview
Crash-free sessions
The share of ended sessions that did not end in a crash. Abnormal ends are shown apart and do not count against it. It is a session figure, not a count of crashes: the Crashes list counts crashes.
- How it is computed: Crash-free sessions = 1 − crashed sessions / ended sessions, as a percent, the way Sentry counts it. Both come from
flutter.session.count: an ended session is one whosesession.statusis ok, errored, unhandled, crashed or abnormal, and only crashed counts against the figure. A range whose sessions all ended without a crash reads 100%. One figure for the whole picked range. - Better: Higher is better. Beside the figure, its change from the prior range of the same length: green when it moved the better way, red when it moved the other way.
- Colors: The figure turns amber below 99.5% and red below 99%.
- No session ended: when no session ended in the range, it shows this instead of a figure: No session end recorded in this range, so crash-free sessions can't be computed.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.session.count.
Sessions started
How many sessions started.
- How it is computed:
flutter.session.countwheresession.statusis started. One figure for the whole picked range. - Better: Higher is better. Beside the figure, its change from the prior range of the same length: green when it moved the better way, red when it moved the other way.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.session.count.
Crashed sessions
Sessions that ended in a crash. A session figure: the Crashes list counts crashes.
- How it is computed:
flutter.session.countwheresession.statusis crashed. One figure for the whole picked range. - Better: Lower is better. Beside the figure, its change from the prior range of the same length: green when it moved the better way, red when it moved the other way.
- Colors: The figure turns amber above 1 and red above 10.
- No session ended: when no session ended in the range, it shows this instead of a figure: No session end recorded in this range, so crashed sessions can't be computed.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.session.count.
Abnormal session ends
Sessions the OS ended without a crash, of sessions that ended.
- How it is computed:
flutter.session.countwheresession.statusis abnormal, divided by ended sessions (ok, errored, unhandled, crashed or abnormal), as a percent. One figure for the whole picked range. - Better: Lower is better. Beside the figure, its change from the prior range of the same length: green when it moved the better way, red when it moved the other way.
- No session ended: when no session ended in the range, it shows this instead of a figure: No session end recorded in this range, so abnormal session ends can't be computed.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.session.count.
Adoption
Sessions started by build
Which builds people run: sessions started per build.
- How it is computed: Sessions started (
flutter.session.countwheresession.statusis started), counted per build (app.build_id), the top ten. A ranked list, each figure for the whole picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.session.count.
Session outcomes
How the sessions that ended in this range ended.
- How it is computed:
flutter.session.countfor ended sessions, counted persession.status. A ranked list, each figure for the whole picked range. - No session ended: when no session ended in the range, it shows this instead of a figure: No session end recorded in this range, so session outcomes can't be computed.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.session.count.
Sessions started by build over time
The six most started builds, each step.
- How it is computed: Sessions started (
flutter.session.countwheresession.statusis started), counted per build in each step. Lines, one point per step across the picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.session.count.
Crash-free sessions by build
Crash-free sessions per build, each step. Abnormal ends are shown apart. The dashed lines are the 99.5% and 99% targets. A session figure, not a count of crashes.
- How it is computed: Crash-free sessions per build (
app.build_id): 1 − crashed sessions / ended sessions, as a percent, fromflutter.session.count. Only crashed counts against it. Lines, one point per step across the picked range. - Colors: Dashed lines mark 99.5% (warn) and 99% (crit).
- No session ended: when no session ended in the range, it shows this instead of a figure: No session end recorded in this range, so crash-free sessions by build can't be computed.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.session.count.
Startup
Cold start by build (p95)
Cold start time at the 95th percentile, per build.
- How it is computed: The 95th percentile of
flutter.app.startup.durationfor cold starts, one line per build. Lines, one point per step across the picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.app.startup.duration.
Starts by type
Cold, warm and hot starts in this range.
- How it is computed: The number of
flutter.app.startup.durationsamples perapp.start.type(cold, warm, hot). A ranked list, each figure for the whole picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.app.startup.duration.
Warm and hot starts (p95)
How long warm and hot starts take at the 95th percentile.
- How it is computed: The 95th percentile of
flutter.app.startup.durationfor warm and hot starts together. One figure for the whole picked range. - Better: Lower is better.
- Colors: The figure turns amber above 1 s and red above 2 s.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.app.startup.duration.
Web vitals over time (p75)
Largest contentful paint
Largest contentful paint at the 75th percentile, each step.
- How it is computed: The 75th percentile of
flutter.experience.lcp. Lines, one point per step across the picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.experience.lcp.
Interaction to next paint
Interaction to next paint at the 75th percentile, each step.
- How it is computed: The 75th percentile of
flutter.experience.inp. Lines, one point per step across the picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.experience.inp.
First contentful paint
First contentful paint at the 75th percentile, each step.
- How it is computed: The 75th percentile of
flutter.experience.fcp. Lines, one point per step across the picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.experience.fcp.
Time to first byte on the web
Web only: a page load's wait for its first byte at the 75th percentile, each step. Mobile requests time theirs on their HTTP spans.
- How it is computed: The 75th percentile of
flutter.experience.ttfb. Lines, one point per step across the picked range. - Web only: it hides while Platform is set, because web reports carry no platform.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
flutter.experience.ttfb.
Device health
Memory pressure level over time
The highest OS memory-pressure level any device reported, each step: Android's trim level, or 1 for an iOS memory warning.
- How it is computed: The highest value of
memory_pressure.level. The levels: 1 is an iOS memory warning; Android records 5, 10 and 15 (running moderate, running low, running critical) and 60 and 80 (background moderate, background complete). UI hidden (20) and Background (40) are the app leaving the screen, not pressure, and are not recorded. Lines, one point per step across the picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
memory_pressure.level.
Low-power mode share
The share of battery reports with iOS Low Power Mode or Android Battery Saver on; a device that reports more often weighs more.
- How it is computed: The average of
dartastic.battery.low_power_mode, shown as a percent. One figure for the whole picked range. - Better: Lower is better.
- Colors: The figure turns amber above 20% and red above 50%.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.battery.low_power_mode.
Median battery level
The median battery-level report: half read more charge than this. Low means your app must be frugal.
- How it is computed: The median of
dartastic.battery.level, shown as a percent. One figure for the whole picked range. - Better: Higher is better.
- Colors: The figure turns amber below 50% and red below 20%.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.battery.level.
Devices by battery state
Charging, discharging, full, not present or unknown: the devices reporting each. A device that changed state counts under each state it reported.
- How it is computed: Distinct app installs (
app.installation.id) reportingdartastic.battery.state, counted per state. A ranked list, each figure for the whole picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.battery.state.
Thermal state over time
The worst thermal state any device reported, each step: 0 nominal, 1 fair, 2 serious, 3 critical, 4 emergency.
- How it is computed: The highest value of
dartastic.thermal.state. Lines, one point per step across the picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.thermal.state.
Thermal state changes
Changes the OS pushed, by the state entered.
- How it is computed:
dartastic.thermal.state.event, counted perdartastic.thermal.state. A ranked list, each figure for the whole picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.thermal.state.event.
App exits
App exits by reason
Exits the OS reported, by its reason.
- How it is computed:
dartastic.app.exit.count, counted perapp.exit.reason. A ranked list, each figure for the whole picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.app.exit.count.
App exits by reason over time
Exits the OS reported, by reason, each step.
- How it is computed:
dartastic.app.exit.count, counted perapp.exit.reasonin each step. Lines, one point per step across the picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.app.exit.count.
Low-memory exits
Exits the OS made for lack of memory: iOS out-of-memory and memory-pressure terminations, and Android low-memory kills.
- How it is computed:
dartastic.app.exit.countwhereapp.exit.reasonis oom or memory_pressure. One figure for the whole picked range. - Better: Lower is better. Beside the figure, its change from the prior range of the same length: green when it moved the better way, red when it moved the other way.
- Colors: The figure turns amber above 1 and red above 10.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.app.exit.count.
Exits for not responding
Exits the OS reported as an ANR kill.
- How it is computed:
dartastic.app.exit.countwhereapp.exit.reasonis anr. One figure for the whole picked range. - Better: Lower is better. Beside the figure, its change from the prior range of the same length: green when it moved the better way, red when it moved the other way.
- Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.app.exit.count.
Exits with a trace file
Android exits for which the OS kept an ANR or native crash trace.
- How it is computed:
dartastic.app.exit.trace.available. One figure for the whole picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.app.exit.trace.available.
Memory at exit, median
The resident set size when Android ended the app, the median across exits.
- How it is computed: The median of
dartastic.app.exit.memory.rss. One figure for the whole picked range. - Filters: Build, Platform and Service narrow it.
- Opens: its title opens the Metric screen on
dartastic.app.exit.memory.rss.