从 Electron 到 GPUI,9 个跨平台桌面方案该怎么选

这 9 个方案里,有 3 个出生还不到两个月。

摘要

把 Electron、Tauri、Wails、MyGo、Flutter、GPUI、Rune、Native Shell、PyQt 放在一起,按技术栈、渲染方式、成熟度和热度逐个对比,最后给出一张按团队背景选型的速查表。

背景:跨平台客户端又热闹起来了

前几年聊跨平台桌面,基本就是「Electron 太重,换 Tauri」。到 2026 年底,局面变了:

  • Web 路线里,Electron 仍是生态霸主,Tauri、Wails、MyGo 的网页模式改用系统 WebView,继续变轻;
  • 自绘路线早有 Flutter 打底,GPUI、Rune、MyGo 的原生模式又因为 Zed 编辑器 1.0 的成功,被更多人认真看待;
  • 原生控件路线(Native Shell)重新出现,而且一套代码覆盖桌面 + 手机 + Web;
  • 还有一个新变量:AI 写 UI。Rune 和 Native Shell 都把「让 AI agent 能写、能看、能测界面」写进了设计目标。

下面的数据统一取自 2026-11-08 的 GitHub、PyPI 和 crates.io。

先看全景:一张表

方案 语言 / 技术栈 界面怎么画 平台 GitHub Stars 成熟度
Electron JS/TS + Chromium + Node.js 内置 Chromium 桌面 12.4 万 非常成熟(v45)
Tauri Rust 后端 + 任意 Web 前端 系统 WebView 桌面 + iOS/Android 11.2 万 稳定(2.12),3.0 alpha
Wails Go 后端 + 任意 Web 前端 系统 WebView 桌面 3.7 万 v3.1,v3 刚正式发布
PyQt / PySide Python + Qt Qt 控件(自绘) 桌面 ---(Qt 近 30 年) 非常成熟
Flutter Dart 自带引擎自绘 桌面 + iOS/Android + Web 18.1 万 非常成熟(3.47)
GPUI Rust GPU 自绘 桌面(+WASM 实验) Zed 9.4 万 / GPUI Kit 2 万 引擎成熟,API 未稳定
MyGo 纯 Go WebView 或 GPU 自绘,可混用 桌面 5,408 v0.8,诞生 6 周
Rune Rust GPU 自绘 桌面 + Web 5,157 pre-release,诞生 2 周多
Native Shell Rust 内核 + TSX / Rust 各平台原生控件 桌面 + iOS/Android + Web 2,112 v0.4,诞生 3 周多

逐个看

1. Electron:生态最大的「老大哥」

是什么:把 Chromium 浏览器内核和 Node.js 一起打包进应用,界面就是一个网页,主进程用 Node.js 调用系统能力。VS Code、Slack 这些大家每天在用的桌面软件都是它做的。

技术栈:JavaScript / TypeScript + HTML/CSS + Node.js。

js 复制代码
// main.js
const { app, BrowserWindow } = require("electron");

app.whenReady().then(() => {
  const win = new BrowserWindow({ width: 800, height: 600 });
  win.loadFile("index.html");
});

app.on("window-all-closed", () => {
  if (process.platform !== "darwin") app.quit();
});

优势:

  • 三个平台用的是同一个 Chromium,渲染结果一致,前端代码几乎不用为平台差异分支;
  • 生态最大:npm 包随便用,打包、签名、自动更新(Electron Forge、electron-builder)都有成熟方案;
  • 前端团队零门槛,招人最容易。

劣势:

  • 每个应用都自带一份 Chromium + Node.js,安装包和内存占用是 9 个方案里最重的一档;
  • 主进程、渲染进程、预加载脚本的分层和安全配置(上下文隔离、IPC 白名单)需要认真设计,否则容易留下安全隐患;
  • 不支持移动端。

热度与成熟度 :12.4 万 Stars,2013 年起步,当前 v45.2.3(2026-11-04)。最成熟、最稳妥,体积和内存不是硬约束时,它依然是很多团队的默认答案。

2. Tauri:WebView 路线的事实标准

是什么:Rust 写后端逻辑,前端随便用 React、Vue、Svelte,界面跑在操作系统自带的 WebView 里(macOS 的 WKWebView、Windows 的 WebView2、Linux 的 WebKitGTK)。

技术栈:Rust + HTML/CSS/JS。

rust 复制代码
// src-tauri/src/lib.rs
#[tauri::command]
fn greet(name: &str) -> String {
    format!("Hello, {}!", name)
}

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
ts 复制代码
// 前端
import { invoke } from "@tauri-apps/api/core";
const msg = await invoke<string>("greet", { name: "Ada" });

优势:

  • 不捆绑浏览器内核,安装包和内存都远小于 Electron;
  • 2.0 起同一套工程能出 iOS、Android;
  • 权限(capability)模型做得细,插件生态是同类里最全的。

劣势:

  • 三个平台的 WebView 内核不一样,CSS 兼容、字体渲染、性能都要分别测,Linux 上的 WebKitGTK 最容易出问题;
  • 后端要写 Rust,对纯前端团队有门槛。3.0 alpha 新增了可选的 CEF(内置 Chromium)运行时,正是为了解决内核不一致,但代价是安装包明显变大。

热度与成熟度 :11.2 万 Stars,接近 Electron 的 12.4 万;稳定线 2.12.5(2026-10-21),3.0 还在 alpha。生产可用,首选级别。

3. Wails:Go 版的 Tauri

是什么:思路和 Tauri 几乎一样,只是后端换成 Go。Go 结构体的方法会被自动生成为前端可调用的 JS/TS 绑定。

技术栈:Go + 任意 Web 前端 + 系统 WebView。

优势:

  • Go 团队零学习成本,编译快,后端并发和网络库现成;
  • v3 带来多窗口、系统托盘、新的绑定生成器,补齐了 v2 最常被吐槽的短板。

劣势:

  • 同样受三平台 WebView 差异困扰;
  • 不支持移动端;
  • v3.0.0 在 2026-10-26 才正式发布,v2 → v3 有迁移成本,社区教程大多仍是 v2 写法。

热度与成熟度 :3.7 万 Stars,2018 年起步,v2 已有大量生产应用。稳定可用,Go 团队的默认选择,新项目可直接上 v3。

4. MyGo:Go 生态的新挑战者

是什么:前端圈知名开源作者 egoist 在 2026-09-26 开的新项目,口号是「用 Go 写桌面应用,原生 UI 或 Web 前端都行」。窗口界面有两种写法,同一个应用、甚至同一个窗口里都能混用:

  • 网页模式:和 Wails 类似,用系统 WebView,前端通过自动生成的 TypeScript 客户端调用 Go;
  • 原生模式 :用 Go 的 ui 包写界面,MyGo 自己在 GPU 上绘制,没有 HTML、没有 JS、没有 WebView。
go 复制代码
type Greeter struct{}

// Greet returns a greeting.
func (Greeter) Greet(name string) string { return "Hello, " + name }

func main() {
	mygo.Bind(Greeter{})
	mygo.App.WhenReady(func() {
		mygo.NewWindow(mygo.WindowOptions{Title: "Hello", URL: "/"})
	})
	if err := mygo.App.Run(); err != nil {
		log.Fatal(err)
	}
}
ts 复制代码
import { Greeter } from "./mygo"; // 自动生成
document.body.textContent = await Greeter.greet("Ada");

优势:

  • 纯 Go、不用 cgo,在一台机器上就能交叉编译出三个平台的包,而 Wails 在 macOS、Linux 上要靠 cgo 接 WebView,交叉编译这两个平台得借助 Docker;
  • 产物是一个几 MB 的 Go 二进制;
  • 打包发布链路很全:dmg、Windows 安装器、deb、签名公证、带增量更新的自动升级都内置。

劣势:

  • 诞生约 6 周,版本 v0.8.3,API 随时可能变;
  • 原生 UI 的控件数量、复杂场景的稳定性还没经过大规模验证;
  • 要求 Go 1.27.3 以上。

热度与成熟度 :6 周 5,400 多 Stars,增速很猛;适合尝鲜和内部工具,重要产品先观望。

5. Flutter:从手机打到桌面的自绘框架

是什么:Google 出品的 UI 框架,不用 WebView,也不用系统控件,而是自带渲染引擎把每一个像素自己画出来。移动端起家,一套 Dart 代码可以出 iOS、Android、Web、Windows、macOS、Linux 六个平台;Ubuntu 的新版安装器就是用 Flutter 写的。

技术栈:Dart + Flutter 引擎(Skia / Impeller)。

dart 复制代码
import 'package:flutter/material.dart';

void main() {
  runApp(const MaterialApp(
    home: Scaffold(body: Center(child: Text('Hello'))),
  ));
}

优势:

  • 平台覆盖最广,手机和桌面能共用绝大部分代码;
  • 自绘带来的像素级一致,动画流畅,热重载开发体验好;
  • 组件丰富,Material 和 Cupertino 两套风格开箱即用,pub.dev 生态庞大。

劣势:

  • 要学 Dart,团队技术栈多一门语言;
  • 桌面端插件和第三方库明显少于移动端,菜单、托盘、多窗口等桌面能力常要靠社区插件或自己写平台代码;
  • 控件是「画」出来的,不是系统原生的,在桌面上细看会有「不像本地应用」的感觉。

热度与成熟度 :18.1 万 Stars,是 9 个方案里最高的;当前稳定版 3.47.9(2026-10-29)。成熟可用,尤其适合同时要做手机和桌面的团队。

6. GPUI:Zed 编辑器背后的 GPU 引擎

是什么:Zed 团队为自家编辑器打造的 Rust UI 框架,整个界面像游戏一样直接用 GPU 绘制,不经过 WebView,也不用系统控件。Zed 在 2026-04-29 发布 1.0;GPUI 作为 Zed 仓库里的一个 crate,采用 Apache-2.0 协议,并发布到了 crates.io。

技术栈 :Rust,GPU 渲染;配套组件库首推长桥开源的 GPUI Kit(原名 gpui-component),提供 75+ 组件、WASM 支持、无障碍和无头 UI 测试,长桥自家的桌面交易客户端就是用它写的。

优势:

  • 性能天花板高,Zed 本身就是最好的证明:大文件、长列表、高刷新率都很顺;
  • 有真实的大型商业产品在跑(Zed、长桥桌面端);
  • 内存占用远低于 WebView 方案。

劣势:

  • 文档少,很多用法要读 Zed 源码;
  • crates.io 上的 gpui 还停在 0.2.2,API 跟着 Zed 主线变,组件库常常要从 git 拉;
  • 只能写 Rust,招人和上手成本最高;不支持移动端。

热度与成熟度 :GPUI 本身没有独立仓库,Zed 仓库 9.4 万 Stars,GPUI Kit 近 2 万。引擎成熟、API 不稳定,适合对性能有极致要求、团队熟悉 Rust 的产品。

7. Rune:为 AI 写 UI 而生的 Rust 框架

是什么:Anomaly(AI 编程工具 opencode 背后的团队)在 2026-10-22 开源的 Rust UI 框架,自带 GPU 渲染器、文字排版、布局和弹簧动画,支持 macOS、Windows、Linux 和 Web(WASM)。开源两周就在 Hacker News 上拿到 177 分。

它最特别的一点:每个应用都能无头运行,AI agent 可以把界面渲染成 PNG、导出元素树、用脚本模拟输入,自己检查自己写的 UI。README 里甚至直接给了一段让 coding agent 用 Rune 写应用的提示词。

rust 复制代码
fn view(s: &State, _: &mut Cx<State>) -> El {
    let t = tok::theme(true);
    let label = text(if s.on { "Lights on" } else { "Lights off" })
        .font(type_::TITLE).color(t.text);
    col().w_full().h_full().center().gap(16.0).fill(t.bg).child(label)
}

优势:

  • 声明式 API 简洁,自带动画和组件库 rune-kit;
  • 「AI 可验证」的设计思路领先,适合让 agent 大量生成界面的团队;
  • MIT 协议。

劣势:

  • 官方明确写着 pre-release,没有发布版本,只能 pin 某个 dev 提交;
  • 不接受 PR,只收 issue,社区参与方式受限;
  • 无障碍深度、输入法、无 GPU 环境下的表现,社区仍在追问。

热度与成熟度 :两周多 5,100+ Stars。目前是实验品,适合关注、不适合押注。

8. Native Shell(NSH):一套代码,各平台真原生

是什么 :长桥在 2026-10-14 开源的 Rust UI 框架,主打「Build once, native everywhere」。和 Flutter、GPUI、Rune 自己画界面不同,它调用每个平台自己的原生控件:iOS 用 UIKit,Android 用原生 View,macOS 用 AppKit,Windows 用 Win32 + Direct2D,Linux 用 GTK 4,Web 输出 HTML,甚至还能渲染到 GPUI 窗口和终端里。

技术栈:Rust 内核;界面可以用 Rust 写,也可以用 TSX 写(编译成 QuickJS 字节码),布局是 flexbox/grid,样式用 Tailwind 类名,响应式是 Solid 风格的信号。

优势:

  • 本文 9 个方案里唯一一个桌面 + iOS + Android + Web 全覆盖、且用原生控件的,外观、输入法、无障碍天然贴合系统;
  • 可以嵌进已有的原生 App;
  • 支持运行时下发签名的 TSX 模块,在沙盒里运行,适合插件和 AI 生成的界面。

劣势:

  • 诞生 3 周多,v0.4.0,生态几乎为零;
  • 各平台原生控件行为不一致,跨平台像素级一致比自绘方案难;
  • 最低系统要求偏高:macOS 14、iOS 15、Android 9、GTK 4.14。

热度与成熟度 :2,100 Stars,背后有长桥做 GPUI Kit 的经验。思路最有野心,但现在只适合跟进观察。

9. PyQt / PySide:最老牌的稳妥选择

是什么:Python 对 Qt 的绑定。Qt 是 1995 年就发布的 C++ 跨平台框架,控件、图表、多媒体、数据库一应俱全。PyQt6 由 Riverbank 维护,PySide6 是 Qt 官方绑定,两者当前都是 6.12.0。

python 复制代码
import sys
from PyQt6.QtWidgets import QApplication, QPushButton

app = QApplication(sys.argv)
btn = QPushButton("Hello")
btn.clicked.connect(lambda: print("clicked"))
btn.show()
sys.exit(app.exec())

优势:

  • 成熟度碾压:控件最全,有可视化设计器 Qt Designer,资料和问答海量;
  • 写数据分析工具、科研软件、内部工具时,能直接用 Python 的 numpy、pandas 生态。

劣势:

  • 协议要注意:PyQt6 是 GPL,闭源商用要买商业授权;想要更宽松的 LGPL,就换 PySide6;
  • 打包靠 PyInstaller / Nuitka,安装包大、启动慢,源码保护弱;
  • 界面风格偏传统,做成现代化 UI 要花不少样式功夫。

热度与成熟度 :最成熟,但在新项目里的势头不如 WebView 和 Rust 系。

还有哪些值得一提

方案 技术栈 一句话 Stars
Compose Multiplatform Kotlin JetBrains 出品,Android 团队最顺手 1.9 万
Avalonia C# / .NET,自绘 WPF 的跨平台继承者,.NET 团队首选 3.2 万
Slint Rust / C++ / JS,声明式 DSL 1.x 稳定,嵌入式设备也能跑 2.4 万
Dioxus Rust,类 React 一套代码出 Web、桌面、移动端 4.0 万

面向人群:按团队背景选

  • 前端团队,要小体积:Tauri;要绝对的渲染一致性,再考虑 Electron。
  • Go 团队:要稳就用 Wails v3;想要单二进制、交叉编译、甚至不写前端,试试 MyGo。
  • Rust 团队,追求极致性能:GPUI + GPUI Kit。
  • Python / 数据 / 科研工具:PySide6(协议宽松)或 PyQt6。
  • 一套代码同时上手机和桌面:今天选 Flutter 或 Tauri 2;明天值得盯的是 Native Shell。
  • 让 AI 大量生成界面:关注 Rune 和 Native Shell 的 agent 友好设计,先在小项目里试。

我的看法

三条路线的分化会越来越明显:Web 路线(Electron、Tauri、Wails)赢在生态和开发效率;自绘路线(Flutter、GPUI、Rune、MyGo 原生模式)赢在性能和一致性;原生控件路线(Native Shell)赢在系统体验和移动端覆盖。

两个月内冒出三个新框架,说明「Electron 太重」这个老问题还没被彻底解决,也说明 AI 正在改变 UI 框架的设计标准:能不能被 agent 写好、测好,正在变成新的竞争点。但对要上线的产品来说,成熟度仍然是第一位的。新框架先放进内部工具里试,比直接押上主力产品稳妥得多。

你的下一个桌面项目,会继续用 Electron / Tauri 这种 Web 方案,还是转向 Flutter、GPUI 这类自绘框架,或者赌一把原生控件?

相关推荐
程序员大阳1 小时前
HTML+CSS+JS对话式实战(6)-学生端查看活动功能开发
javascript·css·html·模块·查看学生
jay神1 小时前
基于 YOLOv8 的轴承缺陷检测(Web 版)
前端·人工智能·yolo
jay神1 小时前
基于 YOLOv8 的森林火灾检测系统(Web 版)
前端·yolo
code2cat1 小时前
HTML基础篇之第一张网页:从index.html到浏览器里的任务清单
前端·html
miss2 小时前
AI 改完不敢上线?OpenSpec 规约驱动开发实战
前端·代码规范·前端工程化
AiMan3 小时前
腾讯ima还是不可以导出左侧所有对话,只能单条导出,方法不对吗
前端
去伪存真3 小时前
并发量一高就装死?Agent 全链路“防猝死”手册
前端·agent
Moment3 小时前
AI 编程时代,聊聊我的 Mac mini 双屏桌面
前端·后端
AiMan3 小时前
先确认能不能一次把Microsofat Copilot所有内容打包一个文件导出
前端