Hermes vs V8:Choosing the Right JavaScript Engine for Mobile and Beyond
Hermes and V8 both run JavaScript well, but they optimize for different constraints: Hermes for React Native startup and memory, V8 for broad general-purpose throughput and tooling maturity.
When developers compare JavaScript engines, Hermes and V8 usually show up in very different contexts. V8 powers Chrome and Node.js, while Hermes is designed to make React Native apps start faster and use less memory.
They both execute JavaScript, but they optimize for different constraints. If your team is shipping mobile apps, this difference matters more than most benchmark charts.
The short version
1 Choose Hermes for RN startup
Hermes is usually the practical default when startup latency and memory profile are top priorities in React Native.
2 Choose V8 for broad parity
V8 is strong when you need mature JIT behavior and close parity across browser and server runtimes.
3 Benchmark in context
Neither engine is always faster in all workloads, so measure the flows your users actually experience.
Core design difference
At a high level, the engines have different goals. V8 is a general-purpose, high-performance engine built for browsers and server runtimes, with execution tiers and JIT optimization for hot code paths. Hermes is tuned for mobile constraints in React Native and emphasizes predictable startup plus reduced runtime overhead, including support for precompiled bytecode.
That means the winner changes by metric. For long-running compute-heavy code, V8 often has an advantage once optimization kicks in. For cold start and memory-sensitive mobile flows, Hermes is often the better fit.
Startup and memory in real apps
On mobile, users notice startup latency before they notice peak throughput. Hermes leans into that reality by reducing parse and compilation work during launch when your React Native build includes Hermes bytecode.
# React Native Android release build
./gradlew assembleRelease
This is one reason teams frequently report smoother first-open behavior and lower memory pressure after moving to Hermes in production builds.
Throughput and hot paths
If your workload spends substantial time in hot loops, V8 often benefits from aggressive optimization tiers.
const iterations = 20_000_000;
let total = 0;
console.time('compute');
for (let i = 0; i < iterations; i += 1) {
total += i % 7;
}
console.timeEnd('compute');
console.log({ total });
Benchmarks like this can reward runtime optimization on repeated compute, but real product performance also depends on startup, UI thread pressure, I/O, and rendering. Treat micro benchmarks as hints, not final decisions.
React Native configuration examples
# android/gradle.properties
hermesEnabled=true
use_react_native!(
:path => config[:reactNativePath],
:hermes_enabled => true
)
The exact location of these flags depends on your React Native version and template, but the integration model is consistent: Hermes is treated as the runtime engine for the mobile app.
Side-by-side comparison
| Dimension | Hermes | V8 |
|---|---|---|
| Primary target | React Native mobile apps | Browsers, Node.js, embedded runtimes |
| Startup behavior | Optimized for fast app startup | Strong general-purpose behavior across many workloads |
| Memory profile | Often lower in RN mobile scenarios | Varies by workload and embedding strategy |
| Peak compute throughput | Good, but not the primary pitch | Often excellent on hot optimized paths |
| Tooling maturity | Strong in RN workflows, still evolving | Very mature and widely documented |
Migration checklist
Bottom line
Hermes vs V8 is not a brand contest. It is a runtime strategy question. If your main product surface is React Native mobile, Hermes is usually the practical default because startup and memory are first-order user experience metrics. If your JavaScript must align closely with browser and Node behavior under one dominant engine, V8 remains a strong choice.