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

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

Electron v1 于 2016 年发布,承诺提升 API 稳定性并改进文档和工具。Electron v2 于 2018 年发布,引入了语义化版本控制,使 Electron 开发者更容易追踪发布周期。
到了 Electron v6,我们将主要版本发布周期调整为与 Chromium 保持一致的固定 12 周周期。这一决定改变了项目的理念,将“拥有最新版 Chromium”从一个加分项转变为优先事项。这减少了升级之间的技术债务,使我们更容易保持 Electron 的更新和安全。
自那时起,我们就像一台运转良好的机器,在每个 Chromium 稳定版发布的同一天发布一个新的 Electron 版本。到 2021 年 Chromium 将其发布周期加快到 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 Foundation。尽管最初的核心团队至今仍工作于 Microsoft,但他们只是构成 Electron 治理的更庞大协作者群体的一部分。2
虽然这个模型并非完美无缺,但它在全球疫情和持续的宏观经济逆风中运作良好。展望未来,我们计划修订治理章程,以指导我们走过 Electron 的第二个十年。
开源项目的社区部分很难,特别是当你的外联团队是十几个穿着风衣、上面写着“社区经理”的工程师时。也就是说,作为一个大型开源项目意味着我们有很多用户,而利用他们的能量为 Electron 构建用户态生态系统是维持项目健康的关键部分。
我们一直在做些什么来发展我们的社区影响力?
构建虚拟社区
- 2020 年,我们启动了社区 Discord 服务器。此前我们在 Atom 的论坛中有一个板块,但后来决定采用一个更非正式的消息平台,以便为维护者和 Electron 开发者之间的讨论以及一般的调试帮助提供空间。
- 2021 年,我们在 @BlackHole1 的帮助下成立了 Electron 中国 用户组。这个小组对 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++ 代码集合,构建时间一直是限制我们发布错误修复和新功能速度的因素。2020 年,我们部署了 Not Goma,这是 Google Goma 分布式编译器服务的自定义 Electron 特有后端。Not Goma 处理来自授权用户机器的编译请求,并将过程分布到后端数百个核心上。它还缓存编译结果,这样其他人编译相同文件时,只需要下载预编译结果即可。
自推出 Not Goma 以来,维护者的编译时间已从数小时缩短到数分钟。稳定的互联网连接成为贡献者编译 Electron 的最低要求!
持续因素认证 (Continuous Factor Authentication)
持续因素认证 (CFA) 是围绕 npm 双因素认证 (2FA) 系统的一层自动化,我们将其与 semantic-release 结合使用,以管理我们的各种 @electron/
npm 包的安全和自动化发布。
虽然 semantic-release 已经自动化了 npm 包发布过程,但它需要关闭双因素认证或传递一个绕过此限制的秘密令牌。
我们构建了 CFA,以便为任意 CI 作业提供 npm 2FA 的基于时间的一次性密码 (TOTP),使我们能够利用 semantic-release 的自动化,同时保留双因素认证的额外安全性。
我们使用带有 Slack 集成前端的 CFA,允许维护者从任何装有 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 自动化 Electron 的向后移植过程,根据 GitHub PR 标签尝试将补丁 cherry-pick 到以前的发布分支。
- Roller 自动化 Electron 的 Chromium 和 Node.js 依赖项的滚动升级。
- Cation 是我们 electron/electron PR 的状态检查机器人。
总而言之,我们的小型机器人家族极大地提升了开发人员的生产力!
下一步是什么?
在我们进入项目的第二个十年之际,您可能会问:Electron 的下一步是什么?
我们将继续与 Chromium 的发布周期保持同步,每 8 周发布一个新的 Electron 主要版本,使框架与 Web 平台和 Node.js 的最新版本保持同步,同时保持企业级应用程序的稳定性和安全性。
通常,我们在即将开展的倡议具体化时才会宣布相关新闻。如果您想及时了解未来的发布、功能和项目更新,您可以阅读我们的博客并关注我们的社交媒体账号(Twitter 和 Mastodon)!