{"id":13468508,"url":"https://github.com/npm/rfcs","last_synced_at":"2025-04-06T14:10:02.847Z","repository":{"id":37587679,"uuid":"131072921","full_name":"npm/rfcs","owner":"npm","description":"Public change requests/proposals \u0026 ideation","archived":false,"fork":false,"pushed_at":"2024-10-03T06:00:54.000Z","size":645,"stargazers_count":740,"open_issues_count":164,"forks_count":243,"subscribers_count":73,"default_branch":"main","last_synced_at":"2025-03-30T13:05:04.334Z","etag":null,"topics":["collaborators","discussion","npm","npm-cli","open","package-manager","proposal","rfc","rfc-process","rfcs"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/npm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-25T23:06:02.000Z","updated_at":"2025-03-18T21:49:02.000Z","dependencies_parsed_at":"2023-02-14T05:01:21.290Z","dependency_job_id":"fa83ee31-b98f-450f-b110-0ec31aa18128","html_url":"https://github.com/npm/rfcs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/npm%2Frfcs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/npm%2Frfcs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/npm%2Frfcs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/npm%2Frfcs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/npm","download_url":"https://codeload.github.com/npm/rfcs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247492513,"owners_count":20947544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collaborators","discussion","npm","npm-cli","open","package-manager","proposal","rfc","rfc-process","rfcs"],"created_at":"2024-07-31T15:01:12.514Z","updated_at":"2025-04-06T14:10:02.810Z","avatar_url":"https://github.com/npm.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","rtfs","package-manager","Tools"],"sub_categories":["redux 扩展"],"readme":"# RFC Process\n\nThis document describes the RFC process for the [npm\nCLI](https://github.com/npm/cli), and provides a way for the [npm CLI\nteam](https://github.com/orgs/npm/teams/cli-team) and the wider community\nto have discussions about the features and direction of the package\nmanager.\n\n## What is an RFC?\n\nThe name is a reference to the **IETF's Request For Comments** process, and\ninvolves a document or series of documents which are drafted, reviewed, and\neventually ratified (approved) by the npm team through discussion\namong those interested, both within and outside of the npm team.\n\nAn RFC can propose any change to the npm CLI itself, and may include npm\nregistry changes meant to support that CLI change.\n\n## Rough Consensus\n\nThe development of new features within the npm CLI follows a [Rough\nConsensus](https://tools.ietf.org/html/rfc7282) model, similar to the IETF.\n\nThe following points are intended to help you understand and participate in\nthis process productively.\n\n### Scope of This Process\n\nThis RFC process is limited to issues concerning the [npm\ncli](https://github.com/npm/cli) and the web services that support it.\n\nOf course we operate within a broad community ecosystem, and will often\nchoose to implement features in a way that is compatible with other package\nmanagement tools in the JavaScript community.  However, if a given proposal\ncannot or will not be implemented by other package managers, that is not in\nitself reason enough to abandon a proposal.  We are here to make _npm_\nbetter.\n\n### Full Consensus is Not The Goal\n\nIt is not our intention, or within our ability, to accomodate every\npossible objection to any given proposal.  It _is_ our intention to surface\nall such objections, and make an informed decision as to whether the\nobjection can be addressed, should be accepted, or is reason enough to\nabandon the proposal entirely.\n\nWe encourage you to participate in these discussions, and to feel free and\ncomfortable bringing up any objections that you have or can imagine (even\nif you don't entirely agree with the objection!)\n\nOur job together then, is to ensure that the objection is given a fair\nhearing, and is fully understood.  Then (either in the pull request\ncomments, or in our OpenRFC meetings), we will decide whether the proposal\nshould be modified in light of the objection, or the objection should be\nignored, or if the proposal should be abandoned.\n\nIf an objection is brought up a second time without any relevant changes,\nafter having already been addressed, then it will be ignored.  Only _new_\nobjections merit new or continued consideration.\n\n### Iterate on Building Blocks\n\nFrequently a feature will be proposed or even fully specified in an RFC,\nand upon analysis, the feedback might be to cut it into separate RFCs, or\nimplement another proposal first.\n\nThis can be frustrating at times, but it ensures that we are taking care\nto improve npm iteratively, with thorough consideration of each step along\nthe way.\n\n### Implementation as Exploration\n\nTypically, RFCs are discussed and ratified prior to implementation.\nHowever, this is not always the case!  Occasionally, we will develop a\nfeature then write an RFC after the fact to describe and discuss it prior\nto merging into the latest npm release.\n\nVery often, an RFC will be difficult to examine without running code.  In\nthose cases, we may opt to develop a proof of concept (or even fully\nproduction-ready implementation) of an RFC in process, in order to test it\nin reality before accepting it.\n\nEven when an RFC _is_ accepted, during implementation it is common to note\nadditional objections, features, or decisions that need to be made.  In\nthese cases, we may propose an amendment to a previously ratified RFC.\n\n### Final Authority\n\nThe ultimate authority as to the ratification of any given RFC proposal is\nthe npm CLI team, as they have ultimate authority over the direction and\ndevelopment of the actual thing these RFCs are about.\n\n## How do I create an RFC?\n\n* Fork https://github.com/npm/rfcs\n* Copy `accepted/0000-template.md` into `accepted/0000-your-rfc-name.md`\n* Fill in and edit the template with your proposal\n* Submit a PR to the `npm/rfcs` repo\n\n## How does review work?\n\nThe official place for discussion for a proposed RFC is its pull request.\nAnyone, both npm collaborators and non-collaborators, may participate in the\ndiscussion and ask questions and provide (constructive) feedback. Keep in mind\nthat only npm collaborators are able to ratify the RFC itself, even if other\nusers can comment.\n\nAll discussions surrounding an RFC are covered by the [npm Code of\nConduct](https://www.npmjs.com/policies/conduct). Please keep conversations\nconstructive, civil, and low-temperature. If tensions flare during discussion,\nthe npm team may, at its own discretion, moderate, remove, or\nedit posts, as well as locking the discussion on that PR or the entire RFCs\nrepository.\n\n## How do RFCs get ratified?\n\nAn RFC is ratified when there is consensus among npm collaborators that it\nshould be accepted, and all objections have been considered.  At that\npoint, it will be merged into the `latest` branch, and will be considered\n\"ratified\".\n\nIt is common for an RFC to require multiple rounds of editing to address\nconcerns brought up in the discussion.\n\nThe RFC may be rejected altogether at the discretion of npm collaborators.\nReasons for this may include, but are not limited to:\n\n- Objections are raised that are deemed to be relevant to the npm CLI, and\n  cannot be reasonably addressed within the RFC.\n- The feature conflicts with another intended feature, or otherwise does\n  not align with the future development direction of the npm CLI.\n- The feature described is prohibitively difficult to implement.\n- The feature described is better addressed by an alternate proposal.\n\n## What happens after ratification?\n\nOnce an RFC is ratified, the npm team agrees to merge a corresponding PR\nimplementing the described changes, provided it passes a standard code\nreview by the maintainers. It is **not** a guarantee of implementation, nor\ndoes it obligate the npm team itself to implement the requested changes.\n\nActual integration into the CLI may also be deferred to a later date, or a\nlater semver-major CLI release, at the npm collaborators' discretion. All\nthe RFC does is communicate the team's intention to work in a given\ndirection.\n\nActual development work on the npm CLI will be ordered based on priorities\nand resources that are well outside the scope of this RFC process.\n\n### Implementation\n\nWhen the changes described in an RFC have been implemented and merged into the\nrelevant repository (and thus, due to be released), the corresponding RFC will\nbe moved from `accepted/` to `implemented/`.\n\nIf you'd like to implement an accepted RFC, please make a PR in the\nappropriate repo and mention the RFC in the PR.  Feel free to do this even\nfor work-in-progress code.  The npm CLI team will provide guidance to\nensure that the patch meets our standards and addresses the proposed RFC.\n\n### Withdrawal\n\nFrom time to time npm collaborators will review RFCs awaiting\nimplementation to ensure their accuracy and relevance. In cases where a\npreviously ratified RFC is deemed to no longer be a viable candidate for\nimplementation, an [**amendment section**](withdrawn/0000-template.md) will\nbe added **to the top** of the document outlining the reason for repeal and\nsubsequently moved to the `withdrawn/` section of this repository.\n\n## How do I change an RFC after ratification?\n\nRFCs themselves are typically only modified after ratification to address\nunanswered questions that may require implementation exploration.\n\nMore often, if an RFC has been previously ratified, and either cannot be\nimplemented as described, or should be superceded by another proposal, it\nwill be withdrawn as part of another RFC submitted through this process.\n\n---\n\n## Open Office Hours\n\nIn our ongoing efforts to better listen to \u0026 collaborate with the community, we've started an open office hours call that helps to move conversations on RFCs forward as well as help answer broader community questions. It is notably a call without an agenda but provides a synchronous forum to engage with the community beyond the discussion/comment threads in issues \u0026 PRs.\n\n### When?\n\n#### ~Wednesday's @ 2:00 PM EST~ UNTIL FURTHER NOTICE, OPEN OFFICE HOURS HAVE BEEN SUSPENDED\n\n**Cadence:**\nThis event is scheduled to take place **weekly**. Previous meetings (including \"Open RFC\" calls) agendas \u0026 notes can be found [here](https://github.com/npm/rfcs/issues?q=is%3Aissue+sort%3Aupdated-desc+is%3Aclosed+label%3Ameeting) or watched on [YouTube](https://www.youtube.com/playlist?list=PLQso55XhxkgBKhtFahRx20wyWE488kKJJ).\n\n### How to join?\n\n**Add to your Calendar:**\n\nYou can track all **npm** public events by adding/tracking our **public events calendar**:\n\n* gCal: [`https://calendar.google.com/calendar/embed?src=c_a0133cbf87923c19822d1e868565c3ed281dc47859d9523a2462f4a6a57f20c8%40group.calendar.google.com`](https://calendar.google.com/calendar/embed?src=c_a0133cbf87923c19822d1e868565c3ed281dc47859d9523a2462f4a6a57f20c8%40group.calendar.google.com) \n* iCal: [`https://calendar.google.com/calendar/ical/c_a0133cbf87923c19822d1e868565c3ed281dc47859d9523a2462f4a6a57f20c8%40group.calendar.google.com/public/basic.ics`](https://calendar.google.com/calendar/ical/c_a0133cbf87923c19822d1e868565c3ed281dc47859d9523a2462f4a6a57f20c8%40group.calendar.google.com/public/basic.ics)\n\n**Zoom Link:** You can join the Public Open Offices hours Zoom calls [here](https://github.zoom.us/j/93497811229?pwd=SjJWaVd1V2dEZkMvUWRMQlFYdVgzQT09)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnpm%2Frfcs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnpm%2Frfcs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnpm%2Frfcs/lists"}