Hermes vs JavaScriptCore: Choosing the Right JS Engine for React Native
A quick look at why Hermes often outperforms JavaScriptCore in React Native apps and how to switch engines with minimal friction.
Insight
React Native ships with two JavaScript engines: the default JavaScriptCore (JSC) on iOS and Android, and the optional Hermes engine. Hermes compiles JavaScript to bytecode ahead‑of‑time, which reduces startup time, memory footprint, and improves overall frame rates—especially on low‑end Android devices. JSC still offers broader compatibility (e.g., newer ES features) but can be slower to parse large bundles. The trade‑off is usually worth it for production apps that target a wide Android audience, while iOS developers often stay on JSC because Hermes support is newer and may require extra testing.
Example
// app.json (or expo-config.ts)
{
"expo": {
"jsEngine": "hermes",
"android": { "enableHermes": true },
"ios": { "jsEngine": "hermes" }
}
}
This minimal config switches both platforms to Hermes; for bare React Native projects, set enableHermes: true in android/app/build.gradle and add the Hermes pod for iOS.
Takeaway
Enable Hermes early in the project to catch compatibility issues, then measure startup and memory metrics. The performance gain often justifies the extra setup step for Android‑first apps.