In a real app
To check which engine is running, !!global.HermesInternal in the console is enough, and HermesInternal.getRuntimeProperties() gives the exact version. The pitfall the React Native team documents: if the bundle is loaded in a non-standard way (a bundle downloaded by a home-grown update system, say), HermesInternal can be present while the app is loading plain JavaScript instead of .hbc bytecode. The startup gain vanishes with no error message. With EAS Update, the published bundle is compiled to bytecode for the build’s Hermes version.
Hermes is only worth measuring in release. A debug build keeps sources and debugging hooks, and any startup number taken on it is wrong. npx expo run:ios --configuration Release or yarn android --mode release give the real figure. On the language side, Hermes implements ECMAScript at its own pace; an Intl polyfill or a recent API can be missing, which is why date and number formatting should be tested on device rather than in Node.
For Hermes V1, the switch is automatic from 0.84 (Expo SDK 56 and later). Going back to the previous Hermes means pinning hermes-compiler to 0.15.0 in package.json (overrides or resolutions), setting hermesV1Enabled=false on Android and RCT_HERMES_V1_ENABLED=0 at pod install, which forces React Native to build from source. You need a specific reason to do that.
Related terms
JSI (JavaScript Interface)
The C++ API that lets JavaScript hold direct references to native objects with no serialization: the foundation of the New Architecture.
Cold start (startup time)
Launching the app from scratch, process included: native init, bundle load, first React render, up to a usable screen (TTI).
React Native DevTools
React Native’s built-in debugger since 0.76, based on Chrome DevTools: console, breakpoints, network, profiling, React tree.
Prebuilt (precompiled React Native)
React Native core shipped as precompiled binaries (iOS XCFrameworks, Android AARs) downloaded at build time instead of rebuilt from source.
Metro
React Native’s JavaScript bundler: it resolves, transforms, and serializes your code into a bundle, and runs the dev server.