|
| 1 | +# React RFCs |
| 2 | + |
| 3 | +Many changes, including bug fixes and documentation improvements can be |
| 4 | +implemented and reviewed via the normal GitHub pull request workflow. |
| 5 | + |
| 6 | +Some changes though are "substantial", and we ask that these be put |
| 7 | +through a bit of a design process and produce a consensus among the React |
| 8 | +core team. |
| 9 | + |
| 10 | +The "RFC" (request for comments) process is intended to provide a |
| 11 | +consistent and controlled path for new features to enter the project. |
| 12 | + |
| 13 | +[Active RFC List](https://github.com/reactjs/rfcs/pulls) |
| 14 | + |
| 15 | +React is still **actively developing** this process, and it will still change as |
| 16 | +more features are implemented and the community settles on specific approaches |
| 17 | +to feature development. |
| 18 | + |
| 19 | +## When to follow this process |
| 20 | + |
| 21 | +You should consider using this process if you intend to make "substantial" |
| 22 | +changes to React or its documentation. Some examples that would benefit |
| 23 | +from an RFC are: |
| 24 | + |
| 25 | + - A new feature that creates new API surface area, and would |
| 26 | + require a feature flag if introduced. |
| 27 | + - The removal of features that already shipped as part of the release |
| 28 | + channel. |
| 29 | + - The introduction of new idiomatic usage or conventions, even if they |
| 30 | + do not include code changes to React itself. |
| 31 | + |
| 32 | +The RFC process is a great opportunity to get more eyeballs on your proposal |
| 33 | +before it becomes a part of a released version of React. Quite often, even |
| 34 | +proposals that seem "obvious" can be significantly improved once a wider |
| 35 | +group of interested people have a chance to weigh in. |
| 36 | + |
| 37 | +The RFC process can also be helpful to encourage discussions about a proposed |
| 38 | +feature as it is being designed, and incorporate important constraints into |
| 39 | +the design while it's easier to change, before the design has been fully |
| 40 | +implemented. |
| 41 | + |
| 42 | +Some changes do not require an RFC: |
| 43 | + |
| 44 | + - Rephrasing, reorganizing or refactoring |
| 45 | + - Addition or removal of warnings |
| 46 | + - Additions that strictly improve objective, numerical quality |
| 47 | + criteria (speedup, better browser support) |
| 48 | + - Additions only likely to be _noticed by_ other implementors-of-React, |
| 49 | + invisible to users-of-React. |
| 50 | + |
| 51 | +## What the process is |
| 52 | + |
| 53 | +In short, to get a major feature added to React, one usually first gets |
| 54 | +the RFC merged into the RFC repo as a markdown file. At that point the RFC |
| 55 | +is 'active' and may be implemented with the goal of eventual inclusion |
| 56 | +into React. |
| 57 | + |
| 58 | +* Fork the RFC repo http://github.com/reactjs/rfcs |
| 59 | +* Copy `0000-template.md` to `text/0000-my-feature.md` (where |
| 60 | +'my-feature' is descriptive. Don't assign an RFC number yet). |
| 61 | +* Fill in the RFC. Put care into the details: **RFCs that do not |
| 62 | +present convincing motivation, demonstrate understanding of the |
| 63 | +impact of the design, or are disingenuous about the drawbacks or |
| 64 | +alternatives tend to be poorly-received**. |
| 65 | +* Submit a pull request. As a pull request the RFC will receive design |
| 66 | +feedback from the larger community, and the author should be prepared |
| 67 | +to revise it in response. |
| 68 | +* Build consensus and integrate feedback. RFCs that have broad support |
| 69 | +are much more likely to make progress than those that don't receive any |
| 70 | +comments. |
| 71 | +* Eventually, the team will decide whether the RFC is a candidate |
| 72 | +for inclusion in React. |
| 73 | +* RFCs that are candidates for inclusion in React will enter a "final comment |
| 74 | +period" lasting 7 days. The beginning of this period will be signaled with a |
| 75 | +comment and tag on the RFCs pull request. |
| 76 | +* An RFC can be modified based upon feedback from the team and community. |
| 77 | +Significant modifications may trigger a new final comment period. |
| 78 | +* An RFC may be rejected by the team after public discussion has settled |
| 79 | +and comments have been made summarizing the rationale for rejection. A member of |
| 80 | +the team should then close the RFCs associated pull request. |
| 81 | +* An RFC may be accepted at the close of its final comment period. A team |
| 82 | +member will merge the RFCs associated pull request, at which point the RFC will |
| 83 | +become 'active'. |
| 84 | + |
| 85 | +## The RFC life-cycle |
| 86 | + |
| 87 | +Once an RFC becomes active, then authors may implement it and submit the |
| 88 | +feature as a pull request to the React repo. Becoming 'active' is not a rubber |
| 89 | +stamp, and in particular still does not mean the feature will ultimately |
| 90 | +be merged; it does mean that the core team has agreed to it in principle |
| 91 | +and are amenable to merging it. |
| 92 | + |
| 93 | +Furthermore, the fact that a given RFC has been accepted and is |
| 94 | +'active' implies nothing about what priority is assigned to its |
| 95 | +implementation, nor whether anybody is currently working on it. |
| 96 | + |
| 97 | +Modifications to active RFCs can be done in followup PRs. We strive |
| 98 | +to write each RFC in a manner that it will reflect the final design of |
| 99 | +the feature; but the nature of the process means that we cannot expect |
| 100 | +every merged RFC to actually reflect what the end result will be at |
| 101 | +the time of the next major release; therefore we try to keep each RFC |
| 102 | +document somewhat in sync with the language feature as planned, |
| 103 | +tracking such changes via followup pull requests to the document. |
| 104 | + |
| 105 | +## Implementing an RFC |
| 106 | + |
| 107 | +The author of an RFC is not obligated to implement it. Of course, the |
| 108 | +RFC author (like any other developer) is welcome to post an |
| 109 | +implementation for review after the RFC has been accepted. |
| 110 | + |
| 111 | +If you are interested in working on the implementation for an 'active' |
| 112 | +RFC, but cannot determine if someone else is already working on it, |
| 113 | +feel free to ask (e.g. by leaving a comment on the associated issue). |
| 114 | + |
| 115 | +## Reviewing RFCs |
| 116 | + |
| 117 | +Each week the team will attempt to review some set of open RFC |
| 118 | +pull requests. |
| 119 | + |
| 120 | +We try to make sure that any RFC that we accept is accepted at the |
| 121 | +weekly team meeting. Every accepted feature should have a core team champion, |
| 122 | +who will represent the feature and its progress. |
| 123 | + |
| 124 | +**React's RFC process owes its inspiration to the [Yarn RFC process], [Rust RFC process], and [Ember RFC process]** |
| 125 | + |
| 126 | +[Yarn RFC process]: https://github.com/yarnpkg/rfcs |
| 127 | +[Rust RFC process]: https://github.com/rust-lang/rfcs |
| 128 | +[Ember RFC process]: https://github.com/emberjs/rfcs |
0 commit comments