---
title: "Release health (crash-free)"
description: "Crash-free sessions and crash-free users for each version of your app, how many users are on each version, and sessions per day. Reported by the Flutter, Android, iOS and Next.js SDKs, on by default and free."
product: trace
language: en
url: https://abrova.ir/en/docs/trace/release-health
updated: 2026-11-14
---

# Release health (crash-free)

Crash-free sessions and crash-free users for each version of your app, how many users are on each version, and sessions per day. Reported by the Flutter, Android, iOS and Next.js SDKs, on by default and free.

- **What is it?** — For each release of your app: the share of sessions that did not crash, the share of users who never had a crash, and how many of your users are on it. The number app stores and Crashlytics call "crash-free".
- **Where?** — Abrova Console → your project → Trace → Releases. Filter by platform, environment, release and time range.

## 1. Use a recent SDK and set your release

Release health is on by default in the app SDKs:

| SDK | From version |
| --- | --- |
| `Flutter` | 0.3.1 |
| `Android` | 0.3.0 |
| `iOS` | 0.3.0 |
| `Next.js (in the browser)` | 0.2.0 |

Set `release` to your app's version, so each version gets its own row. Use the same value you use for errors and source maps:

```dart
// Flutter
await AbrovaTrace.init(AbrovaTraceConfig(
  apiKey: 'ab_live_your_api_key',
  release: '2.4.0+31',
));
```

Server SDKs (Node.js, Laravel) do not report sessions: a server has no sessions.

## 2. What counts as a session and a crash

|  | Rule |
| --- | --- |
| `Session` | Starts when the app opens, and again when it comes back after 30 minutes or more in the background. In the browser: one per tab, kept across reloads. |
| `Crashed session` | Ends in an uncaught error or a native crash (Android: Java and native crashes; iOS: signals and uncaught exceptions). A native crash is reported at the next launch. |
| `Not a crash` | A hang (ANR), the user or the system closing the app, an error you catch and report yourself. |
| `Browser` | Only an error from your own code: one your ErrorBoundary catches, or an uncaught error whose script is on your site. Browser extensions and other sites' scripts are left out. |
| `User` | One app install. A user who used the app on two phones counts twice; one who signs in later is still the same user. |

## 3. Read the Releases page

| Number | What it says |
| --- | --- |
| `Crash-free sessions` | Sessions without a crash, out of all sessions in the range. Green from 99.5 %, amber from 98 %, red below. |
| `Crash-free users` | Users (installs) who had no crash in the range. Lower than the sessions number when a few users crash often. |
| `Adoption` | The share of all users in the range who used this release: how far a new version has spread. |
| `Sessions per day` | Sessions that ended normally, and crashed ones in red. |

Each release links to its issues, so you can go from "2.4.0 is at 97 %" straight to what crashes in 2.4.0.

To be told when a new version crashes too often, use **Create an alert** on the page: an [alert rule](https://abrova.ir/docs/trace/alert-rules) of type **Crash-free sessions**, for example below 99 % over 24 hours, by e-mail, a webhook or Abrova Team.

### Users affected on an issue

Each issue also shows **Users affected**: how many users (app installs) had it in the last 30 days, and for each release the share of that release's users, for example "25 % of users · 5 of 20" on 2.4.0. It counts errors your app SDK sent with its session, so it needs the SDK versions above. A native crash reported at the next launch is not counted there yet.

## 4. What is sent

For each session the SDK sends a random install id made by the SDK on the first launch (never a device id, an advertising id or the Android id), a random session id, the start time, the release, the environment, the platform and the user id you set. Reports that cannot be sent while offline are kept on the device and sent later.

## 5. Turn it off

| SDK | Option |
| --- | --- |
| `Flutter` | AbrovaTraceConfig(enableReleaseHealth: false) |
| `Android` | AbrovaTraceConfig.Builder(apiKey).enableReleaseHealth(false) |
| `iOS` | AbrovaTraceConfig(apiKey: …, enableReleaseHealth: false) |
| `Next.js` | AbrovaTrace.init({ …, enableReleaseHealth: false }) |

> **Free**
>
> Sessions are not counted toward your plan and cost nothing. Totals are kept for 90 days.
