React Native 0.84: Hermes V1, Precompiled Binaries, and More – Your Key Questions Answered
React Native 0.84 has arrived, bringing a host of improvements that streamline development and boost app performance. With Hermes V1 now the default JavaScript engine, precompiled iOS binaries enabled out of the box, and continued removal of legacy architecture code, this release marks a significant step forward. Below we address the most pressing questions developers have about upgrading to React Native 0.84.
What is Hermes V1 and why is it now the default JavaScript engine in React Native 0.84?
Hermes V1 is the next major evolution of the Hermes JavaScript engine, which has been the default for React Native since version 0.70. In React Native 0.84, Hermes V1 becomes the default engine on both iOS and Android. Previously, it was available as an experimental opt-in since React Native 0.82. This change means that every new app built with React Native 0.84 will automatically leverage the enhanced compiler and virtual machine improvements in Hermes V1. The engine delivers significantly better JavaScript execution speed and reduced memory usage compared to its predecessor, without requiring any additional configuration from developers. By making it the default, React Native ensures that all apps benefit immediately from these performance gains, setting a new baseline for mobile app performance with React Native.
How does Hermes V1 improve the performance of my React Native app?
Hermes V1 brings measurable performance improvements to your app through two main avenues: the compiler and the virtual machine (VM). The compiler now generates more efficient bytecode, resulting in faster script parsing and execution. The VM optimisations reduce memory footprint and improve garbage collection, leading to smoother animations and quicker startup times. In practice, you can expect reduced time-to-interactive, lower jank during navigation, and better overall responsiveness. Because Hermes V1 runs JavaScript ahead-of-time, it eliminates the need for a JIT compiler, making it especially suited for mobile environments where battery life and CPU resources are limited. These improvements are applied automatically when you upgrade to React Native 0.84, so your users will enjoy a snappier experience without any code changes.
Do I need to do anything to migrate to Hermes V1?
No migration work is required. If your app was already using Hermes (the default since React Native 0.70), you will automatically start using Hermes V1 after upgrading to version 0.84. The switch happens seamlessly with no changes to your package.json, podfiles, or Gradle configuration. React Native 0.84 simply promotes the existing Hermes integration to V1. For apps that had opted into Hermes V1 experimentally in earlier versions, nothing changes—the experience is exactly the same. The only exception is if you previously opted out of Hermes entirely; those apps will not be forced to use Hermes, but the recommendation is strongly in favour of staying with the default engine for best performance.
How can I opt out of using Hermes V1 if needed?
While Hermes V1 is the default, you can still revert to the legacy Hermes version if compatibility issues arise. On iOS, set environment variables RCT_HERMES_V1_ENABLED=0 and RCT_USE_PREBUILT_RNCORE=0 when installing CocoaPods. On Android, add hermesV1Enabled=false to android/gradle.properties and configure the app to build React Native from source. Alternatively, use a package manager override to force the legacy hermes-compiler package version 0.15.0. For example, in package.json with Yarn: "resolutions": { "hermes-compiler": "0.15.0" }. Note that opting out may require extra build steps and is only recommended for specific scenarios where Hermes V1 is incompatible with your codebase.
What are the benefits of precompiled iOS binaries being the default?
Starting with React Native 0.84, iOS apps use precompiled binaries by default. This means that during pod install, a prebuilt .xcframework is downloaded instead of compiling React Native core from source. The result is a dramatic reduction in clean build times—often from many minutes down to seconds. For developers working on complex projects or CI pipelines, this improvement alone can save hours of waiting per week. The precompiled binaries are identical to the source-built versions in functionality, so no behaviour changes occur. If you need to build from source (for instance, to use a different Hermes engine or make custom modifications), you can disable this by setting RCT_USE_PREBUILT_RNCORE=0 during pod installation. For the vast majority of projects, however, the default setting is the right choice.
What changes were made to the Legacy Architecture in this release?
React Native 0.84 continues the removal of Legacy Architecture code that began in 0.82. On iOS, the experimental flag RCT_REMOVE_LEGACY_ARCH introduced in 0.83 is now enabled by default, meaning legacy architecture contributions are excluded from the build. This reduces both compilation time and app binary size. On Android, similar legacy class removals are ongoing. Since the New Architecture has been the only runtime option since 0.82, the removal of legacy code is safe for all apps already using the New Architecture. No breakages are expected, but if you still rely on any legacy React Native internals, you may need to update your code. The core team recommends ensuring full New Architecture compatibility before upgrading to 0.84.
What is the new minimum Node.js version requirement in React Native 0.84?
React Native 0.84 sets a new baseline of Node.js 22 as the minimum supported version. This aligns with Node.js’s active LTS schedule and ensures that developers have access to modern JavaScript features and improved tooling performance. If your development environment currently uses an older Node.js version (for example, 18 or 20), you will need to upgrade to 22 or later to continue working with React Native 0.84. The upgrade is generally straightforward using a version manager like nvm or fnm. The higher Node.js version also brings security updates and better compatibility with the latest npm packages, making it a worthwhile update for any JavaScript developer.
Related Articles
- Building with Swift: Powering TelemetryDeck's Privacy-Focused Analytics at Scale
- Plex Price Increases Confirm Jellyfin as the Superior Self-Hosting Choice
- Apple's Custom Modem Rollout for iPhone 18 to Unlock Key Privacy Feature Across All Models
- Gemini's Speckled Animation Rollout: From iOS to Android – Your Questions Answered
- Upgrading to React Native 0.84: Embrace Hermes V1 and Faster Builds
- Building VR Apps with React Native on Meta Quest: A Developer's Guide
- Creating a SwiftUI Document Scanner with Smart Auto-Capture and PDF Export
- Flutter Makes Swift Package Manager Default for iOS and macOS, Bidding Farewell to CocoaPods