讨论一下 Wails、Tauri、Flutter、Electron 这几种热门的桌面客户端技术栈
- 内容介绍
- 文章标签
- 相关推荐
宣传主张
- Wails: 体积小、启动快、学习曲线平滑、上手难度低
- Tauri: 体积极小、分发便捷、安全性高
- Flutter: 引擎强大、生态丰富、上限极高
- Electron: 内嵌引擎、依赖隔离、通用可靠
各自叙事
Wails & Tauri 轻量派 / 系统原生
Wails(v2) 和 Tauri 都采用系统自带的浏览器引擎, 因此天然拥有打包体积小的亮点, 安装包通常在 10MB 以内, 对比 Electron 动辄 100MB+ 的体量, 差距明显
同时得益于 Golang 和 Rust 本身的性能优势, 两者的启动速度均能做到毫秒级
主要差异在于:
- Wails 更加容易上手。Go 的语法简洁、并发模型直观,前端开发者可以在几小时内跑通第一个 demo
- Tauri 的整体分发构建体系更加完善, Rust 后端提供了更强的类型安全和内存安全保障,v2 版本引入了更完善的插件系统、移动端支持(iOS、Android),以及更细粒度的权限控制机制
Wails v3 带来了架构层面的重大变化: 从声明式 API 转向更灵活的过程式、支持多窗口管理、引入了更透明的构建系统、引入了内嵌引擎Blink, 不过 v3 目前仍处于 alpha,生产环境建议继续使用 v2(这玩意v3 a了很久很久了, 还是遥遥无期
Flutter 自成一派
Flutter 主打自有的渲染引擎, 不依赖系统 WebView, 这意味着它在所有平台上拥有完全一致的渲染表现
上限极高, 能实现游戏级别的复杂动画和图形渲染, 轻松达到 60 FPS 甚至 120 FPS+
同时 Flutter 的插件生态丰富, 可以快速实现桌面端和移动端之间的迁移, 同一套 Dart 代码库覆盖 Android、iOS、macOS、Windows、Linux 和 Web 六大平台
对于需要全平台覆盖的产品来说, Flutter 的 WORA 叙事非常有吸引力, 前提是你用的惯 Dart
Electron 不依赖环境
Electron 在其官网直接说明了核心优势: 内嵌 Chromium 和 Node.js, 目标是提供可靠、安全、稳定且成熟的体验, 主张是不依赖用户的运行环境
这个定位看似保守, 但在商业场景中却极其重要! (Electron 是工作 Wails 是生活
你不需要担心用户的系统版本、WebView 版本、字体渲染差异
VS Code、Slack、Discord、Figma 等头部产品都选择了 Electron
辩论的看点
商业角度
一致性是生命线
Wails(v2) 和 Tauri 最大的痛点,恰恰正是它们最大的亮点——使用了系统内置的 WebView 引擎
不同电脑的系统、WebView 版本、渲染规则都有可能存在差异, 有概率导致 UI 错位、样式错乱、字体变形、交互异常
| 系统 | 内核 | 差异点 |
|---|---|---|
| Windows | Edge WebView2 | 不同 Win7/8/10/11 版本, WebView2 Runtime 版本可能差异巨大, 部分旧系统甚至未预装 |
| macOS | Safari WebKit | 新老 macOS 对 CSS/JS 特性支持差异极大, Safari 一向以慢半拍著称 |
| Linux | WebKitGTK | 兼容性最差, 样式最容易乱, 且不同发行版的 WebKitGTK 版本参差不齐 |
再叠加系统缩放、系统字体、系统主题、DPI 差异…
如果一定要用 Wails(v2) 或 Tauri,解决方案是有的
- 在 Windows 上强制使用(安装) WebView2 Runtime, 禁止使用旧版 Trident/EdgeHTML 内核
- 在 macOS、Linux 上禁用系统原生样式注入
那 Flutter 呢?
Flutter 因为自带渲染引擎, 天然不存在 WebView 一致性问题, 但 Flutter 最大的问题是性价比, 大部分团队的技术栈都不覆盖 Dart/Flutter
Electron 从商业应用来看是当之无愧的真神
体验角度
小而美 vs 大而全
Wails、Tauri 和 Flutter 都能受益于本身 Golang、Rust 和 Dart 生态来实现一些 Electron 难以做到的事情
例如你能直接将 Ollama 嵌入到你的 Wails AI 应用中,假装自己自研了一个新的运行时 省去小白用户还要手动安装 Ollama 的问题
Tauri 也是同理, Rust 生态中的高性能库可以直接编译进二进制, 无需额外运行时依赖
这种小而美的体验在安装环节就能给用户留下好印象
- 10MB 的安装包 vs 150MB 的安装包(且不提分发效率)
- 0.5s 的启动速度 vs 2-3s 的启动速度
- 30MB 的内存占用 vs 150-300MB 的内存占用
而在开发体验方面
- Wails 和 Electron 因为技术栈的亲和性, 使得开发者上手门槛低学习曲线平滑, 尤其是 Electron 几乎零门槛
- Tauri 本体开发体验不错, 但 Rust 的学习曲线是实打实的高, 所有权、生命周期、借用检查…
- Flutter 的开发体验和原生安卓非常类似, 熟悉的开发者上手会很快, 但桌面端仍有提升空间(热重载不稳定、部分桌面 API 缺失
生态角度
成熟度几乎等同成本
| 维度 | Electron | Tauri | Wails | Flutter |
|---|---|---|---|---|
| 社区规模 | ★★★★★ | ★★★★ | ★★★ | ★★★★ |
| 生产案例 | VS Code、Codex | 极少数 | 极少数 | Google Ads、BMW |
| 包管理 | ★★★★★ | ★★★ | ★★ | ★★★★ |
| 文档完善度 | ★★★★★ | ★★★★ | ★★★ | ★★★★ |
| 桌面端成熟度 | ★★★★★ | ★★★ | ★★★ | ★★★ |
| 移动端支持 | x | x | ||
| 跨平台一致性 | ★★★★★ | ★★★ | ★★★ | ★★★★★ |
Electron 的 npm 生态和社区积累是其他框架短期内无法追赶的, 当你需要某个功能时, 大概率已经有一个 npm 包可以直接用
而 Tauri 和 Wails 的生态仍在快速成长中(很多场景需要自己造轮子
综上, 你的最常用的是哪个?
我是用的 Wails, 咳咳前文可以看到确实有些主观偏向 主要是 Rust 太难用了
如有疏漏欢迎指出~
网友解答:--【壹】--:
很好的一篇文章。我本身是一个python后端开发。。。。。python的桌面应用真是一眼难进,而且我还是mac开发机,家里人用win运行。python还不能跨平台打包。。。
最近在帮家里人写个桌面端小软件,这几个调研了一圈,最后还是决定用wails,直接给整个压缩包打包了webview文件进去 本身有一定的go基础,能在开发中学习(虽然现在基本都是vibe coding)了。
佬的这篇文章介绍的很详细,后续有需求可以方便考虑技术栈了。
--【贰】--: Kkk Lls:
公司的项目最好还是Electron
Electron真的很恶心,每人一个内核
我假期没事干开发软件,功能都比较简单,swiftui做出来只有1兆,而electron默认有近300兆,实在是太变态了
--【叁】--:
JetBrains家的KMP也是支持桌面和移动端,不知道咋样
--【肆】--:
Wails和Tauri是一类东西,都是一门语言后端+webview
Ft是自己的渲染引擎
el是最成熟和古老的,最吃资源
--【伍】--: ArkaneFans:
桌面端的话
不考虑其他的,我觉得avalonia更好一点,就是用得人少,表现力还是不错的,就是AI可能写不明白
--【陆】--:
长久用肯定Flutter最好,社区也活跃,不过公司小项目我一般都是用Electron,毕竟方便快捷,除非公司给你时间去搭建和优化
--【柒】--:
只讨论桌面端的话Electron就是唯一真神,flutter桌面端的多窗口虽然合并了,但还不是正式版
--【捌】--:
依我看swift跨平台5-10年都发展不出来
最多做个逻辑兼容层
--【玖】--:
可能 Tauri 的缺陷还是在于 rust 生态?
我之前使用 rust 编写 web 后端时,发现很多包都是处于 0.x.x 版本,都未正式发版
--【拾】--:
主要针对开发,自己用的话肯定还是想要原生性能
--【拾壹】--:
你说对了,Rust这边不知道怎么搞的就是不爱发正式版,一升级能炸一堆
--【拾贰】--:
我觉得一个都不能打,还是在探索比较无痛的GUI跨平台方案
Web的问题就是消耗太大了,无论走不走webview内存占用多逃不了
--【拾叁】--:
感觉最有竞争力还是Flutter,弄完electron之后打算弄弄看
--【拾肆】--:
flutter我觉得最好,当时还学了几天,可惜项目没有下来。electron基本懂前端的就是有手就行,但是缺点就是体积大,还有就是底层通信麻烦,前几年一个项目里面需要操作更底层的api,又不会c++,然后node-ffi又和新版本完全不匹配,挺麻烦的,不过现在有AI了,这个问题不大。
tauri我最近一直在用ai给我写项目,编译开发阶段过程体积大,打包后小,也不懂rust,谈不上感觉,后面我做好了,发个帖子,让佬用用看
--【拾伍】--:
感谢科普 对桌面端框架了解的不多 之前只用vibe coding 弄了tauri的桌面端 只看见容量小 没有意识到其弱点
--【拾陆】--:
前几天swift好像出了个对接安卓的sdk,也算跨平台开发了?
--【拾柒】--:
感觉移动端就flutter最好,桌面端自己的项目可以尝试tauri,公司的项目最好还是Electron
--【拾捌】--:
我选择Electron。最近开源的一个旮旯管理器也是纯vibe出来的Electron桌面应用。主要就是JS生态对于vibe实在是太友好了。什么?你说性能?能跑不就行了
--【拾玖】--:
比较喜欢tauri,wails也挺不错的,就是社区热度有点低,憋那么久才憋出来正式的2.0,最讨厌的是electron 最近electrobun发展也挺快的
宣传主张
- Wails: 体积小、启动快、学习曲线平滑、上手难度低
- Tauri: 体积极小、分发便捷、安全性高
- Flutter: 引擎强大、生态丰富、上限极高
- Electron: 内嵌引擎、依赖隔离、通用可靠
各自叙事
Wails & Tauri 轻量派 / 系统原生
Wails(v2) 和 Tauri 都采用系统自带的浏览器引擎, 因此天然拥有打包体积小的亮点, 安装包通常在 10MB 以内, 对比 Electron 动辄 100MB+ 的体量, 差距明显
同时得益于 Golang 和 Rust 本身的性能优势, 两者的启动速度均能做到毫秒级
主要差异在于:
- Wails 更加容易上手。Go 的语法简洁、并发模型直观,前端开发者可以在几小时内跑通第一个 demo
- Tauri 的整体分发构建体系更加完善, Rust 后端提供了更强的类型安全和内存安全保障,v2 版本引入了更完善的插件系统、移动端支持(iOS、Android),以及更细粒度的权限控制机制
Wails v3 带来了架构层面的重大变化: 从声明式 API 转向更灵活的过程式、支持多窗口管理、引入了更透明的构建系统、引入了内嵌引擎Blink, 不过 v3 目前仍处于 alpha,生产环境建议继续使用 v2(这玩意v3 a了很久很久了, 还是遥遥无期
Flutter 自成一派
Flutter 主打自有的渲染引擎, 不依赖系统 WebView, 这意味着它在所有平台上拥有完全一致的渲染表现
上限极高, 能实现游戏级别的复杂动画和图形渲染, 轻松达到 60 FPS 甚至 120 FPS+
同时 Flutter 的插件生态丰富, 可以快速实现桌面端和移动端之间的迁移, 同一套 Dart 代码库覆盖 Android、iOS、macOS、Windows、Linux 和 Web 六大平台
对于需要全平台覆盖的产品来说, Flutter 的 WORA 叙事非常有吸引力, 前提是你用的惯 Dart
Electron 不依赖环境
Electron 在其官网直接说明了核心优势: 内嵌 Chromium 和 Node.js, 目标是提供可靠、安全、稳定且成熟的体验, 主张是不依赖用户的运行环境
这个定位看似保守, 但在商业场景中却极其重要! (Electron 是工作 Wails 是生活
你不需要担心用户的系统版本、WebView 版本、字体渲染差异
VS Code、Slack、Discord、Figma 等头部产品都选择了 Electron
辩论的看点
商业角度
一致性是生命线
Wails(v2) 和 Tauri 最大的痛点,恰恰正是它们最大的亮点——使用了系统内置的 WebView 引擎
不同电脑的系统、WebView 版本、渲染规则都有可能存在差异, 有概率导致 UI 错位、样式错乱、字体变形、交互异常
| 系统 | 内核 | 差异点 |
|---|---|---|
| Windows | Edge WebView2 | 不同 Win7/8/10/11 版本, WebView2 Runtime 版本可能差异巨大, 部分旧系统甚至未预装 |
| macOS | Safari WebKit | 新老 macOS 对 CSS/JS 特性支持差异极大, Safari 一向以慢半拍著称 |
| Linux | WebKitGTK | 兼容性最差, 样式最容易乱, 且不同发行版的 WebKitGTK 版本参差不齐 |
再叠加系统缩放、系统字体、系统主题、DPI 差异…
如果一定要用 Wails(v2) 或 Tauri,解决方案是有的
- 在 Windows 上强制使用(安装) WebView2 Runtime, 禁止使用旧版 Trident/EdgeHTML 内核
- 在 macOS、Linux 上禁用系统原生样式注入
那 Flutter 呢?
Flutter 因为自带渲染引擎, 天然不存在 WebView 一致性问题, 但 Flutter 最大的问题是性价比, 大部分团队的技术栈都不覆盖 Dart/Flutter
Electron 从商业应用来看是当之无愧的真神
体验角度
小而美 vs 大而全
Wails、Tauri 和 Flutter 都能受益于本身 Golang、Rust 和 Dart 生态来实现一些 Electron 难以做到的事情
例如你能直接将 Ollama 嵌入到你的 Wails AI 应用中,假装自己自研了一个新的运行时 省去小白用户还要手动安装 Ollama 的问题
Tauri 也是同理, Rust 生态中的高性能库可以直接编译进二进制, 无需额外运行时依赖
这种小而美的体验在安装环节就能给用户留下好印象
- 10MB 的安装包 vs 150MB 的安装包(且不提分发效率)
- 0.5s 的启动速度 vs 2-3s 的启动速度
- 30MB 的内存占用 vs 150-300MB 的内存占用
而在开发体验方面
- Wails 和 Electron 因为技术栈的亲和性, 使得开发者上手门槛低学习曲线平滑, 尤其是 Electron 几乎零门槛
- Tauri 本体开发体验不错, 但 Rust 的学习曲线是实打实的高, 所有权、生命周期、借用检查…
- Flutter 的开发体验和原生安卓非常类似, 熟悉的开发者上手会很快, 但桌面端仍有提升空间(热重载不稳定、部分桌面 API 缺失
生态角度
成熟度几乎等同成本
| 维度 | Electron | Tauri | Wails | Flutter |
|---|---|---|---|---|
| 社区规模 | ★★★★★ | ★★★★ | ★★★ | ★★★★ |
| 生产案例 | VS Code、Codex | 极少数 | 极少数 | Google Ads、BMW |
| 包管理 | ★★★★★ | ★★★ | ★★ | ★★★★ |
| 文档完善度 | ★★★★★ | ★★★★ | ★★★ | ★★★★ |
| 桌面端成熟度 | ★★★★★ | ★★★ | ★★★ | ★★★ |
| 移动端支持 | x | x | ||
| 跨平台一致性 | ★★★★★ | ★★★ | ★★★ | ★★★★★ |
Electron 的 npm 生态和社区积累是其他框架短期内无法追赶的, 当你需要某个功能时, 大概率已经有一个 npm 包可以直接用
而 Tauri 和 Wails 的生态仍在快速成长中(很多场景需要自己造轮子
综上, 你的最常用的是哪个?
我是用的 Wails, 咳咳前文可以看到确实有些主观偏向 主要是 Rust 太难用了
如有疏漏欢迎指出~
网友解答:--【壹】--:
很好的一篇文章。我本身是一个python后端开发。。。。。python的桌面应用真是一眼难进,而且我还是mac开发机,家里人用win运行。python还不能跨平台打包。。。
最近在帮家里人写个桌面端小软件,这几个调研了一圈,最后还是决定用wails,直接给整个压缩包打包了webview文件进去 本身有一定的go基础,能在开发中学习(虽然现在基本都是vibe coding)了。
佬的这篇文章介绍的很详细,后续有需求可以方便考虑技术栈了。
--【贰】--: Kkk Lls:
公司的项目最好还是Electron
Electron真的很恶心,每人一个内核
我假期没事干开发软件,功能都比较简单,swiftui做出来只有1兆,而electron默认有近300兆,实在是太变态了
--【叁】--:
JetBrains家的KMP也是支持桌面和移动端,不知道咋样
--【肆】--:
Wails和Tauri是一类东西,都是一门语言后端+webview
Ft是自己的渲染引擎
el是最成熟和古老的,最吃资源
--【伍】--: ArkaneFans:
桌面端的话
不考虑其他的,我觉得avalonia更好一点,就是用得人少,表现力还是不错的,就是AI可能写不明白
--【陆】--:
长久用肯定Flutter最好,社区也活跃,不过公司小项目我一般都是用Electron,毕竟方便快捷,除非公司给你时间去搭建和优化
--【柒】--:
只讨论桌面端的话Electron就是唯一真神,flutter桌面端的多窗口虽然合并了,但还不是正式版
--【捌】--:
依我看swift跨平台5-10年都发展不出来
最多做个逻辑兼容层
--【玖】--:
可能 Tauri 的缺陷还是在于 rust 生态?
我之前使用 rust 编写 web 后端时,发现很多包都是处于 0.x.x 版本,都未正式发版
--【拾】--:
主要针对开发,自己用的话肯定还是想要原生性能
--【拾壹】--:
你说对了,Rust这边不知道怎么搞的就是不爱发正式版,一升级能炸一堆
--【拾贰】--:
我觉得一个都不能打,还是在探索比较无痛的GUI跨平台方案
Web的问题就是消耗太大了,无论走不走webview内存占用多逃不了
--【拾叁】--:
感觉最有竞争力还是Flutter,弄完electron之后打算弄弄看
--【拾肆】--:
flutter我觉得最好,当时还学了几天,可惜项目没有下来。electron基本懂前端的就是有手就行,但是缺点就是体积大,还有就是底层通信麻烦,前几年一个项目里面需要操作更底层的api,又不会c++,然后node-ffi又和新版本完全不匹配,挺麻烦的,不过现在有AI了,这个问题不大。
tauri我最近一直在用ai给我写项目,编译开发阶段过程体积大,打包后小,也不懂rust,谈不上感觉,后面我做好了,发个帖子,让佬用用看
--【拾伍】--:
感谢科普 对桌面端框架了解的不多 之前只用vibe coding 弄了tauri的桌面端 只看见容量小 没有意识到其弱点
--【拾陆】--:
前几天swift好像出了个对接安卓的sdk,也算跨平台开发了?
--【拾柒】--:
感觉移动端就flutter最好,桌面端自己的项目可以尝试tauri,公司的项目最好还是Electron
--【拾捌】--:
我选择Electron。最近开源的一个旮旯管理器也是纯vibe出来的Electron桌面应用。主要就是JS生态对于vibe实在是太友好了。什么?你说性能?能跑不就行了
--【拾玖】--:
比较喜欢tauri,wails也挺不错的,就是社区热度有点低,憋那么久才憋出来正式的2.0,最讨厌的是electron 最近electrobun发展也挺快的

