GUI开发工具集-Electron
Electron(原名为Atom Shell)是GitHub开发的一个开源框架。它通过使用Node.js(作为后端)和Chromium的渲染引擎(作为前端)完成跨平台的桌面GUI应用程序的开发。Electron现已被多个开源Web应用程序用于前端与后端的开发,著名项目包括GitHub的Atom和微软的Visual Studio Code。其主体在MIT协议下授权。

Build cross-platform desktop apps with JavaScript, HTML, and CSS.
Electron是基于 Web 技术构建跨平台桌面端框架,也叫做 GUI 程序,即Electron = Chromium + Node.js + Native APIs。

一个基础的Electron包含三个文件:package.json(元数据)、main.js(代码)和index.html(图形用户界面)。框架由Electron可执行文件(Windows中为electron.exe、macOS中为electron.app、Linux中为electron)提供。开发者可以自行添加标志、自定义图标、重命名或编辑Electron可执行文件。
2013年4月11日,Electron以Atom Shell为名起步。
2014年5月6日,Atom以及Atom Shell以MIT许可证开源。
2015年4月17日,Atom Shell改名为Electron。
2016年5月11日,1.0版本发布。
2016年5月20日,允许向Mac应用商店提交软件包。
2016年8月2日,支持Windows商店。
由于其紧跟版本帝Chromium的脚本,因此更新非常频繁。
桌面软件(办公、个人工具),仍然是未来十几年 PC 端需求之一,Electron 技术是流行趋势,入门简单(JavaScript+CSS的网页开发基础)、跨平台、开源免费、工程化、安全等特性,国内有如QQ、百度翻译、阿里网盘、迅雷、有道云笔记 ...... 等相关软件基于此开发或已经迁移到该框架。其发展动态可参考《Electron发展记事(202x)》。
最新版本:30
v30.0于2024年4月中旬发布,更新内容如下:
Chromium 124.0.6367.49
Node 20.11.1
V8 12.4
添加了 WebContentsView 和 BaseWindow,替换了现已弃用的 BrowserViewAPI。
为 ASAR Integrity Integrity fuse 添加了 Windows 支持。
将 Chromium 更新为 122.0.6194.0(Behavior Changed:cross-origin iframe 现在使用权限策略来访问功能)
将 Chromium 更新为 122.0.6236.2(已删除:--disable-color- Correct-rendering 开关)
context-menuparams 中的 inputFieldType 属性已被删除。
将 Chromium 更新为 124.0.6323.0(已删除:process.getIOCounters ())
向网络视图添加了 transparent 网络首选项。
为 webContents API 添加了一个新的实例属性 navigationHistory,其中包含 navigationHistory.getEntryAtIndex 方法,可让应用程序检索浏览历史中任何导航条目的 URL 和标题。
添加了一种新方法 BrowserWindow.isOccluded() 以允许应用程序检查闭塞状态。
将 net 模块添加到实用程序进程中。
添加了对实用程序进程中使用 net 模块发出的请求的代理配置支持。
添加了对通过 navigator.serial 中的服务类 ID 请求蓝牙端口的支持。
添加了对 NODE_EXTRA_CA_CERTS 的支持。
实现了对文件系统 API 的支持。
删除/弃用:从 Windows zip 文件中删除了无关的 dll。
修复了 BrowserViews 默认为白色而不是透明的问题。#40866
修复了在调用 loadURL() 失败后立即调用 WebContents.loadURL() 时不正确地导致失败的问题。#40661
修复了禁用最大化并启用 WCO 的窗口仍会显示其最大化按钮的错误。#41805
修复了清理关联的 WebContents 后关闭 WebContentsView 或与之交互可能出现的崩溃问题。#41154
修复了 app.getLoginItemSettings 未正确抛出错误的问题。 #41667
修复了 BrowserWindow 中的子视图有时可能出现的问题。#41802
修复了在 Mac 上显示或聚焦面板窗口会激活应用程序的问题。#41844
改进了使用 Windows Control Overlay 时 Windows 11 上的标题按钮的外观。#41586
在加载无效 URL 时正确拒绝 webcontents.loadURL promise。#41194
终止对 27.xy 的支持
根据项目的支持政策,Electron 27.xy 已结束支持。鼓励开发人员和应用程序升级到较新版本的 Electron。
更多详情可查看发行说明。
最新版本:39
v39.0于2025年10月下旬发布,其带来一系列核心依赖更新、新功能引入以及关键缺陷修复。本次发布聚焦于底层运行时现代化与开发者能力增强,为构建高性能桌面应用提供了更坚实的基础。它不仅带来了性能与安全性的提升,还扩展了系统集成能力,特别是在图像处理、硬件交互和无障碍支持方面迈出关键一步。
核心运行时全面升级:本版本同步了 Chromium、Node.js 和 V8 的最新稳定分支,显著提升渲染效率、JavaScript 执行速度及安全性。
这些升级意味着 Electron 应用现在能运行在更接近主流浏览器的环境中,有助于减少兼容性问题,并为未来特性预留支持空间。
行为变更与兼容性提示
部分 API 的调整可能影响现有项目,请注意以下变更:
OffscreenSharedTexture 接口重构:原生纹理句柄的传递方式已统一为标准化 handle 字段。开发者需检查涉及离屏渲染的代码,确保正确接收和管理该句柄资源。
window.open() 弹窗行为规范化:现在通过此方法创建的窗口默认具备可调节尺寸特性,解决了此前在某些平台上弹窗无法拖拽调整大小的问题,符合 HTML 标准预期。
新增功能一览
高精度图像输出支持:新增对 RGBAF16 图像格式的支持,适用于需要高动态范围(HDR)色彩表现的图形处理场景。开发者可在离屏渲染中启用该格式,实现更细腻的视觉效果。
系统内存洞察增强(macOS)
process.getSystemMemoryInfo() 方法在 macOS 上新增两个字段:
fileBacked: 表示由文件映射支撑的内存页数量
purgeable: 可被系统回收以释放压力的内存容量
此信息可用于监控应用资源使用策略,优化内存敏感型任务。
主题色获取(Linux):Linux 平台现支持 systemPreferences.getAccentColor(),返回当前桌面环境的强调色(accent color)。便于应用 UI 与系统主题保持一致,提升整体视觉融合度。
托盘图标状态持久化(macOS):Tray 构造函数新增 guid 选项。设置唯一标识后,即使应用重启,托盘图标的排列位置也将保持不变,改善多实例用户的体验一致性。
跨进程帧引用定位:新增静态方法 webFrameMain.fromFrameToken(processId, frameToken),允许主进程根据渲染进程 ID 和帧令牌精确获取对应的 WebFrameMain 实例,便于高级调试或跨帧通信。
可访问性能力扩展:引入更细粒度的辅助技术接口,包括对屏幕阅读器事件的深度控制、焦点管理增强等,帮助开发者构建符合 WCAG 标准的应用程序。
最近文档查询(Windows & macOS):app.getRecentDocuments() 现已可用,可读取操作系统记录的“最近打开文件”列表,适用于实现“文件 > 打开最近”类功能,无需自行维护历史记录。
USB 设备配置访问:USBDevice 接口暴露 configurations 属性,提供设备所有可用配置描述符的访问能力,便于开发人员进行精细化设备控制与初始化。
文件系统权限持久化:授权状态可在会话生命周期内自动保留。用户首次授予权限后,在同一会话中再次访问相同路径将不再触发确认对话框,提升操作流畅性。
动态导入 ESM 模块(非隔离预加载脚本):即使在未启用上下文隔离的预加载脚本中,也可使用 import() 动态加载 ECMAScript 模块。这为渐进式迁移现代模块化方案提供了便利。
关键缺陷修复
内部机制调整
资源路径管理革新:内部资源定位机制切换至 DIR_ASSETS 目录规范。同时,app.getPath('assets') 现可返回应用资源根路径,便于集中管理静态资产。
文档体系完善:官方文档已完成本轮更新,涵盖所有新增 API 的使用示例、参数说明与最佳实践,建议开发者查阅最新版 Electron 官方文档 获取权威指导。
建议升级:所有活跃项目应尽快测试并迁移到此版本,尤其是依赖 Node.js 22 或需使用 HDR 渲染、USB 控制等功能的项目。
注意兼容性:请特别关注 OffscreenSharedTexture 和 window.open 的行为变化,必要时调整相关逻辑。
官方主页:https://www.electronjs.org/

Build cross-platform desktop apps with JavaScript, HTML, and CSS.
Electron是基于 Web 技术构建跨平台桌面端框架,也叫做 GUI 程序,即Electron = Chromium + Node.js + Native APIs。

一个基础的Electron包含三个文件:package.json(元数据)、main.js(代码)和index.html(图形用户界面)。框架由Electron可执行文件(Windows中为electron.exe、macOS中为electron.app、Linux中为electron)提供。开发者可以自行添加标志、自定义图标、重命名或编辑Electron可执行文件。
2013年4月11日,Electron以Atom Shell为名起步。
2014年5月6日,Atom以及Atom Shell以MIT许可证开源。
2015年4月17日,Atom Shell改名为Electron。
2016年5月11日,1.0版本发布。
2016年5月20日,允许向Mac应用商店提交软件包。
2016年8月2日,支持Windows商店。
由于其紧跟版本帝Chromium的脚本,因此更新非常频繁。
桌面软件(办公、个人工具),仍然是未来十几年 PC 端需求之一,Electron 技术是流行趋势,入门简单(JavaScript+CSS的网页开发基础)、跨平台、开源免费、工程化、安全等特性,国内有如QQ、百度翻译、阿里网盘、迅雷、有道云笔记 ...... 等相关软件基于此开发或已经迁移到该框架。其发展动态可参考《Electron发展记事(202x)》。
最新版本:30
v30.0于2024年4月中旬发布,更新内容如下:
Chromium 124.0.6367.49
Node 20.11.1
V8 12.4
添加了 WebContentsView 和 BaseWindow,替换了现已弃用的 BrowserViewAPI。
为 ASAR Integrity Integrity fuse 添加了 Windows 支持。
将 Chromium 更新为 122.0.6194.0(Behavior Changed:cross-origin iframe 现在使用权限策略来访问功能)
将 Chromium 更新为 122.0.6236.2(已删除:--disable-color- Correct-rendering 开关)
context-menuparams 中的 inputFieldType 属性已被删除。
将 Chromium 更新为 124.0.6323.0(已删除:process.getIOCounters ())
向网络视图添加了 transparent 网络首选项。
为 webContents API 添加了一个新的实例属性 navigationHistory,其中包含 navigationHistory.getEntryAtIndex 方法,可让应用程序检索浏览历史中任何导航条目的 URL 和标题。
添加了一种新方法 BrowserWindow.isOccluded() 以允许应用程序检查闭塞状态。
将 net 模块添加到实用程序进程中。
添加了对实用程序进程中使用 net 模块发出的请求的代理配置支持。
添加了对通过 navigator.serial 中的服务类 ID 请求蓝牙端口的支持。
添加了对 NODE_EXTRA_CA_CERTS 的支持。
实现了对文件系统 API 的支持。
删除/弃用:从 Windows zip 文件中删除了无关的 dll。
修复了 BrowserViews 默认为白色而不是透明的问题。#40866
修复了在调用 loadURL() 失败后立即调用 WebContents.loadURL() 时不正确地导致失败的问题。#40661
修复了禁用最大化并启用 WCO 的窗口仍会显示其最大化按钮的错误。#41805
修复了清理关联的 WebContents 后关闭 WebContentsView 或与之交互可能出现的崩溃问题。#41154
修复了 app.getLoginItemSettings 未正确抛出错误的问题。 #41667
修复了 BrowserWindow 中的子视图有时可能出现的问题。#41802
修复了在 Mac 上显示或聚焦面板窗口会激活应用程序的问题。#41844
改进了使用 Windows Control Overlay 时 Windows 11 上的标题按钮的外观。#41586
在加载无效 URL 时正确拒绝 webcontents.loadURL promise。#41194
终止对 27.xy 的支持
根据项目的支持政策,Electron 27.xy 已结束支持。鼓励开发人员和应用程序升级到较新版本的 Electron。
更多详情可查看发行说明。
最新版本:39
v39.0于2025年10月下旬发布,其带来一系列核心依赖更新、新功能引入以及关键缺陷修复。本次发布聚焦于底层运行时现代化与开发者能力增强,为构建高性能桌面应用提供了更坚实的基础。它不仅带来了性能与安全性的提升,还扩展了系统集成能力,特别是在图像处理、硬件交互和无障碍支持方面迈出关键一步。
核心运行时全面升级:本版本同步了 Chromium、Node.js 和 V8 的最新稳定分支,显著提升渲染效率、JavaScript 执行速度及安全性。
| 组件 | 新版本 | 主要收益 |
| Chromium | 142.0.7444.52 | 支持更多现代 Web API,优化 GPU 渲染管线,修复多个安全漏洞 |
| Node.js | 22.20.0 | 带来性能调优、诊断改进及实验性模块系统增强 |
| V8 引擎 | 14.2 | 提升 JS 编译效率,降低内存占用,加快启动与响应速度 |
这些升级意味着 Electron 应用现在能运行在更接近主流浏览器的环境中,有助于减少兼容性问题,并为未来特性预留支持空间。
行为变更与兼容性提示
部分 API 的调整可能影响现有项目,请注意以下变更:
OffscreenSharedTexture 接口重构:原生纹理句柄的传递方式已统一为标准化 handle 字段。开发者需检查涉及离屏渲染的代码,确保正确接收和管理该句柄资源。
window.open() 弹窗行为规范化:现在通过此方法创建的窗口默认具备可调节尺寸特性,解决了此前在某些平台上弹窗无法拖拽调整大小的问题,符合 HTML 标准预期。
新增功能一览
高精度图像输出支持:新增对 RGBAF16 图像格式的支持,适用于需要高动态范围(HDR)色彩表现的图形处理场景。开发者可在离屏渲染中启用该格式,实现更细腻的视觉效果。
系统内存洞察增强(macOS)
process.getSystemMemoryInfo() 方法在 macOS 上新增两个字段:
fileBacked: 表示由文件映射支撑的内存页数量
purgeable: 可被系统回收以释放压力的内存容量
此信息可用于监控应用资源使用策略,优化内存敏感型任务。
主题色获取(Linux):Linux 平台现支持 systemPreferences.getAccentColor(),返回当前桌面环境的强调色(accent color)。便于应用 UI 与系统主题保持一致,提升整体视觉融合度。
托盘图标状态持久化(macOS):Tray 构造函数新增 guid 选项。设置唯一标识后,即使应用重启,托盘图标的排列位置也将保持不变,改善多实例用户的体验一致性。
跨进程帧引用定位:新增静态方法 webFrameMain.fromFrameToken(processId, frameToken),允许主进程根据渲染进程 ID 和帧令牌精确获取对应的 WebFrameMain 实例,便于高级调试或跨帧通信。
可访问性能力扩展:引入更细粒度的辅助技术接口,包括对屏幕阅读器事件的深度控制、焦点管理增强等,帮助开发者构建符合 WCAG 标准的应用程序。
最近文档查询(Windows & macOS):app.getRecentDocuments() 现已可用,可读取操作系统记录的“最近打开文件”列表,适用于实现“文件 > 打开最近”类功能,无需自行维护历史记录。
USB 设备配置访问:USBDevice 接口暴露 configurations 属性,提供设备所有可用配置描述符的访问能力,便于开发人员进行精细化设备控制与初始化。
文件系统权限持久化:授权状态可在会话生命周期内自动保留。用户首次授予权限后,在同一会话中再次访问相同路径将不再触发确认对话框,提升操作流畅性。
动态导入 ESM 模块(非隔离预加载脚本):即使在未启用上下文隔离的预加载脚本中,也可使用 import() 动态加载 ECMAScript 模块。这为渐进式迁移现代模块化方案提供了便利。
关键缺陷修复
| 问题类别 | 修复内容 |
| 配色异常 | 修正 getAccentColor 返回颜色值反转的问题,确保色彩数据准确反映系统设置 |
| DevTools 崩溃 | 解决 Wayland 显示服务器下独立模式开发者工具闪退问题 |
| 会话访问崩溃 | 修复访问 webContents.session 时潜在的空指针异常 |
| 窗口关闭后操作崩溃 | 杜绝 window.close() 后执行异步回调导致的非法内存访问 |
| 命令行参数解析 | 修复特定特性标志传参引发的启动崩溃 |
| 文件选择器稳定性 | 防止 showOpenDialog 使用空过滤器数组时发生崩溃(Windows) |
内部机制调整
资源路径管理革新:内部资源定位机制切换至 DIR_ASSETS 目录规范。同时,app.getPath('assets') 现可返回应用资源根路径,便于集中管理静态资产。
文档体系完善:官方文档已完成本轮更新,涵盖所有新增 API 的使用示例、参数说明与最佳实践,建议开发者查阅最新版 Electron 官方文档 获取权威指导。
建议升级:所有活跃项目应尽快测试并迁移到此版本,尤其是依赖 Node.js 22 或需使用 HDR 渲染、USB 控制等功能的项目。
注意兼容性:请特别关注 OffscreenSharedTexture 和 window.open 的行为变化,必要时调整相关逻辑。
官方主页:https://www.electronjs.org/