React Native is a highly popular framework by Facebook to create cross-platform mobile applications using JavaScript. Just like any other tool react-native is not perfect and has its fair share of issues, it still manages to continuously outshine and outgrow the competition by virtue of an active community and the ability to utilize existing packages using npm.
JavaScript has been at the forefront of web development for many years now and the collective efforts of all the contributors have not only propelled it into being the ubiquitous language for web-frontend, but also backend development in the form of Node.js (and Deno). At some point during this growth of JavaScript, npmjs was born. It provided a quick way to add commonly needed features by utilizing existing packages. Since it allowed developers to effortlessly reuse many common modules, JavaScript and npm were soon adapted to be used in all places, from mobile applications in the form of react native and ionic to desktop apps using electron.js, and there are even some actively developed Operating Systems using JavaScript such as NodeOs and the externOS project. All this popularity and growth can be attributed to the ease with which external packages can be imported and used using npm.
React Native Community is an organization that hosts some of the most popular and most important packages used by the react-native community. While there is no official policy on which packages belong in the React Native Community, it has historically hosted packages that were in the official react-native repository but were later separated out and other packages used to support these packages. It also hosts some other arbitrary packages to support common requirements like camera, video, linear gradients, etc.
Besides these packages, React Native Community is also the home for resources for the react-native community. It hosts the repositories to facilitate discussions, lists the releases, and provides tools such as the upgrade-helper among others. While this organization is not affiliated with Facebook, the perceived affiliation due to the presence of several previously core packages, and the presence of repositories that track and facilitate discussions and proposals for react-native and its new releases give the organization additional clout in the community. This leads to the packages hosted within React Native Community being perceived as “official”, high quality, and actively maintained.
Since there is no clear benefit to having many of these packages in the same organization while being maintained by different groups of people, or in many cases, not being actively maintained anymore, the React Native Community decided to adopt a new policy for the repositories that they will host.
“The organization will contain repositories that act as forums for structured discussions and/or provide information about React Native and the ecosystem. These repositories may be purely textual, or they may be tools like the Upgrade Helper and React Native Directory, depending on what is better suited for the job. The organization will not include libraries that developers install and use in their projects.”
This does prompt the debate of having the packages in a centralized organization versus having them distributed in independent repositories. Both have their own pros and cons but the pros of having the packages distributed between multiple organizations or in independent repositories do outweigh the cons by eliminating a single point of failure from the ecosystem and promoting independent developers to contribute to the packages without having to depend on a small set of maintainers to make all the decisions.
Since the core react-native repository no longer includes the packages, and they have been moved out of their home at the React Native Community organization, many of them may no longer be perceived as the “official” package for a task. This can lead to some fragmentation in the developer community but it will also open the gates for other maintainers to create their own versions which may be better optimized, provide more features, or be easier to use. The developers on a lot of react-native projects may see deprecation warnings on their packages from @react-native-community, it may ultimately be for the good as it prevents centralization of resources and keeps up with the spirit of open source by ensuring that all packages have a level playing field.