Deno Desktop
Deno Desktop 概览
- 提供一种使用 Deno 和 Web 技术(HTML/CSS/JS/TS)构建桌面应用的方式。
- 支持多个后端:系统 WebView(设计中的默认项)、通过 CEF 打包的 Chromium,以及面向自定义渲染(例如 WebGPU)的低层“raw”后端。
- 与 Deno 现有特性集成:可编译为单一二进制文件、支持交叉编译、Node 兼容性、自动更新,以及 npm 生态系统。
与 Electron、Tauri 及其他方案的对比
- 定位为“像 Tauri,但也可以像 Electron”:
- 使用 WebView 后端,借助操作系统引擎生成较小的二进制文件。
- 可选 CEF 后端,在各平台上提供一致、现代的渲染。
- 与 Electron 相比:上手更容易、打包体积可能更小、以 TS 为先、使用 Deno API 而非 Node,并且内建工具链。
- 与 Tauri 相比:Tauri 采用基于 Rust 的后端且仅使用系统 WebView(CEF 也在计划中),而 Deno Desktop 基于 JS/TS,并且已经随附 CEF。
- 提到的其他替代方案:Wails(Go)、Dioxus/Blitz(Rust,自定义引擎)、Sciter、Java/Qt/GTK、基于 WASM 的方案(Jumpjet)。
二进制大小、性能,以及 WebViews 与 CEF
- 一些用户报告在 Windows 上构建出的“hello world”大约有 440 MB,原因是 CEF;这与他们对低于 20 MB 应用的预期形成鲜明反差。
- 维护者指出,WebView + 压缩可以做到约 15 MB,但当前默认/后端行为令人困惑,文档也需要修正。
- 系统 WebViews:
- 优点:二进制更小,复用现有浏览器引擎。
- 缺点:平台特定 bug 和年代久远的问题(尤其是 Linux 上的 WebKitGTK、较老的 macOS Safari/WebView)。
- CEF:
- 优点:在所有操作系统上都提供可预测、持续更新的渲染和 API。
- 缺点:二进制很大;对于共享运行时/版本管理以及它是否真正避免了“每个 Electron 应用都自带一份浏览器”的重复开销,存在疑问。
原生 UI 与 Web UI,以及 UX 一致性
- 关于“web UI 糟糕堆砌”是否可接受、还是应该使用原生工具包,出现了冗长而激烈的争论。
- 支持 Web UI 的理由:
- 跨平台在不同操作系统上更一致。
- HTML/CSS/JS 对开发者来说极其熟悉。
- 原生工具包碎片化、不一致或令人痛苦(Windows 工具包频繁变化、GTK 与 Qt、SwiftUI 问题、Linux 多样性)。
- 支持原生 UI 的理由:
- 操作系统层面的统一性与模式有助于可用性、可发现性和可访问性。
- 许多 Web/Electron 应用忽视平台惯例,产生“像素汤”,且无障碍支持薄弱。
- 有些人认为用户确实会抱怨行为不一致,即使他们不会使用“原生 UI”这个术语。
- 普遍感觉是,操作系统本身已经变得不那么一致,这削弱了许多开发者坚持“必须看起来原生”的论点。
安全性、权限与 IPC 模型
- 有人询问 Deno 的权限系统如何应用于已编译的桌面二进制文件。
- 当前文档:桌面应用尚未提供运行时权限提示;权限是在编译时写死的。
- 也有人担心,如果你无法控制捆绑的运行时,权限提示会具有误导性。
- 建议:如果你在意权限执行,可以通过受信任的本地 Deno(
deno run)来运行下载的应用,或者放在容器/虚拟机中。 - IPC/架构:
- 后端和 UI 运行在同一进程中(CEF),或者运行在紧密协调的进程组中(WebView),并通过进程内 C ABI 绑定而非基于 socket 的 IPC。
- 这被认为比传统 Electron 式 IPC 开销更低;安全影响仍有争论,但在该讨论串中尚未定论。
平台支持、工具链与使用场景
- 目前仅限 canary 版(Deno v2.9);一些用户遇到了早期 bug(空白窗口),并被要求提交 issue。
- 移动端(iOS/Android)支持“计划中/正在调研”,但尚不可用;文档暗示未来会支持。
- 讨论的使用场景:内部工具、自助终端应用、将 Web 游戏打包到 Steam/桌面、发布带可选 GUI 的基于 Deno 的 CLI。
- 有些人对 Deno 整体持乐观态度(TS 优先、集成工具链、编译能力、Node 兼容);也有人厌倦了“又一种发布臃肿 JavaScript 桌面应用的方式”。