Skip to main content

Overview

Loom’s crash tracking system captures errors and crashes from TypeScript (browser + Node.js) and Rust applications, groups them into issues via fingerprinting, tracks regressions across releases, and provides source context through uploaded source maps.
Crash tracking integrates with analytics for person identity and feature flags to capture active flags at crash time.

Key Features

  • Multi-platform crash capture: JavaScript, Node.js, Rust
  • Issue grouping via fingerprinting to deduplicate similar crashes
  • Issue lifecycle with unresolved/resolved/ignored/regressed states
  • Regression detection when resolved issues reappear
  • Source map uploads for TypeScript with source context
  • Rust backtrace symbolication with demangling

Core Concepts

Crash Event

A single crash occurrence:

Issue

An aggregated group of similar crashes:
Issue statuses:

Platform Types

Rust SDK

Install the SDK:

Setup with Integrations

Capturing Errors

TypeScript SDK

Install the SDK:

Browser Setup

Capturing Exceptions

React Error Boundary

Source Maps

Upload source maps to get readable stack traces for minified JavaScript:
1

Build your app with source maps

2

Upload source maps to Loom

3

Deploy your app

Source maps are matched by release version and file paths

Build Tool Integration

Vite plugin example:

Issue Fingerprinting

Crashes are grouped by fingerprint (SHA256 hash): Default algorithm:
  1. Exception type (most significant)
  2. Top 5 in-app stack frames (function + module)
  3. If no in-app frames, use all frames
Example:

Custom Fingerprinting

Override fingerprinting rules via API:

Issue Lifecycle

1

Unresolved

New crash creates issue in Unresolved state
2

Resolve

Mark issue as Resolved when fixed:
3

Regression Detection

If new crash arrives for resolved issue:
  • Status changes to Regressed
  • times_regressed increments
  • Real-time alert sent via SSE
4

Ignore

Permanently ignore an issue:

API Endpoints

Capture Crashes

POST /api/crash/capture
endpoint
Ingest single crash event (requires Capture API key)Request:

Manage Issues

GET /api/crash/projects/:id/issues
endpoint
List issues with filtersQuery Parameters:
  • status - Filter by status (unresolved, resolved, etc.)
  • sort - Sort by (last_seen, first_seen, event_count)
  • query - Search in title/message
GET /api/crash/projects/:id/issues/:issueId
endpoint
Get issue detail with recent eventsResponse:
POST /api/crash/projects/:id/issues/:issueId/resolve
endpoint
Mark issue as resolvedRequest:

Upload Source Maps

POST /api/crash/projects/:id/artifacts
endpoint
Upload source maps (multipart/form-data)Form fields:
  • release - Release version
  • dist - Distribution variant (optional)
  • Files: .map and .js files

Real-time Updates (SSE)

Subscribe to crash events:
Events:
  • crash.new - New crash event
  • issue.new - New issue created
  • issue.regressed - Resolved issue regressed
  • issue.resolved - Issue resolved
  • issue.assigned - Issue assigned to user

Stack Frames

Stack frames include source context after symbolication:

Best Practices

Upload Source Maps

Always upload source maps for production builds to get readable stack traces

Set Release Version

Use semantic versioning or commit SHA for release tracking

Add Breadcrumbs

Log user actions before crashes to aid debugging

Filter Noise

Use beforeSend hook to filter known browser quirks (ResizeObserver, etc.)

See Also

Analytics

Link crashes to person profiles

Sessions

Track crash-free session rates