Releases
Every shipped Releases control: local range pills, KPI cards, table columns, empty copy, and how SDK release tagging feeds the page.
A release is a version string you stamp in the SDK (1.4.2, a git SHA, etc.). The Releases page answers: did this deploy introduce issues or crash more sessions?
Route: /projects/:id/releases
API: GET /api/projects/:id/releases?range={24h|7d|14d|30d|90d}
How data gets here
In SDK init:
HumanBehaviorTracker.init(apiKey, {
release: "1.4.2",
environment: "production",
// dist / commitSha when you upload source maps
});Without release, issues are not attributable to a version and the table stays empty for the window.
Page layout
| Region | Contents |
|---|---|
| Top bar | Title Releases (rocket icon) |
| Subcopy | Release health from release-tagged errors and the issues introduced in each release. |
| Range pills | Local React state (not Dashboard URL range=) |
| KPI grid | Four cards |
| Footnote | Crash-free semantics |
| Table or empty | Rows per release, or dashed empty state |
Range pills (local state)
| Pill | Meaning |
|---|---|
| 24h | Last 24 hours |
| 7d | Last 7 days |
| 14d | Last 14 days (default) |
| 30d | Last 30 days |
| 90d | Last 90 days |
Gotcha: These pills do not sync with the shared Dashboard/Replays range= / startDate / endDate query params. Switching pills refetches; in-flight requests are aborted so a fast switch cannot paint stale numbers.
KPI cards
| Label | Value |
|---|---|
| Crash-free sessions | Project-wide % to 2 decimals, or — when null |
| Total sessions | Locale-formatted count |
| Crashed sessions | Locale-formatted count |
| Releases | Number of release rows returned for the window |
Loading (no data yet): pulse skeleton inside each card.
Footnote (shipped copy)
Crash-free sessions is project-wide for the selected window. Per-release crash-free requires sessions tagged with a release (SDK + session schema) and is not yet available.
Do not document per-release crash-free % as shipped.
Table
Shown when releases.length > 0.
| Column | Contents |
|---|---|
| Release | Monospace release string |
| New issues | Count of issues first seen in that release |
| Events | Error/event volume |
| Users | Affected users |
| Crashed sessions | Sessions with crashes attributed to the release |
| First seen | Relative time (Nm ago / Nh ago / Nd ago); future timestamps clamped so the UI never shows negative “ago” |
| Last seen | Same relative format |
Rows are not click-through links in the current UI — use Issues and filter by release after investigating a spike.
Empty & loading
| State | UI |
|---|---|
| Initial load | Pulse block (h-64) |
| No rows | Dashed panel: No releases with errors in this window. Stamp a release in the SDK init to attribute issues and health to releases. |
Fetch errors are best-effort (silent); the page may show empty/previous data rather than a dedicated error banner.
Workflow after you ship
- Tag
release(and ideallyenvironment,commitSha,dist) in CI/build. - Upload source maps for that release.
- Open Releases → compare New issues / Crashed sessions vs prior versions.
- Investigate spikes in Issues.