An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
NoteDue to the decreased activity in the RFC repository, and as also discussed in the previous meeting notes, we will transition the RFC process to a new on-demand work flow. More info here.
Nix RFCs (Request For Comments)
Many changes, including bug fixes and documentation improvements can be
implemented and reviewed via 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 Nix community.
When this process is followed
This process is followed when one intends to make "substantial" changes to the
Nix ecosystem. What constitutes a "substantial" change is evolving based on
community norms, but may include the following.
Any semantic or syntactic change to the language that is not a bug fix
Removing language features
Big restructuring of Nixpkgs
Expansions to the scope of Nixpkgs (new arch, major subprojects, ...)
Introduction of new interfaces or functions
Certain changes do not require an RFC:
Adding, updating and removing packages in Nixpkgs
Fixing security updates and bugs that don't break interfaces
Pull requests that contain any of the aforementioned 'substantial' changes may
be closed if there is no RFC connected to the proposed changes.
Terminology
RFC Steering Committee
A team of people defined by RFC 36
and stays consistent until the team members are changed via a follow-up RFC.
This committee is responsible for forming an RFC Shepherd team from the
available nominations on each RFC. This team also names the leader of the
Shepherd team. This has to happen within 1 week after the PR has been opened.
Until then the Steering Committee is responsible for guiding the discussion. In
case of the Shepherding Team not doing its work the Steering Committee shall
encourage them or step in and assign new Shepherds. They also are in charge of
merging accepted and rejected RFCs. Generally by these expectations they should
find time to meet once a week for about an hour.
They have no special responsibility with regard to the content of an RFC, they
can weigh in on them, the same as any other community member, but are only in
charge of:
selecting the Shepherds unanimously
supervising that the Shepherds are carrying out their work
committing the final RFC
Shepherd Team
A team of 3-4 community members defined unanimously by the RFC Steering
Committee, responsible for accepting or rejecting a specific RFC. This team is
created per RFC from community members nominated in the discussion on that RFC.
This team should be people who are very familiar with the main components
touched by the RFC. The author cannot be part of the Shepherd Team. In addition,
at most half of the Shepherd Team can be part of the RFC Steering Committee.
The responsibility of the team is to guide the discussion as long as it is
constructive, new points are brought up and the RFC is iterated on and from time
to time summarise the current state of discussion. If this is the case no longer,
then the Shepherd Team shall step in with a motion for FCP.
Shepherd Leader
The person in charge of the RFC process for a specific RFC, and responsible for
ensuring the process is followed in a timely fashion. The Shepherd Leader has no
special responsibility with regard to moving an undecided Shepherd Team to a
certain decision.
Final Comment Period (FCP)
A period of ten calendar days, which will be called by the Shepherd Team after
the RFC has received ample discussion and enough of the tradeoffs have been
discussed. The Shepherd Team will propose to either accept or reject the RFC
after the FCP.
Process from Creation to Merge
In short, to get a major change included in Nix or Nixpkgs, one must
first get the RFC merged into the RFC repository as a markdown file under the
rfcs directory. At that point the RFC is accepted and may be implemented
with the goal of eventual inclusion into Nix or Nixpkgs.
graph TD
Start((Start)) --> Draft
Draft -->|Ready for Review| Discuss
style Draft fill:#008,color:#FFF
Discuss[Discuss and Refine]
Discuss ---> |On Hold| Draft
Discuss --> |Can't Find Shepherds| NoShepherds
Discuss --> |Motion for FCP| FCP
NoShepherds[Closed - Lack of Interest]:::closed
NoShepherds --> |Renewed Interest| Discuss
FCP[Final Comment Phase]
FCP --> |FCP Canceled| Discuss
FCP --> |Accept| Merged
FCP --> |Reject| Rejected
Merged
style Merged fill:#080,color:#FFF
Rejected[Closed - Rejected]:::closed
Withdrawn[Closed - Withdrawn]:::closed
Discuss & Draft --->|Author Withdraws| Withdrawn
classDef closed fill:#800,color:#FFF
Loading
Have a cool idea!
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. Consider using Semantic Line Breaks
in order to get better diffs on later amendments.
Consider publishing your RFC as pre-RFC in the forum
to gather initial feedback and iron out the remaining typos.
In case your RFC is a technical proposal, you might want to prepare a
prototype of your idea to firstly make yourself aware of potential pitfalls
and also help reviewers understand the RFC. Code may be able to explain some
issues in short.
Submit a pull request. As a pull request the RFC will receive design feedback
from the larger community, and the author should be prepared to revise it in
response.
For the nomination process for potential members of the RFC Shepherd Team,
that is specific to each RFC, anyone interested can either nominate another
person or themselves to be a potential member of the RFC Shepherd Team. This
can already be done when submitting the PR.
The RFC Steering Committee assigns a subset of the nominees to the RFC
Shepherd Team and designates a leader for it. This has to be done
unanim
Read the full README on GitHub