electron/electron
仓库的第一次提交是在 2013 年 3 月 13 日1。

10 年后,来自 1192 位独立贡献者的 27,147 次提交,Electron 已成为当今构建桌面应用程序最流行的框架之一。这个里程碑是庆祝和回顾我们旅程的绝佳机会,并分享我们一路走来的经验。
没有所有为项目贡献时间和精力的人,就没有今天的我们。虽然源代码提交总是最显眼的贡献,但我们也必须感谢报告 bug、维护用户空间模块、提供文档和翻译以及参与网络空间 Electron 社区的人们。作为维护者,每一次贡献对我们来说都弥足珍贵。
在我们继续博客文章的其余部分之前:谢谢。❤️
我们是如何走到今天的?
Atom Shell 是作为 GitHub 的 Atom 编辑器 的骨干构建的,该编辑器于 2014 年 4 月发布公开测试版。它从零开始构建,作为当时可用的基于 Web 的桌面框架(node-webkit 和 Chromium Embedded Framework)的替代品。它有一个杀手级功能:嵌入 Node.js 和 Chromium,为 Web 技术提供强大的桌面运行时。
在一年内,Atom Shell 的功能和受欢迎程度开始大幅增长。大型公司、初创企业和个人开发者都开始使用它构建应用程序(一些早期采用者包括 Slack、GitKraken 和 WebTorrent),该项目也被恰当地重命名为 Electron。
从那时起,Electron 便开足马力,从未停歇。以下是 courtesy of npmtrends.com 提供的我们随时间的周下载量概览:

Electron v1 于 2016 年发布,承诺提高 API 稳定性并提供更好的文档和工具。Electron v2 于 2018 年发布并引入了语义化版本控制,使 Electron 开发者更容易跟踪发布周期。
到 Electron v6,我们转向了常规的 12 周主要版本发布周期,以匹配 Chromium。这一决定改变了项目的理念,将“拥有最新 Chromium 版本”从一个可选项提升到了优先级。这减少了升级之间的技术债务,使我们更容易保持 Electron 的更新和安全。
从那时起,我们就像一台运转良好的机器,在每个 Chromium 稳定版本发布的同一天发布新的 Electron 版本。当 Chromium 在 2021 年将发布周期加快到 4 周时,我们能够欣然接受,并相应地将发布周期增加到 8 周。
我们现在正在发布 Electron v23(及更高版本),并仍然致力于构建最好的运行时来构建跨平台桌面应用程序。即使近年来 JavaScript 开发者工具蓬勃发展,Electron 仍然是桌面应用程序框架领域稳定、经过实战考验的坚实支柱。Electron 应用程序如今无处不在:您可以使用 Visual Studio Code 进行编程,使用 Figma 进行设计,使用 Slack 进行交流,使用 Notion 记录笔记(以及许多其他用例)。我们为这一成就感到无比自豪,并感谢所有促成这一切的人。
我们一路走来学到了什么?
通往十年里程碑的道路漫长而曲折。以下是一些帮助我们运营一个可持续的大型开源项目的关键事项。
通过治理模式扩展分布式决策
我们必须克服的一个挑战是,一旦 Electron 首次爆红,如何处理项目的长期方向。我们如何处理一个分布在不同公司、国家和时区的由几十名工程师组成的团队?
早期,Electron 的维护者团队依赖于非正式协调,这对于小型项目来说快速且轻便,但无法扩展到更广泛的协作。2019 年,我们转向了治理模式,不同的工作组拥有正式的职责范围。这对于简化流程并将项目的部分所有权分配给特定的维护者至关重要。如今,每个工作组(WG)负责什么?
- 发布 Electron 版本 (发布工作组)
- 升级 Chromium 和 Node.js (升级工作组)
- 监督公共 API 设计 (API 工作组)
- 确保 Electron 安全 (安全工作组)
- 运营网站、文档和工具 (生态系统工作组)
- 社区和企业外展 (外展工作组)
- 社区审核 (社区与安全工作组)
- 维护我们的构建基础设施、维护者工具和云服务 (基础设施工作组)
大约在我们转向治理模式的同时,我们也将 Electron 的所有权从 GitHub 转移到了 OpenJS Foundation。虽然最初的核心团队今天仍在 Microsoft 工作,但他们只是构成 Electron 治理的更大协作组的一部分。2
虽然这个模式并不完美,但它在全球疫情和持续的宏观经济逆风中很好地适应了我们。展望未来,我们计划修订治理章程,指导我们度过 Electron 的第二个十年。
开源的社区部分很难,特别是当您的外展团队是由穿着风衣、写着“社区经理”的十几位工程师组成时。也就是说,作为一个大型开源项目意味着我们有很多用户,而利用他们的能量来构建 Electron 用户空间生态系统是维持项目健康的关键部分。
我们一直在做些什么来发展我们的社区影响力?
构建虚拟社区
- 2020 年,我们启动了社区 Discord 服务器。我们之前在 Atom 的论坛中有一个板块,但决定使用一个更非正式的消息平台,以便维护者和 Electron 开发者之间进行讨论,并提供一般的调试帮助。
- 2021 年,我们在 @BlackHole1 的帮助下建立了 Electron China 用户组。这个小组对于 Electron 在中国蓬勃发展的科技界用户中增长至关重要,为他们提供了一个在我们英语空间之外协作想法和讨论 Electron 的空间。我们还要感谢 cnpm 在其 npm 中国镜像中支持 Electron 的 nightly 版本发布方面所做的工作。
参与高知名度开源项目
- 自 2019 年以来,我们每年都庆祝 Hacktoberfest。Hacktoberfest 是 DigitalOcean 组织的年度开源庆祝活动,我们每年都会收到数十位热情的贡献者,他们渴望在开源软件上留下自己的印记。
- 2020 年,我们参与了 Google Season of Docs 的首次迭代,与 @bandantonio 合作重塑了 Electron 的新用户教程流程。
- 2022 年,我们首次指导了一位 Google Summer of Code 学生。@aryanshridhar 完成了一些很棒的工作,重构了 Electron Fiddle 的核心版本加载逻辑,并将其打包器迁移到了 webpack。
自动化一切!
如今,Electron 治理大约有 30 名活跃维护者。其中不到一半是全职贡献者,这意味着有很多工作需要处理。我们保持一切顺利运行的秘诀是什么?我们的座右铭是:电脑便宜,人工昂贵。以典型的工程师方式,我们开发了一套自动化支持工具来让我们的工作更轻松。
Not Goma
Electron 核心代码库是庞大的 C++ 代码集合,构建时间一直是限制我们发布 bug 修复和新功能速度的因素。2020 年,我们部署了 Not Goma,这是一个针对 Google Goma 分布式编译器服务的自定义 Electron 后端。Not Goma 处理授权用户机器的编译请求,并将进程分布到后端的数百个核心上。它还缓存编译结果,以便编译相同文件的其他人只需下载预编译结果。
自推出 Not Goma 以来,维护者的编译时间从数小时缩短到数分钟。稳定的互联网连接成为了贡献者编译 Electron 的最低要求!
持续双因素认证
持续双因素认证 (CFA) 是围绕 npm 双因素认证 (2FA) 系统的一层自动化,我们将其与 semantic-release 结合使用,以管理我们的各种 `@electron/` npm 包的安全和自动化发布。
虽然 semantic-release 已经自动化了 npm 包发布过程,但它需要关闭双因素认证或传入绕过此限制的秘密令牌。
我们构建了 CFA,为 npm 2FA 向任意 CI 作业提供基于时间的一次性密码 (TOTP),从而使我们能够在利用 semantic-release 自动化的同时保持双因素认证的额外安全性。
我们将 CFA 与 Slack 集成前端结合使用,允许维护者从任何装有 Slack 的设备验证包发布,只要他们手边有 TOTP 生成器。
如果您想在自己的项目中尝试 CFA,请查看 GitHub 仓库或文档!如果您使用 CircleCI 作为 CI 提供商,我们还有一个方便的 orb,可以快速使用 CFA 构建项目脚手架。
Sheriff
Sheriff 是我们编写的一个开源工具,用于自动化管理跨 GitHub、Slack 和 Google Workspace 的权限。
Sheriff 的核心价值在于权限管理应该是一个透明的过程。它使用一个 YAML 配置文件,指定上述所有服务的权限。使用 Sheriff,在仓库上获得协作者身份或创建新的邮件列表就像获得 PR 批准并合并一样简单。
Sheriff 还有一个审核日志,会发布到 Slack,在 Electron 组织内的任何地方发生可疑活动时警告管理员。
……以及我们所有的 GitHub 机器人
GitHub 是一个具有丰富 API 可扩展性和称为 Probot 的第一方机器人应用框架的平台。为了帮助我们将精力集中在更具创造性的工作部分,我们构建了一套小型机器人,帮助我们完成繁琐的工作。这里有一些例子:
- Sudowoodo 自动化了 Electron 发布过程的始末,从启动构建到将发布资产上传到 GitHub 和 npm。
- Trop 通过尝试根据 GitHub PR 标签将补丁程序 cherry-pick 到之前的发布分支,自动化了 Electron 的 backporting 过程。
- Roller 自动化了 Electron 的 Chromium 和 Node.js 依赖的滚动升级。
- Cation 是我们用于 electron/electron PR 的状态检查机器人。
总而言之,我们的机器人大家庭极大地提高了开发人员的工作效率!
接下来是什么?
当我们作为一个项目进入第二个十年时,您可能会问:Electron 接下来会怎样?
我们将与 Chromium 的发布周期保持同步,每 8 周发布一个新的 Electron 主要版本,保持框架与最新的 Web 平台和 Node.js 同步,同时为企业级应用维护稳定性和安全性。
我们通常会在即将推出的计划具体化时宣布相关新闻。如果您想了解未来的版本、功能和一般项目更新,您可以阅读我们的博客并关注我们的社交媒体账号(Twitter 和 Mastodon)!