Skip to content

Commit 9e8877e

Browse files
committed
Add organization repository proposal and plan docs
1 parent 4dbdc9a commit 9e8877e

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# What repositories belong in React Native Community?
2+
3+
## Summary of the current state
4+
5+
#### The React Native Community organization has no official policy for what repositories belong or do not belong in the organization. It currently is home to four categories of repositories:
6+
7+
1) modules that were initially in core but separated out (async-storage, etc).
8+
2) packages used to support these modules (bob, etc).
9+
3) resources for the react-native community (discussions-and-proposals, upgrade-helper, releases, etc).
10+
4) arbitrary modules that were added at some point for different reasons (video, camera, linear-gradient, etc).
11+
12+
> :bulb: [Check out this gist](https://gist.github.com/brentvatne/9ab778c9d68f48e47c9987690232d131) for a full list of repositories and their groupings
13+
14+
#### React Native Community is perceived by developers in the ecosystem to be a 2nd party organization (not quite "core", blessed and worked on by Facebook and the core team, and not on the same level as other third parties) and packages are therefore assumed to be high quality, well supported, and generally trustworthy.
15+
16+
Perceived affiliation between Facebook and the repositories in the organization is not desirable for Facebook or the community, but it's hard to avoid. The organization has some "official" repositories like `discussions-and-proposals` and `releases`, and so putting other libraries next to them naturally has this effect. The result is that the libraries in the organization have a marketing advantage over other libraries in the ecosystem, and this is counterproductive to creating an ecosystem where the best projects rise to the top.
17+
18+
#### Developers use the React Native Community organization to discover packages ("does React Native Community have a package for X?") rather than a tool that is better suited for the job.
19+
20+
Given the previous point, it makes sense that users will make the React Native Community organization their first stop in discovering libraries to use in their projects. GitHub organizations are not meant to serve as a directory for a community of projects and does a poor job of it compared to a purpose-built tool, such as React Native Directory, which is capable of listing projects from any organization and providing additional context to help developers make an informed decision.
21+
22+
#### Authors and users of libraries frequently request that a library be moved to React Native Community.
23+
24+
This could be because it is no longer maintained, or the author wants help, or users want more confidence that it will continue to be maintained, or the author wants to promote their library and get a boost to their library downloads and improve their CV or ability to sell their services to clients by association with the organization.
25+
26+
The incentives for a developer to try to get a repository into the React Native Community organization hint at the underlying issues discussed above.
27+
28+
There is no clear benefit to including tens or hundreds of libraries maintained by distinct groups of people (or not maintained) in a single organization, and so we have been holding off on adding new repositories to the organization until some clarity is achieved (hopefully through this discussion).
29+
30+
## Proposed change
31+
32+
#### React Native Community will transition towards hosting only the repositories that fit into category 3.
33+
34+
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.
35+
36+
Libraries that fit into categories 1, 2 and, and 4 will be moved to other organizations or users. For example, Callstack might take over some projects that they actively maintain and Microsoft might take others. Unaffiliated developers would just move the repository to their own personal GitHub or an organization built specifically for the repository, eg: http://github.com/react-navigation/. An action plan can be detailed at a later date.
37+
38+
This also solves the issue of arbitrarily blessing specific solutions that may not be the best now or in the long term for the ecosystem. Rather than blessing specific libraries, we can direct developers to the [React Native Directory website](https://reactnative.directory) and continue iterating on it to help developers assess quality and discover and select the best packages for their needs. Additionally, we can move React Native Directory back to React Native Community. Developers who wanted to add their repository to the organization for marketing purposes can put it on the directory instead.
39+
40+
### Tradeoffs
41+
42+
- Many packages have moved their name to the @react-native-community npm scope and removing that would create thrash. This is not a big deal for packages that are directly consumed by the developer, in my opinion, but it can be in places where the package is heavily depended on by other packages, eg: @react-native-community/async-storage is a building block for many other libraries.
43+
- Lean core libraries include some fundamental building blocks for most apps, like slider, net-info, progress-view, webview, and async-storage. Will moving them out of the organization make them more difficult to discover?
44+
45+
## Result
46+
47+
Partners voted unanimously to approve the proposed change on 08/19/2020.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Plan for applying the new React Native Community repository policy
2+
3+
To summarize the descision made in ["What repositories belong in React Native Community?"](https://github.com/react-native-community/discussions-and-proposals/blob/master/partners/0000-organization-repository-policy.md):
4+
5+
> 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 only exception to this is React Native CLI, which will continue to live in React Native Community as long as the maintainers believe this to be the best home for it.
6+
7+
[The partners making this decision](https://github.com/facebook/react-native/blob/master/ECOSYSTEM.md#partners) prioritize the health and growth of the community of React Native developers, which is much larger than those with maintainer access to any specific organization. High quality modules can and should come from anyone, anywhere. We recognize that developers value using the react-native-community brand as a library quality heuristic, but we believe that there are heuristics that are more useful and also healthier for the community. Our focus will be on things that scale; helping discoverability, making it easy to find quality packages, and building tooling to help create and maintain these packages.
8+
9+
Now that a policy has been decided, we can move forward with enacting the changes to align the organization with it. As a maintainer of one of these packages, you don't need to wait to start making these changes. While you may follow what you think is best for your package, we are providing some recommended steps we think will help ease the migration.
10+
11+
That said, **we know that changing package names can be challenging and a difficult transition for the ecosystem**. We will take care to support the community through this migration as best as we can.
12+
13+
## Where on GitHub will the repositories be moved to?
14+
15+
Our recommendation for lean core libraries and libraries with multiple maintainers is to move them to their own dedicated organization, for example: react-native-webview would be moved to a new organization called react-native-webview, and would live at react-native-webview/webview. We have gone ahead and reserved all of the organizations by these names where possible, reach out to @brentvatne to have him transfer ownership to you if needed.
16+
17+
If a library has just one maintainer, or is maintained only by developers from a single company, then the repository may be better suited for the individual or company GitHub account.
18+
19+
Libraries that have been archived or otherwise abandoned will be moved to a React Native Community Archive organization in order to keep the repository list focused.
20+
21+
If you a maintainer of a repository in the React Native Community organization and have any questions or concerns about how to proceed, or if you lack the required organization permissions, please let it be known in #community-hub. If you are not sure if you have the right/authority to act on moving a repository but consider yourself to be the primary maintainer, please also raise this in #community-hub.
22+
23+
## What should be done about packages that are scoped under @react-native-community on npm?
24+
25+
We recommend deprecating the latest release with a message that the package name has changed, and republishing that exact same release under the new package name. Ideal package names may not always be available, but you might be able to reach out to the current owners of those packages and have them transfer ownership.
26+
27+
Most packages that were not formerly available as part of React Native core are already unscoped. If your package used to exist without the @react-native-community scope and you have since migrated to it, you may consider migrating back to the original package name.
28+
29+
## How will developers discover commonly needed packages like async-storage, slider, webview, net-info, and others?
30+
31+
[React Native Directory](https://reactnative.directory/) is the recommended resource for library discovery. We have surfaced it in the official documentation and may at some point merge the two. Further discussion on how we can surface some extremely commonly required dependencies should continue on [this issue](https://github.com/react-native-directory/website/issues/444).

partners/README.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Partners
2+
3+
Members of the organizations [listed as partners on the react-native repository](https://github.com/facebook/react-native/blob/master/ECOSYSTEM.md#partners) collaborate to manage the React Native Community organization and related community tools, such as React Native Directory. Decisions that will meaningfully change the React Native Community organization require approval by a majority of partners.
4+
5+
The scope of responsibility and list of partners is expected to change over time, and will be documented here alongside other decisions and actions.
6+
7+
## Documentation
8+
9+
- [0000: What repositories belong in React Native Community?](0000-organization-repository-policy.md)
10+
- [0001: Plan for applying the new React Native Community repository policy](2018-08-cli-meeting.md)

0 commit comments

Comments
 (0)