---
title: "Default Integrations"
description: "Learn about the integrations enabled by default in the Sentry React Native SDK, including React Native-specific integrations for error handling, device context, and runtime information."
url: https://docs.sentry.io/platforms/react-native/integrations/default/
---

# Default Integrations | Sentry for React Native

The default integrations are enabled automatically when you call `Sentry.init()`. They handle error capturing, context enrichment, and event processing. You can disable or reconfigure any of them.

## [Error Handling](https://docs.sentry.io/platforms/react-native/integrations/default.md#error-handling)

### [ReactNativeErrorHandlers](https://docs.sentry.io/platforms/react-native/integrations/default.md#reactnativeerrorhandlers)

*Import name: `Sentry.reactNativeErrorHandlersIntegration`*

Captures unhandled errors and promise rejections on mobile. This integration hooks into React Native's `ErrorUtils` global handler for error capturing and supports engine-specific promise rejection tracking. On web, `BrowserGlobalHandlers` is used instead.

Available options:

```javascript
{
  // Capture unhandled errors via ErrorUtils (default: true)
  onerror: boolean;

  // Capture unhandled promise rejections (default: true)
  onunhandledrejection: boolean;

  // Polyfill Promise for JavaScriptCore environments (default: true)
  // Ignored when using Hermes or react-native-web
  patchGlobalPromise: boolean;
}
```

For details on engine-specific promise rejection behavior (Hermes vs. JSC vs. Web), see [Unhandled Promise Rejections](https://docs.sentry.io/platforms/react-native/integrations/unhandled-rejections.md).

### [InboundFilters](https://docs.sentry.io/platforms/react-native/integrations/default.md#inboundfilters)

*Import name: `Sentry.inboundFiltersIntegration`*

Allows you to ignore specific errors based on the type, message, or URLs in a given exception.

By default, it ignores errors that start with `Script error` or `JavaScript error: Script error`.

To configure this integration, use the `ignoreErrors`, `ignoreTransactions`, `denyUrls`, and `allowUrls` SDK options directly. Keep in mind that `denyUrls` and `allowUrls` only work for captured exceptions, not raw message events.

### [NativeLinkedErrors](https://docs.sentry.io/platforms/react-native/integrations/default.md#nativelinkederrors)

*Import name: `Sentry.nativeLinkedErrorsIntegration`*

Recursively reads linked errors up to a specified limit using a lookup key on the captured Error object. This mobile-only integration also processes linked errors from native layers (Java, Objective-C) and collects debug images. On web, `BrowserLinkedErrors` is used instead.

Available options:

```javascript
{
  key: string; // default: "cause"
  limit: number; // default: 5
}
```

Here's a code example of how this could be used:

```javascript
async function fetchReviews(movieTitle) {
  try {
    await fetchMovieReviews(movieTitle);
  } catch (e) {
    const fetchError = new Error(
      `Failed to fetch reviews for: ${movieTitle}`,
    );
    fetchError.cause = e;
    Sentry.captureException(fetchError);
  }
}
```

### [Dedupe](https://docs.sentry.io/platforms/react-native/integrations/default.md#dedupe)

*Import name: `Sentry.dedupeIntegration`*

Deduplicates certain events by comparing stack traces and fingerprints. Enabled by default.

## [Context & Enrichment](https://docs.sentry.io/platforms/react-native/integrations/default.md#context--enrichment)

### [DeviceContext](https://docs.sentry.io/platforms/react-native/integrations/default.md#devicecontext)

*Import name: `Sentry.deviceContextIntegration`*

Fetches device and app context from the native layer and merges it into events. This integration is mobile-only and requires `enableNative: true` (the default). It provides:

* Device information (model, OS, memory)
* App state (foreground/background, synced with React Native's `AppState`)
* Native breadcrumbs (merged with JS breadcrumbs, sorted by timestamp)
* Native tags and extra data (JS values take priority on conflicts)

### [EventOrigin](https://docs.sentry.io/platforms/react-native/integrations/default.md#eventorigin)

*Import name: `Sentry.eventOriginIntegration`*

Sets the tags `event.origin` to `'javascript'` and `event.environment` to `'javascript'` on every event processed by the JavaScript layer. This helps distinguish JS-layer events from native events when viewing them in Sentry.

### [ReactNativeInfo](https://docs.sentry.io/platforms/react-native/integrations/default.md#reactnativeinfo)

*Import name: `Sentry.reactNativeInfoIntegration`*

Adds React Native runtime context to every event under `contexts.react_native_context`:

* `js_engine` — `hermes` or the engine name from the exception
* `hermes_version` — Hermes version string (if applicable)
* `react_native_version` — React Native version
* `turbo_module` — whether TurboModule is enabled
* `fabric` — whether Fabric (new renderer) is enabled
* `expo` — whether the app is running in Expo
* `expo_go_version` — Expo Go version (if applicable)
* `expo_sdk_version` — Expo SDK version (if applicable)
* `component_stack` — React component stack from error boundaries
* `hermes_debug_info` — whether the Hermes bundle includes debug info

Also sets the tag `hermes: true` when the Hermes engine is detected.

### [NativeRelease](https://docs.sentry.io/platforms/react-native/integrations/default.md#nativerelease)

*Import name: `Sentry.nativeReleaseIntegration`*

Automatically sets the `release` and `dist` fields on events using native build metadata. The priority order is:

1. Values passed to `Sentry.init()` (`release` and `dist` options)
2. Native build metadata (format: `bundleId@version+buildNumber`)

### [FunctionToString](https://docs.sentry.io/platforms/react-native/integrations/default.md#functiontostring)

*Import name: `Sentry.functionToStringIntegration`*

Provides original function and method names, even when those functions or methods are wrapped by error or breadcrumb handlers.

### [HttpContext](https://docs.sentry.io/platforms/react-native/integrations/default.md#httpcontext)

*Import name: `Sentry.httpContextIntegration`*

Attaches HTTP request information such as URL, user-agent, referrer, and other headers to events. This allows Sentry to catalog and tag events with specific OS, browser, and version information.

### [Breadcrumbs](https://docs.sentry.io/platforms/react-native/integrations/default.md#breadcrumbs)

*Import name: `Sentry.breadcrumbsIntegration`*

Wraps native APIs to capture breadcrumbs.

Available options:

```javascript
{
  // Log calls to console.log, console.debug, etc. (default: true)
  console: boolean;

  // Log HTTP requests done with the Fetch API
  // (default: true on web, false on mobile to avoid duplicates with xhr)
  fetch: boolean;

  // Log HTTP requests done with the XHR API (default: true)
  xhr: boolean;

  // Log whenever we send an event to the server (default: true)
  sentry: boolean;
}
```

On mobile, additional breadcrumbs (touch events, navigation, app lifecycle) are captured by the native layer and merged via the `DeviceContext` integration. The `dom` and `history` options from the browser SDK only apply when using `react-native-web`.

## [Modifying System Integrations](https://docs.sentry.io/platforms/react-native/integrations/default.md#modifying-system-integrations)

To disable system integrations, set `defaultIntegrations: false` when calling `init()`.

To override their settings, provide a new instance with your config to the `integrations` option. For example, to turn off capturing console calls as breadcrumbs:

```javascript
Sentry.init({
  dsn: "https://<key>@o<orgId>.ingest.sentry.io/<projectId>",
  integrations: [
    Sentry.breadcrumbsIntegration({
      console: false,
    }),
  ],
});
```

### [Removing an Integration](https://docs.sentry.io/platforms/react-native/integrations/default.md#removing-an-integration)

This example removes the integration for adding breadcrumbs to the event, which is enabled by default:

```javascript
Sentry.init({
  // ...
  integrations: function (integrations) {
    // integrations will be all default integrations
    return integrations.filter(function (integration) {
      return integration.name !== "Breadcrumbs";
    });
  },
});
```
