Crashlytics

crashlyticsCrash reporting33 lines

Firebase crash reporting for native mobile apps, with crash-free user metrics.

Current — as published in v1.3.2. Written by hand for Crashlytics, not generated.

The rule

What is automatic and what is not

  • Native crashes are captured automatically.
  • JavaScript errors are not. Report the ones that matter with crashlytics().recordError(error).
  • crashlytics().log() adds breadcrumbs to the next crash. Use it for domain events, not for chatter.

Reporting is not handling

After recording an error, decide what the user sees — a retry, a message, a fallback. A reported error that leaves a blank screen is still a broken screen.

Privacy

  • Identify users by internal id only: setUserId(userId).
  • No email addresses, names, phone numbers or message content in logs, custom keys or the user id. Reports are stored by a third party.
  • No tokens or credentials, ever.

Configuration

  • Disable collection in development, or your own crashes bury the real ones.
  • Symbol files must upload with every release build, or the stack traces are memory addresses.

Never

  • Never assume a crash appears without relaunching the app — the report uploads on next launch.
  • Never rely on Crashlytics alone for a JavaScript-heavy failure path.

As each tool receives it

The same guidance, in the shape each editor reads. Cursor and Claude Code are written separately by hand; the rest are derived from the Cursor rule.

.cursor/rules/crashlytics.mdchand-written for this tool
.cursor/rules/crashlytics.mdc
---
description: Crashlytics conventions
globs: ["src/services/monitoring/**", "src/**/*.ts", "src/**/*.tsx"]
alwaysApply: false
---

# Crashlytics

## What is automatic and what is not

- Native crashes are captured automatically.
- **JavaScript errors are not.** Report the ones that matter with
  `crashlytics().recordError(error)`.
- `crashlytics().log()` adds breadcrumbs to the next crash. Use it for domain
  events, not for chatter.

## Reporting is not handling

After recording an error, decide what the user sees — a retry, a message, a
fallback. A reported error that leaves a blank screen is still a broken screen.

## Privacy

- Identify users by **internal id only**: `setUserId(userId)`.
- No email addresses, names, phone numbers or message content in logs, custom
  keys or the user id. Reports are stored by a third party.
- No tokens or credentials, ever.

## Configuration

- Disable collection in development, or your own crashes bury the real ones.
- Symbol files must upload with every release build, or the stack traces are
  memory addresses.

## Never

- Never assume a crash appears without relaunching the app — the report uploads
  on next launch.
- Never rely on Crashlytics alone for a JavaScript-heavy failure path.

What else this module writes

Selecting Crashlytics contributes more than a rule file — all of it merged with every other module you pick, with conflicts resolved rather than duplicated.

Dependencies
@react-native-firebase/app^26.1.0@react-native-firebase/crashlytics^26.1.0
Folders
src/services/monitoring/

Related

Put this in your repo

Adds Crashlytics to a project this tool generated, without starting over. Files you have hand-edited are left alone.