# Hermes | Sentry for React Native

Sentry React Native SDK supports `Hermes` engine out of the box.

## [Source Maps](https://docs.sentry.io/.md#source-maps)

Read our React Native [Source Maps](https://docs.sentry.io/platforms/react-native/sourcemaps.md) documentation to learn how to upload source maps for your app.

## [Troubleshooting](https://docs.sentry.io/.md#troubleshooting)

This section describes common issues when using Hermes and how to resolve them.

### [Multiple ways of Enabling Source Maps in Xcode](https://docs.sentry.io/.md#multiple-ways-of-enabling-source-maps-in-xcode)

If you use `EXTRA_PACKAGER_ARGS`, you only need the packager source map. This is the default behavior if you used [`@sentry/wizard`](https://docs.sentry.io/platforms/react-native.md#install). If you use [`SOURCEMAP_FILE`](https://reactnative.dev/docs/debugging-release-builds.md#enabling-source-maps), the combined Hermes source map is necessary.

### [Check RN Tooling Steps](https://docs.sentry.io/.md#check-rn-tooling-steps)

Our React Native [Source Maps](https://docs.sentry.io/platforms/react-native/sourcemaps.md) documentation is based on [`react-native-xcode.sh`](https://github.com/facebook/react-native/blob/0.71-stable/scripts/react-native-xcode.sh) for iOS and on [`BundleHermesCTask.kt`](https://github.com/facebook/react-native/blob/0.71-stable/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/BundleHermesCTask.kt) for Android. If you are having issues with the manually generated artifacts check the steps of your React Native tooling using the previous links.

React Native [`0.70`](https://github.com/facebook/react-native/blob/e3a5fbe72f966b27b967192317d7072db52d1c8c/scripts/react-native-xcode.sh#L141) and CodePush Update minifies the packager bundle by default.

[`BundleHermesCTask.kt`](https://github.com/facebook/react-native/blob/0.71-stable/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/BundleHermesCTask.kt) is only available from version `0.71` on. For previous versions, use [`react.gradle`](https://github.com/facebook/react-native/blob/0.70-stable/react.gradle).

For more details see [this issue](https://github.com/facebook/react-native/issues/34043.md) in the React Native repository.

### [Don't Combine Hermes and RAM Bundles](https://docs.sentry.io/.md#dont-combine-hermes-and-ram-bundles)

If you are using Hermes, you should not have the [RAM bundles](https://docs.sentry.io/platforms/react-native/manual-setup/ram-bundles.md) feature enabled. In Hermes, when loading the bytecode, `mmap` ensures that the entire file is not loaded. Using Hermes with RAM bundles might lead to issues, because those mechanisms are not compatible with each other.

### [Minimum Required Versions](https://docs.sentry.io/.md#minimum-required-versions)

Sentry added support for `react-native` builds that use the `hermes` engine, which required changes to the Sentry SDK, `sentry-cli` as well as Sentry itself.

Sentry customers using the SaaS product ([sentry.io](https://sentry.io/.md)) will need to update the SDK and `sentry-cli`. The minimum required version for the SDK is `@sentry/react-native` [SDK version `1.3.3`](https://github.com/getsentry/sentry-react-native/releases/tag/1.3.3), and `@sentry/cli` [version `1.51.1`](https://github.com/getsentry/sentry-cli/releases/tag/1.51.1).

For self-hosted Sentry users, the minimum version required is [f07352b](https://hub.docker.com/r/getsentry/sentry/tags.md?page=1\&name=f07352b).

Once you have the minimum version of the SDK, Sentry provides the standard integration as described in the [React Native Sentry documentation](https://docs.sentry.io/platforms/react-native.md).

### [Upload Using Sentry Fastlane Plugin](https://docs.sentry.io/.md#upload-using-sentry-fastlane-plugin)

To upload generated sourcemaps using Fastlane, use the `sentry_upload_sourcemap` action. See how to install Sentry Fastlane Plugin [here](https://github.com/getsentry/sentry-fastlane-plugin.md).

```ruby
sentry_upload_sourcemap(
  auth_token: 'sntrys_YOUR_TOKEN_HERE',
  org_slug: 'example-org',
  project_slug: 'example-project',
  version: '...',
  app_identifier: '...', # bundle_identifer of your app
  build: '...', # optional build number of your app
  dist: '...', # optional distribution of the release usually the buildnumber
  sourcemap: ['index.android.bundle', 'index.android.bundle.map'],
  rewrite: true
)
```
