Guide
Diagnosing React Native Crashes and Freezes After Enabling Hermes
When you switch a React Native app to the Hermes JavaScript engine, crashes and UI freezes can appear. This guide shows how to spot the symptoms, identify the root causes, run systematic checks, apply fixes, and know when to ask for help.
Published by Tasadduq Burney
09 Jan 2026, 03:44 UTC
3 min96.9K views0

Recognizable Symptoms
After toggling hermes:true in react-native.config.js or the package.json flag, users often see:
- App launches but immediately crashes with a stack trace referencing
HermesRuntimeorModuleNotFoundException. - UI freezes or stutters when rendering large lists or heavy images.
- Native modules throw runtime errors like
Cannot find module 'react-native-some-module'. - Build fails with errors about missing
hermes-enginedependency. - Console logs show repeated
Garbage collectionwarnings.
Root Causes Table
| Cause | Typical Symptom | Quick Check |
|---|---|---|
| Hermes flag not enabled in config | App crashes on start | Verify react-native.config.js or package.json |
| Native module compiled for JSC only | Runtime exception in native code | Run react-native info | grep Hermes |
Missing hermes-engine in Gradle or Podfile | Build error: cannot find hermes module | Check Android Gradle build.gradle and iOS Podfile |
| RN version < 0.64 | Build fails when enabling Hermes flag | Run react-native --version |
Legacy code using JSC‑only APIs (e.g., eval patterns) | Crashes or no‑op in JS runtime | Search codebase for JSC‑only features |
| Memory leaks or excessive GC pauses in Hermes | UI freezes on large data sets | Profile memory usage with Android Studio or Xcode |
Systematic Checks
- Confirm Hermes is enabled
# In project root $ react-native info | grep Hermes Hermes: true - Validate RN version
If version < 0.64, upgrade before enabling Hermes.$ react-native --version 0.68.2 - Inspect build scripts
- Android:
android/app/build.gradleshould containproject.ext.react = [ hermesEnabled: true ] - iOS:
ios/Podfilemust includeuse_react_native!(:hermes_enabled => true)
- Android:
- Check native module compatibility
If a module shows# List installed pods or Gradle dependencies $ pod list | grep hermes $ ./gradlew dependencies | grep hermesreact-native-xyz (JSC only), consider updating or replacing it. - Examine startup logs
- Android:
adb logcat | grep Hermes - iOS: Xcode console or
log -s Hermes
- Android:
- Profile memory for GC spikes
# Android Studio Profiler → Memory → GC events # Xcode Instruments → Allocations → Heap
Targeted Fixes
- Enable the flag correctly
// react-native.config.js module.exports = { project: { ios: {}, android: {}, }, dependencies: {}, hermes: true, }; - Upgrade native modules
# Example: react-native-gesture-handler $ npm install react-native-gesture-handler@latest $ cd ios && pod install - Add Hermes dependency to Gradle
// android/app/build.gradle dependencies { implementation "org.webkit:android-jsc-intl:1.10.0" implementation "org.webkit:android-jsc:1.10.0" implementation "org.webkit:hermes-engine:0.9.0" } - Remove JSC‑only code
- Replace
eval('...')withFunction('...')()or static parsing. - Eliminate
global.__fbBatchedBridgeusage.
- Replace
- Optimize data handling
- Use
FlatListwithremoveClippedSubviewsandinitialNumToRendertuned. - Chunk large JSON payloads before passing to JS.
- Use
- Clear caches
# Android $ cd android && ./gradlew clean # iOS $ cd ios && pod deintegrate && pod install # RN $ npm cache clean --force $ watchman watch-del-all $ rm -rf node_modules && npm install
Escalation Criteria
- If the app still crashes after confirming all configuration steps, open an issue on the module’s GitHub repo with logs.
- For persistent UI freezes on iOS, file a bug with Xcode Instruments data.
- If memory profiling shows constant GC spikes with no obvious cause, consider disabling Hermes temporarily to isolate the problem.
- When build fails due to Gradle or CocoaPods errors, consult the official Hermes documentation for the latest dependency versions.
Quick Reference
- Hermes flag:
hermes:trueinreact-native.config.js - Android Gradle:
project.ext.react = [hermesEnabled:true] - iOS Podfile:
use_react_native!(:hermes_enabled => true) - Check Hermes status:
react-native info | grep Hermes - Android log:
adb logcat | grep Hermes - iOS log:
log -s Hermes
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.