Part 1 · Fundamentals

Hermes: build-time bytecode to a running JS heap

Prerequisites: Start here / basic technical literacy

Build and launch path

Release-build path; dev builds and OTA delivery can use different packaging steps. Nodes: TS / JS source, Metro bundle, Hermes compiler, Bytecode file, Hermes VM.
Release-build path; dev builds and OTA delivery can use different packaging steps. [S01] [S02]

Mental model verified

Metro prepares the JS bundle, the Hermes compiler produces bytecode for a release build, and the bundled Hermes engine loads and executes it on device. The engine owns JS objects and garbage collection; React Native supplies host APIs.

[S01] [S02]

Worked flow synthesis

Imagine opening a policy list: the binary loads its JS bundle, modules initialize, React executes the first render and asks Fabric to represent host views. Bytecode avoids treating the source file as raw JS to parse at launch; it does not execute the screen for you.

[S01] [S05]

Engineering decision synthesis

Measure startup and heap in a release build on representative Android and iOS devices. Do not quote historical Hermes-versus-JSC gains as a guarantee for your app.

[S01] [S02]

Failure mode and improvement synthesis

Large eager module initialization or a long synchronous JS task can dominate startup despite bytecode. Split and defer noncritical work, then compare the same user journey before and after.

[S01] [S14]
Keep this: Hermes executes the app’s JS; the release bundle is normally compiled to Hermes bytecode at build time.
Check yourself: Does precompiled bytecode mean app startup and every JS operation become free?

No. It removes much runtime parse/compile work; loading, initialization, module evaluation, JS execution and GC still consume time.

Sources & further reading

  1. [S01] Using Hermes

    React Native · official documentation or maintainer source · accessed 2026-10-09 · current documentation as accessed; examples conceptual

    Supports: Hermes default, bundled version, release bytecode and measurement.

    Inspect the implementation boundary described by this source.

  2. [S02] Toward Hermes being the Default

    React Native · official documentation or maintainer source · accessed 2026-10-09 · current documentation as accessed; examples conceptual

    Supports: Historical motivation for ahead-of-time compilation; results were context-specific.

    Inspect the implementation boundary described by this source.

  3. [S05] Render, Commit, and Mount

    React Native · official documentation or maintainer source · accessed 2026-10-09 · current documentation as accessed; examples conceptual

    Supports: Shadow trees, layout, diff and host view mounting.

    Inspect the implementation boundary described by this source.

  4. [S14] React Native DevTools

    React Native · official documentation or maintainer source · accessed 2026-10-09 · current documentation as accessed; examples conceptual

    Supports: JS traces, heap snapshots and React profiling; native tools still needed.

    Inspect the implementation boundary described by this source.