We are excited to release a new version of React Native, 0.70.0. This version comes with several improvements like a new unified configuration for Codegen, Hermes as default engine, and full CMake support for Android builds along with a refresh of the documentation for the New Architecture. Read on to learn more!
- New Architecture’s New Documentation
- Hermes as default engine
- A new unified configuration for Codegen
- Android Auto-linking for New Architecture libraries
- Full CMake support for Android builds
- Highlights of 0.70
New Architecture’s New Documentation
Over the last few months, we have been working to add more content to the New Architecture section of the documentation. In the new section you can find migration guides, examples and tutorials to get you up to speed.
Any feedback is more than welcome, please let us know in the react-native-website repository.
Hermes as default engine
React Native 0.70 is the first version with Hermes, our in-house JS engine, enabled by default.
This is the result of collaborative effort between the Hermes team and the React Native team, alongside with the priceless contributions from the community. We worked to improve and fine tune Hermes to make it more performant and deliver highly requested features by the community.
You can read more about it in the official announcement blogpost.
A new unified configuration for Codegen
With 0.70, we introduced a unified way to define the Codegen specs for both iOS and Android. Previously, you had to put the Android configuration in a separate
Now, you can define it directly in the package.json with:
This improvement provides a more consistent experience for library maintainers in migrating their codebases to the New Architecture.
Android Auto-linking for New Architecture libraries
With 0.70, users on New Architecture are able to automatically link libraries without any additional configuration on their Android.mk or CMake files.
Autolinking is a crucial part of the React Native development experience. It allows you to include external libraries with a
yarn add command, without dealing with CocoaPods or Gradle setups.
The New Architecture required us to adapt the auto-linking features to support libraries which are using the Codegen and exposing native code to app developers.
While Autolinking worked well for New Architecture libraries on iOS, the same was not true for Android. With 0.70 we closed this gap and you can now keep on including libraries with
yarn add to your project: they will be linked correctly on any architecture.
Full CMake support for Android builds
Starting from 0.70, users can now use CMake to configure their Native builds. While we don’t expect app users to directly write C++ code, you still need an entry point for the native compilation.
From now on you can use a
CMakeLists.txt file instead of an
Android.mk file for anything Android/Native related in your project.
This change benefits both app and library users on the New Architecture as:
- The CMake file created in your app is way smaller (3 lines of code versus 50+ for Android.mk files). This makes for an easier update experience between React Native versions in the future and less code to maintain on your end.
- Codegen is now generating both
CMakeLists.txt, so libraries should not worry about doing anything if they're using the default setup we provide for New Architecture libraries.
- The Auto-linking mentioned above will work with both CMake and Android.mk files out of the box.
- Despite apps being free to use either
Android.mkor CMake files, the recommended solution in the future would be CMake files (due to better documentation, tooling and ecosystem around CMake).
Highlights of 0.70
As mentioned above, some of the more important improvements in this release are centered around the New Architecture experience. However, there have been other notable changes, including:
- Fix for Catalyst is live, set
truein Podfile (see upgrade-helper diff for details).
- Bumping metro to 0.72.0 which will enable the new React JSX Transform: reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html.
reactnativeutilsjnias it is built from the same sources as
reactnativejniwhich results in ~220 KBs saved from every Android APK build. (https://github.com/facebook/react-native/pull/34339).
There have also been a few breaking changes:
- Removed jest/preprocessor from the react-native package (0301cb285b by @motiz88)
- Remove nonstandard
Promise.prototype.done(018d5cf985 by @motiz88)
Please also note that the version of Metro has been bumped to 0.72, which comes with 5 breaking changes.
And we upgraded some of our dependencies:
- Bump RN CLI to v9.0.0
- Bump Android Gradle Plugin to 7.2.1
- Bump Gradle to 7.5.1
- Bump RCT-Folly to 2021-07-22
- Bump Metro to 0.72
- Bump SoLoader to 0.10.4
You can check out the full list of changes in the changelog.
88 contributors with their 493 commits have helped to make this release possible - thanks everyone! We are also thankful to everyone else who gave their feedback to ensure this release would be as stable as possible.