1"use strict";(self.webpackChunkelectronjs=self.webpackChunkelectronjs||[]).push([["17931"],{35454(e,n,t){t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>a});var r=t(45839),s=t(74848),o=t(28453);let i={title:"Introducing electron/rfcs",date:new Date("2024-02-13T12:00:00.000Z"),authors:"erickzhao",slug:"rfcs",tags:["community","features"]},c,l={authorsImageUrls:[void 0]},a=[{value:"Why RFCs?",id:"why-rfcs",level:2},{value:"How does it work?",id:"how-does-it-work",level:2},{value:"Who can participate?",id:"who-can-participate",level:2},{value:"Credits",id:"credits",level:2}];function h(e){let n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",mermaid:"mermaid",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["Electron\u2019s ",(0,s.jsx)(n.a,{href:"https://github.com/electron/governance/tree/main/wg-api",children:"API Working Group"})," is\nadopting an open ",(0,s.jsx)(n.strong,{children:"Requests for Comments (RFC)"})," process to help shepherd larger changes\nto Electron core."]}),"\n",(0,s.jsx)(n.h2,{id:"why-rfcs",children:"Why RFCs?"}),"\n",(0,s.jsx)(n.p,{children:"In short, we want to smooth out the process of landing significant changes to Electron core."}),"\n",(0,s.jsx)(n.p,{children:"Currently, new code changes are mostly discussed through issues and pull requests on GitHub.\nFor most changes to Electron, this is a good system. Many bug fixes, documentation changes,\nand even new features are straightforward enough to review and merge asynchronously through\nstandard GitHub flows."}),"\n",(0,s.jsx)(n.p,{children:"For changes that are more significant\u2014for instance, large API surfaces or breaking changes\nthat would affect the majority of Electron apps\u2014it makes sense for review to happen at the\nideation stage before most of the code is written."}),"\n",(0,s.jsx)(n.p,{children:"This process is designed to be open to the public, which will also make it easier for the\nopen source community at large to give feedback on potential changes before they land in\nElectron."}),"\n",(0,s.jsx)(n.h2,{id:"how-does-it-work",children:"How does it work?"}),"\n",(0,s.jsx)(n.mermaid,{value:"flowchart TD\n P[Proposed] --\x3e PC[Pending Comment];\n PC --\x3e A[Active];\n A --\x3e C[Completed];\n PC --\x3e P;\n P --\x3e D[Declined];\n A --\x3e D;\n style P color:black;\n style P fill:white;\n style D color:black;\n style D fill:red;\n style A color:black;\n style A fill:orange;\n style C color:black;\n style C fill:lightgreen;\n style PC color:black;\n style PC fill:yellow;"}),"\n",(0,s.jsxs)(n.p,{children:["The entire RFC process lives in the ",(0,s.jsx)(n.a,{href:"https://github.com/electron/rfcs",children:"electron/rfcs"})," repository\non GitHub. The steps are described in detail in the repository\n",(0,s.jsx)(n.a,{href:"https://github.com/electron/rfcs/blob/main/README.md",children:"README"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["In brief, an RFC is ",(0,s.jsx)(n.strong,{children:"Proposed"})," once a PR is made to the ",(0,s.jsx)(n.code,{children:"electron/rfcs"})," repository.\nA Proposed RFC becomes:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Active"})," when the PR is merged into the ",(0,s.jsx)(n.code,{children:"main"})," branch of the repository, which means that Electron\nmaintainers are amenable to an implementation in ",(0,s.jsx)(n.code,{children:"electron/electron"}),", or"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Declined"})," if the PR is ultimately rejected."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["For the RFC to become ",(0,s.jsx)(n.strong,{children:"Active"}),", the PR must be approved by at least 2 API Working Group members.\nBefore merging, the RFC should be presented synchronously and accepted unanimously by a quorum of at\nleast two-thirds of the WG members. If consensus is reached, a one-month final comment period will\nbe triggered, after which the PR will be merged."]})}),"\n",(0,s.jsxs)(n.p,{children:["An Active RFC is ",(0,s.jsx)(n.strong,{children:"Completed"})," if the implementation has been merged into ",(0,s.jsx)(n.code,{children:"electron/electron"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"who-can-participate",children:"Who can participate?"}),"\n",(0,s.jsxs)(n.p,{children:["Anyone in the Electron community can submit RFCs or leave feedback on the ",(0,s.jsx)(n.code,{children:"electron/rfcs"})," repository!"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["To see the list of active RFCs, refer to ",(0,s.jsxs)(n.a,{href:"https://github.com/electron/rfcs/tree/main/text",children:["the ",(0,s.jsx)(n.code,{children:"text"})," folder in the repository"]}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["To leave feedback on proposed RFCs, check out ",(0,s.jsx)(n.a,{href:"https://github.com/electron/rfcs/pulls",children:"the list of open PRs"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["To submit a new RFC, check out the repo\u2019s ",(0,s.jsx)(n.a,{href:"https://github.com/electron/rfcs",children:"README"})," and ",(0,s.jsx)(n.a,{href:"https://github.com/electron/rfcs/blob/main/0000-template.md",children:"the RFC template"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"We wanted to make this process a two-way dialogue and encourage community participation to get a\ndiverse set of opinions from Electron apps that might consume these APIs in the future. If you\u2019re\ninterested in leaving feedback on currently proposed RFCs, the Electron maintainers have already created\na few:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/electron/rfcs/pull/3",children:"Electron C APIs"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/electron/rfcs/pull/4",children:"Preload Realm for Service Workers"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"credits",children:"Credits"}),"\n",(0,s.jsx)(n.p,{children:"Electron's RFC process was modeled on many established open source RFC processes.\nInspiration for many ideas and major portions of copywriting go to:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/emberjs/rfcs",children:"emberjs/rfcs"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/reactjs/rfcs",children:"reactjs/rfcs"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/rust-lang/rfcs",children:"rust-lang/rfcs"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/tauri-apps/rfcs",children:"tauri-apps/rfcs"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/vuejs/rfcs",children:"vuejs/rfcs"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/yarnpkg/rfcs",children:"yarnpkg/rfcs"})}),"\n"]})]})}function d(e={}){let{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453(e,n,t){t.d(n,{R:()=>i,x:()=>c});var r=t(96540);let s={},o=r.createContext(s);function i(e){let n=r.useContext(o);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}},45839(e){e.exports=JSON.parse('{"permalink":"/blog/rfcs","source":"@site/blog/rfcs.md","title":"Introducing electron/rfcs","description":"Electron\u2019s API Working Group is","date":"2024-02-13T12:00:00.000Z","tags":[{"inline":false,"label":"Community","permalink":"/blog/tags/community","description":"Community initiatives in Electron"},{"inline":false,"label":"Features","permalink":"/blog/tags/features","description":"Showcasing new features in Electron core"}],"readingTime":3.02,"hasTruncateMarker":false,"authors":[{"name":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png?size=96","key":"erickzhao","page":null}],"frontMatter":{"title":"Introducing electron/rfcs","date":"2024-02-13T12:00:00.000Z","authors":"erickzhao","slug":"rfcs","tags":["community","features"]},"unlisted":false,"prevItem":{"title":"Electron 29.0.0","permalink":"/blog/electron-29-0"},"nextItem":{"title":"Statement regarding \\"runAsNode\\" CVEs","permalink":"/blog/statement-run-as-node-cves"}}')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.