React Native 0.84 Ushers in a New Era of Performance and Efficiency with Hermes V1 as Default and Streamlined iOS Builds

React Native 0.84 has been officially released, marking a significant milestone for the popular cross-platform mobile development framework. This latest version introduces a suite of enhancements designed to boost performance, streamline development workflows, and further refine the architecture of applications built with React Native. The most impactful changes include the elevation of Hermes V1 to the default JavaScript engine, the universal adoption of precompiled binaries for iOS builds, and the continued dismantling of the legacy architecture. These updates signal a deliberate push towards a more modern, performant, and efficient development environment for millions of developers worldwide.
Hermes V1 Ascends to Default JavaScript Engine
A cornerstone of the React Native 0.84 release is the official designation of Hermes V1 as the default JavaScript engine for both iOS and Android platforms. This transition, building upon the experimental opt-in introduced in React Native 0.82, represents a substantial leap forward in application performance. Hermes, a JavaScript engine specifically optimized for React Native, has undergone significant evolution. Hermes V1 features advanced improvements to both its compiler and virtual machine (VM), delivering measurably superior JavaScript execution speeds.
The implications of this default status are far-reaching. Developers can now expect enhanced performance out-of-the-box for all new and existing React Native applications without requiring explicit configuration. This translates to faster app startup times, more responsive user interfaces, and a generally smoother user experience. Performance benchmarks from earlier iterations of Hermes have consistently shown reductions in memory usage and an increase in execution speed compared to other JavaScript engines. With V1, these gains are expected to be even more pronounced, potentially closing the performance gap with native applications.
For developers who may need to revert to the legacy Hermes compiler, the release notes provide clear instructions. This can be achieved through package manager overrides in package.json by forcing the installation of the hermes-compiler package. On iOS, this involves passing specific environment variables (RCT_HERMES_V1_ENABLED=0 and RCT_USE_PREBUILT_RNCORE=0) during CocoaPods dependency installation. For Android developers, the option to disable Hermes V1 is available by setting hermesV1Enabled=false in the android/gradle.properties file and configuring the project to build React Native from source. While these opt-out mechanisms are available, the strong recommendation is to embrace Hermes V1 for its performance benefits.
Precompiled Binaries Revolutionize iOS Build Times
Another transformative change in React Native 0.84 is the default activation of precompiled binaries for iOS development. Previously an opt-in feature, this enhancement dramatically slashes build times for iOS applications. Historically, clean builds in React Native iOS projects necessitated compiling the core React Native framework from source, a process that could be time-consuming, especially for larger projects.
With precompiled binaries enabled by default, the pod install process now automatically downloads and utilizes pre-built .xcframework binaries. This eliminates the need for developers to recompile the React Native core during every clean build, leading to significant time savings and a more agile development cycle. The introduction of precompiled binaries represents a strategic move to accelerate the development feedback loop, allowing developers to iterate more rapidly.
The release notes provide guidance for situations where building React Native from source might be necessary, such as opting out of Hermes V1. In such cases, developers can disable precompiled binaries by setting the RCT_USE_PREBUILT_RNCORE=0 environment variable when installing pods. This ensures flexibility for specific project requirements while underscoring the benefits of the default precompiled approach.
Accelerated Demise of the Legacy Architecture
Continuing the strategic migration away from the legacy architecture, React Native 0.84 further purges components associated with it on both iOS and Android. This initiative, outlined in a comprehensive RFC, aims to simplify the codebase, improve maintainability, and pave the way for future architectural innovations.
On iOS, the experimental RCT_REMOVE_LEGACY_ARCH flag, introduced in version 0.83, is now the default behavior. This means that Legacy Architecture code is no longer included in standard iOS builds, contributing to reduced build times and smaller application sizes. Importantly, for applications that have already transitioned to the New Architecture, no breakages are anticipated. The Interop Layer, crucial for maintaining compatibility during the migration phase, remains in place. For developers who still require Legacy Architecture code, the option to re-enable it exists by building from source and using specific flags (RCT_USE_PREBUILT_RNCORE=0 and RCT_REMOVE_LEGACY_ARCH=0) during pod installation.
On the Android front, React Native 0.84 removes a specific set of Legacy Architecture classes. These include various components related to the bridge, such as LazyReactPackage, CxxModuleWrapper, and CallbackImpl, as well as classes from the bridge.ReactInstanceManagerInspectorTarget and modules.debug.DidJSUpdateUiDuringFrameDetector namespaces. Furthermore, several UI manager-related classes, including those for layout animation and debugging, have been removed. This systematic removal is part of a long-term strategy to streamline the Android codebase and enhance its performance and stability.
Node.js 22 Minimum Requirement and Ecosystem Alignment
React Native 0.84 establishes a new baseline for its development environment, mandating Node.js v22.11 or later. This update is not merely a version bump; it is a deliberate step to leverage the advancements and modern JavaScript features available in recent Node.js releases. By requiring a more recent Node.js version, React Native aims to ensure that its tooling ecosystem, including bundlers, linters, and other development utilities, can take full advantage of the latest JavaScript capabilities.
This move also aligns React Native with the broader JavaScript ecosystem, which is increasingly adopting newer Node.js LTS (Long-Term Support) versions. Developers are strongly advised to update their Node.js installations before upgrading to React Native 0.84. Utilizing Node version managers such as nvm (Node Version Manager) or fnm (Fast Node Manager) is highly recommended to facilitate seamless management of different Node.js versions across projects.
Other Notable Enhancements and Refinements
Beyond the headline features, React Native 0.84 incorporates a range of other improvements that enhance the developer experience and application quality.
-
React 19.2.3 Integration: The release includes an update to React 19.2.3, bringing the latest bug fixes and performance improvements from the React core team directly into React Native. This ensures that developers benefit from the continuous innovation within the React ecosystem.
-
ESLint v9 Flat Config Support: React Native’s ESLint configuration has been updated to support ESLint v9’s flat configuration system. This makes it easier for developers to integrate the latest ESLint tooling and best practices into their projects, promoting cleaner and more maintainable code.
-
Accessibility Improvements: Significant attention has been paid to accessibility in this release. Text components that utilize
onPressoronLongPresshandlers will now automatically receive theaccessibilityRole="link"attribute. This ensures that screen readers correctly identify these interactive text elements as links, improving usability for visually impaired users. On Android, extensive work has been done to resolve accessibility state issues with recycled views. This crucial fix ensures that states likeisClickableandOnClickListenerare properly reset when views are reused, preventing screen readers from announcing outdated or incorrect information. -
URL API Enhancements: The
URLandURLSearchParamsAPIs have been brought closer to web standards. Missing standard properties such ashash,host, andpathnamehave been added toURL. Similarly, essential methods likeget,set, anddeletehave been incorporated intoURLSearchParams. A bug related to duplicate entries inURLSearchParamshas also been resolved, providing a more robust and predictable URL handling experience. -
Platform Support Updates: While specific details are often embedded within the changelog, platform support updates are a regular feature of React Native releases, ensuring compatibility with the latest operating system versions and hardware advancements.
-
Deprecations: React Native 0.84 also introduces two deprecations, signaling future changes and guiding developers towards more modern APIs and practices. Developers are encouraged to consult the full changelog for specifics.
A Collaborative Effort and Community Acknowledgement
React Native 0.84 is a testament to the collaborative spirit of the open-source community. The release incorporates over 650 commits from an impressive 95 contributors. This extensive community involvement underscores the vibrant ecosystem surrounding React Native and the dedication of developers worldwide to its advancement. The release notes specifically acknowledge key contributors who made significant impacts on this version, highlighting the power of collective effort in pushing the boundaries of mobile development.
Upgrading to React Native 0.84
For developers looking to leverage the advancements in React Native 0.84, the upgrade process is facilitated by the React Native Upgrade Helper tool, which provides detailed code change comparisons between versions. The comprehensive "Upgrading docs" also offer essential guidance. A new experimental AI skill, upgrade-react-native, is also available for Community CLI Projects, offering an innovative approach to the upgrade process.
For those starting new projects, the npx @react-native-community/cli@latest init MyProject --version latest command will initialize a project with the latest stable version of React Native. For Expo users, React Native 0.84 will be available in expo@canary releases, with the next stable SDK (SDK 56) planned to incorporate the subsequent stable React Native release, 0.85.
React Native 0.84 represents a significant leap forward, solidifying its position as a leading framework for cross-platform mobile development. By embracing performance enhancements like Hermes V1, streamlining critical development workflows with precompiled binaries, and continuing the modernization of its architecture, this release empowers developers to build faster, more efficient, and more accessible mobile applications. The ongoing evolution of React Native, driven by community contributions and a clear architectural vision, ensures its continued relevance and impact in the mobile development landscape.






