Modern, scalable tools. Exceptional developer experience.
Перейти к файлу
Tommy Nguyen ee3b3ec0fe
RFC: React Native WebAPIs (#2504)
* React Native Standard API

* add polyfill examples

* add Lorenzo's first pass, some more in the adoption strategy, and a couple of tweaks

* some more tweaks, add mention to monorepo and infra

* tweaks

* fixup! tweaks

* fixup! tweaks

* allow additional platform implementations

* change the name from standard to webapi

* reflect proper npm org name

* Update text/0002-react-native-webapi.md

Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com>

* Update text/0002-react-native-webapi.md

Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com>

* Update text/0002-react-native-webapi.md

Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com>

* Rename 0002-react-native-webapi.md to 0002-react-native-webapis.md

* Update 0002-react-native-webapis.md

* links to prototypes

* mention Babel plugin

* clarify how the plugin is used

* Battery Status API is deprecated

* feedback

* expand and update the RFC with new information

* small addition to RFC

---------

Co-authored-by: Lorenzo Sciandra <lsciandra@microsoft.com>
Co-authored-by: Lorenzo Sciandra <notkelset@kelset.dev>
2024-01-12 11:05:20 +00:00
.github chore: so long, @afoxman, and thanks for all the fish 2023-07-31 10:10:40 +02:00
.vscode Baseline squash/rebase commit for rfcs branch. 2022-06-23 14:35:45 -07:00
text RFC: React Native WebAPIs (#2504) 2024-01-12 11:05:20 +00:00
.gitignore chore: ignore Yarn files 2023-07-04 13:46:32 +02:00
0000-template.md RFC process and template (#1690) 2022-06-27 09:57:34 +01:00
CODE_OF_CONDUCT.md Baseline squash/rebase commit for rfcs branch. 2022-06-23 14:35:45 -07:00
CONTRIBUTING.md Baseline squash/rebase commit for rfcs branch. 2022-06-23 14:35:45 -07:00
LICENSE Initial LICENSE commit 2019-11-15 13:38:18 -08:00
README.md Fix link to accepted RFCs in README 2022-09-15 10:48:38 -07:00

README.md

React Native Developer Tools RFCs

Welcome, and thank you for taking the time to contribute to this project!

The "RFC" (request for comments) process is intended to provide a consistent and controlled path for making changes to rnx-kit so that all stakeholders can be confident about the direction of the project.

Many changes, including bug fixes and documentation improvements, can be implemented and reviewed using the normal GitHub pull request workflow.

Some changes, though, are "substantial", and we ask that these be put through a bit of a design process and produce a consensus among the community and core development team.

Accepted RFC List

When to follow this process

You should consider using this process if you intend to make "substantial" changes to rnx-kit. Some examples that would benefit from an RFC are:

  • Creating a new tool or API surface
  • Removing code that has already shipped
  • The introduction of new idiomatic usage or conventions, even if they do not include code changes

Some changes do not require an RFC:

  • Rephrasing, reorganizing or refactoring
  • Additions that strictly improve objective, numerical quality criteria (speedup, better browser support)
  • Additions only likely to be noticed by other implementors, yet be invisible to users.

Before proposing an RFC

A hastily-proposed RFC can hurt its chances of acceptance. Low quality proposals, proposals for previously-rejected ideas, or those that don't fit into the roadmap, may be quickly rejected. This can be demotivating for the unprepared contributor. Laying some groundwork ahead of the RFC can make the process smoother.

Although there is no single way to prepare for submitting an RFC, it is generally a good idea to pursue feedback from other developers beforehand, to ascertain whether or not the RFC is desirable. You can use a new discussion topic for this purpose. Expect that throughout the RFC process, you will need to make a concerted effort toward consensus-building.

As a rule of thumb, receiving encouraging feedback from long-standing project developers, and particularly members of the core team, is a good indication that the RFC is worth pursuing.

From proposal to acceptance

In short, to get a major feature added to rnx-kit, you must first get an RFC proposal accepted. Once accepted, the RFC is merged into the rfcs branch and may be implemented with the goal of eventual inclusion into rnx-kit.

  • Fork the rnx-kit repo http://github.com/microsoft/rnx-kit
  • Check out the rfcs branch
  • Copy 0000-template.md to text/0000-rfc-title.md (where "rfc-title" is a unique title in kebab-case. Don't assign an RFC number).
  • Fill in the RFC. Put care into the details: RFCs that do not present convincing motivation, demonstrate understanding of the impact of the design, or are disingenuous about the drawbacks or alternatives, tend to be poorly-received.
  • Submit a pull request targeting the rfcs branch. The RFC will receive design feedback from the larger community, and the author should be prepared to revise it in response.
  • Build consensus and integrate feedback. An RFC that has broad support is much more likely to make progress.
  • Eventually, the core team will decide whether the RFC is a candidate for inclusion in rnx-kit. Note that a core team review may take a long time, and we suggest that you ask members of the community to review it first.
  • If the RFC is a candidate for inclusion, it will enter a "final comment period" lasting 7 calendar days. The beginning of this period will be signaled with a comment and label on the pull request.
  • The RFC can be modified based upon feedback from the core team and the community. Significant modifications may trigger a new final comment period.
  • The RFC may be rejected by the core team after public discussion has settled and comments have been made summarizing the rationale for rejection. A member of the core team will then close the associated pull request.
  • The RFC may be accepted after the final comment period. A core team member will then assign an id number to the RFC, create a matching issue in rnx-kit, and merge the RFC pull request.

Accepted RFC lifecycle

Once the RFC is accepted, anyone may implement it and submit their work as a pull request to the rnx-kit repo. While it is not necessary that the author of the RFC write the implementation, it is by far the most effective way to see an RFC through to completion. Authors should not expect other developers to take on the responsibility of implementing their accepted proposal.

Becoming accepted is not a rubber stamp, and in particular does not mean a pull request will ultimately be merged. Instead, it means that the core team has agreed to the RFC in principle and is amenable to merging it. Further, the fact that the RFC is accepted implies nothing about what priority is assigned to its implementation, nor whether anyone is currently working on it.

Once accepted, an RFC should not be substantially changed. Only minor amendments should be submitted through follow-up pull requests. These typically occur in response to changing code and documentation in the rnx-kit repository. If substantial changes are needed, a new RFC must be proposed, with a note added to the original RFC.

RFC review process

While an RFC pull request is open, the core team may schedule meetings with the author and/or relevant stakeholders to discuss the issues in greater detail. In some cases, the topic may be discussed at a core team meeting. In either case, a meeting summary will be posted back to the RFC pull request.

The core team will eventually make a final decision about each RFC after the benefits and drawbacks are well understood. These decisions can be made at any time. Once a decision is made, the RFC pull request will either be merged or closed. In either case, if the reasoning is not clear from the pull request discussion, the core team will add a comment describing the rationale for the decision.

Inspiration

The rnx-kit RFC process owes its inspiration to the Rust RFC process, the React RFC process, and the NPM RFC process.

This is an evolving process, and we are open to improving it.