electron/electron
存储库的首次提交是在 2013 年 3 月 13 日1。

经过 10 年和来自 1192 位独特贡献者的 27,147 多次提交,Electron 已成为当今构建桌面应用程序最流行的框架之一。这个里程碑是庆祝和反思我们迄今为止的旅程,并分享我们一路走来学到的东西的绝佳机会。
如果没有每一位投入时间和精力为项目做出贡献的人,我们就不会有今天的成就。虽然源代码提交始终是最可见的贡献,但我们也必须承认那些报告错误、维护 userland 模块、提供文档和翻译以及参与网络空间中 Electron 社区的人们的努力。每一项贡献对于我们作为维护者来说都是非常宝贵的。
在我们继续阅读博客文章的其余部分之前:谢谢您。 ❤️
我们是如何走到今天的?
Atom Shell 是作为 GitHub Atom 编辑器的骨干构建的,该编辑器于 2014 年 4 月发布公开测试版。它从头开始构建,作为当时可用的基于 Web 的桌面框架(node-webkit 和 Chromium Embedded Framework)的替代方案。它有一个杀手级功能:嵌入 Node.js 和 Chromium,为 Web 技术提供强大的桌面运行时。
在一年内,Atom Shell 的功能和受欢迎程度开始迅猛增长。大型公司、初创公司和个人开发者都开始使用它构建应用程序(一些早期采用者包括 Slack、GitKraken 和 WebTorrent),并且该项目被恰如其分地更名为 Electron。
从那时起,Electron 一路飞奔,从未停止。以下是我们每周下载量的随时间变化情况,由 npmtrends.com 提供

Electron v1 于 2016 年发布,承诺提高 API 稳定性和改进文档和工具。Electron v2 于 2018 年发布,并引入了语义版本控制,使 Electron 开发者更容易跟踪发布周期。
到 Electron v6,我们转向了与 Chromium 匹配的常规 12 周主要版本发布节奏。这个决定是项目心态的转变,将“拥有最新的 Chromium 版本”从锦上添花变成了优先事项。这减少了升级之间的技术债务量,使我们更容易保持 Electron 的更新和安全。
从那时起,我们就像一台运转良好的机器,在每个 Chromium 稳定版发布的同一天发布新的 Electron 版本。当 Chromium 在 2021 年将其发布计划加速到 4 周时,我们能够耸耸肩,并将我们的发布节奏相应地提高到 8 周。
我们现在使用的是 Electron v23(并且还在计数),并且仍然致力于构建用于构建跨平台桌面应用程序的最佳运行时。即使近年来 JavaScript 开发者工具蓬勃发展,Electron 仍然是桌面应用程序框架领域中稳定、久经考验的支柱。如今,Electron 应用程序无处不在:您可以使用 Visual Studio Code 进行编程,使用 Figma 进行设计,使用 Slack 进行通信,以及使用 Notion 记笔记(以及许多其他用例)。我们为这一成就感到无比自豪,并感谢每一位使之成为可能的人。
我们一路走来学到了什么?
达到十年里程碑的道路漫长而曲折。以下是一些关键事项,这些事项帮助我们运行一个可持续的大型开源项目。
通过治理模型扩展分布式决策
我们必须克服的一个挑战是,一旦 Electron 首次爆发流行,如何处理项目的长期发展方向。我们如何处理由分布在不同公司、国家和时区的数十名工程师组成的团队?
在早期,Electron 的维护者小组依靠非正式协调,这对于较小的项目来说快速而轻便,但无法扩展到更广泛的协作。2019 年,我们转向治理模型,其中不同的工作组拥有正式的责任领域。这对于简化流程并将部分项目所有权分配给特定的维护者至关重要。如今,每个工作组 (WG) 负责什么?
- 发布 Electron 版本(发布 WG)
- 升级 Chromium 和 Node.js(升级 WG)
- 监督公共 API 设计(API WG)
- 保持 Electron 安全(安全 WG)
- 运行网站、文档和工具(生态系统 WG)
- 社区和企业外联(外联 WG)
- 社区审核(社区与安全 WG)
- 维护我们的构建基础设施、维护者工具和云服务(基础设施 WG)
在转向治理模型的同时,我们还将 Electron 的所有权从 GitHub 转移到 OpenJS 基金会。虽然最初的核心团队今天仍在 Microsoft 工作,但他们只是构成 Electron 治理的更大协作团队的一部分。2
虽然这种模型并不完美,但它在全球疫情和持续的宏观经济逆风中非常适合我们。展望未来,我们计划修改治理章程,以指导我们度过 Electron 的第二个十年。
开源的社区部分很难,尤其是当您的外联团队是由十几个穿着风衣并写着“社区经理”的工程师组成时。也就是说,作为一个大型开源项目意味着我们有很多用户,利用他们的能量为 Electron 构建 userland 生态系统是维持项目健康的关键部分。
我们一直在做什么来发展我们的社区影响力?
构建虚拟社区
- 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 编程之夏学生。 @aryanshridhar 在重构 Electron Fiddle 的核心版本加载逻辑并将其 bundler 迁移到 webpack 方面做了一些很棒的工作。
自动化所有事情!
如今,Electron 治理机构约有 30 位活跃维护者。我们中只有不到一半是全职贡献者,这意味着有很多工作要做。我们保持一切顺利运行的诀窍是什么?我们的座右铭是计算机很便宜,而人类时间很昂贵。以典型的工程师方式,我们开发了一套自动化支持工具,以使我们的生活更轻松。
Not Goma
核心 Electron 代码库是一个庞大的 C++ 代码,构建时间一直是限制我们发布错误修复和新功能速度的因素。2020 年,我们部署了 Not Goma,这是一个针对 Google Goma 分布式编译器服务的自定义 Electron 特定后端。Not Goma 处理来自授权用户机器的编译请求,并将该过程分布在后端数百个内核中。它还会缓存编译结果,以便其他人编译相同的文件时只需要下载预编译的结果。
自推出 Not Goma 以来,维护者的编译时间已从数小时缩短到数分钟。稳定的互联网连接成为贡献者编译 Electron 的最低要求!
持续因子身份验证
持续因子身份验证 (CFA) 是 npm 双因素身份验证 (2FA) 系统周围的一个自动化层,我们将其与 semantic-release 结合使用,以管理我们各种 @electron/
npm 包的安全和自动化发布。
虽然 semantic-release 已经自动化了 npm 包发布过程,但它需要关闭双因素身份验证或传入绕过此限制的密钥令牌。
我们构建 CFA 是为了为任意 CI 作业提供用于 npm 2FA 的基于时间的一次性密码 (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 的反向移植过程。
- Roller 自动化 Electron 的 Chromium 和 Node.js 依赖项的滚动升级。
- Cation 是我们用于 electron/electron PR 的状态检查机器人。
总而言之,我们的小型机器人家族极大地提高了开发人员的生产力!
下一步是什么?
当我们进入作为项目的第二个十年时,您可能会问:Electron 的下一步是什么?
我们将继续与 Chromium 的发布节奏保持同步,每 8 周发布新的 Electron 主要版本,使框架与 Web 平台和 Node.js 的最新和最出色的功能保持同步,同时为企业级应用程序保持稳定性和安全性。
我们通常会在即将到来的举措变得具体时宣布相关新闻。如果您想了解未来的版本、功能和一般项目更新,您可以阅读 我们的博客 并关注我们的社交媒体资料(Twitter 和 Mastodon)!