In 2018, the React Native team focused on large scale re-architecture of React Native. They are planning to better support the thriving population of React Native users and collaborators. It's time to share details about what has been worked on.
The vision for React Native is:
- A healthy GitHub repository. Issues and pull requests get handled within a reasonable period of time.
- Increased test coverage.
- Commits that sync out from the Facebook code repository should not break open source tests.
- A higher scale of meaningful community contributions.
- Stable APIs, making it easier to interface with open source dependencies.
- Facebook uses the same public API as open source
- React Native releases that follow semantic versioning.
- A vibrant eco-system. High quality ViewManagers, native modules, and multiple platform support maintained by the community.
- Excellent documentation. Focus on helping users create high quality experiences, and up-to-date API reference docs.
To help achieve the vision:
The goal is to reduce the surface area of React Native by removing non-core and unused components. The non-core components will be transferred to the community to allow it to move faster. The reduced surface area will make it easier to manage contributions to React Native.
WebView is an example of a component that was transferred to the community. A workflow is being worked on that will allow internal teams to continue to use the components after removed them from the repository. Dozens more components have been identified to give ownership of to the community.
Open Sourcing Internals and Updated Tooling
The React Native development experience for product teams at Facebook is quite different from open source. Tools that may be popular in the open source community could potentially not be used at Facebook. Instead, there could be an internal tool used for the same purpose. In some cases, Facebook teams have become used to tools that do not exist outside of Facebook. These disparities can pose challenges when open sourcing upcoming architecture work.
Programmers are working on releasing the internal tools and improving support for tools popular with the open source community. Here's a non-exhaustive list of projects being focused on:
- Support 64-bit libraries on Android.
- Enable debugging under the new architecture.
- Improve support for CocoaPods, Gradle, Maven, and new Xcode build system.
When Facebook engineers publish code, it's considered safe to land if it passes all tests. These tests identify whether a change might break one of the React Native surfaces. Yet, there are differences in how Facebook uses React Native. This has allowed the opportunity to break React Native into open source.
Facebook will consume React Native via the public API, the same way open source does, to reduce unintentional breaking changes. The goal is to converge on a stable, public API, leading to the adoption of semantic versioning in version 1.0.
React Native is one of the top open source projects on GitHub by contributor count. That is incredibly exciting. Initiatives that lead to involved contributors will continue to happen, such as increased transparency and open discussion. The documentation is one of the first things someone new to React Native will encounter, yet it has not been a priority. The React team is trying to adjust this, starting with bringing back auto-generated API reference docs, creating additional content focused on creating quality user experiences, and improving release notes.
New projects will continue to be released throughout the next year or so. Some of these efforts are already ongoing, such as JSI which has already landed in open source. Others will take a bit longer to complete, such as reducing the surface area. Stay tuned for more updates.