---
last_modified: 2026-06-17
title: "桌面应用"
description: "从 Deno 项目构建自包含的桌面应用,具备框架自动检测、热重载、原生窗口、自动更新以及跨平台分发能力。"
---
`deno desktop` 会将一个 Deno 项目(从单个 TypeScript 文件到 Next.js 应用都可以)转换为一个自包含的桌面应用。输出结果是一个可重新分发的二进制文件,它将你的代码、Deno 运行时以及一个 Web 渲染引擎打包到每个平台的一个 bundle 中。
:::info 即将于 Deno 2.9 提供
`deno desktop` 将随 Deno v2.9.0 一同发布,但目前尚未进入稳定版。若想现在就试用,请运行 `deno upgrade canary` 来安装
[`canary`](/runtime/reference/cli/upgrade/) 构建。该命令、配置键以及 TypeScript API 在该功能稳定之前仍可能发生变化。
:::
## 为什么选择 `deno desktop`
Web 技术是全世界最广为人知的 UI 工具包。基于 Web 技术栈构建的桌面应用(Electron、Tauri、Electrobun)都能利用这一点,但它们各自也都有你不得不接受的取舍:庞大的二进制文件、平台支持缺失、没有 JavaScript 生态、没有内置的更新方案、没有框架集成。
`deno desktop` 对这些取舍有明确立场:
- **默认轻量,同时完整兼容 Node。** 默认的 WebView 后端使用操作系统自带的 webview,因此二进制体积更小;同时,你仍可通过 Deno 的 Node 兼容层使用完整的 npm 生态系统。当你需要在 macOS、Windows 和 Linux 上获得完全一致的渲染效果时,可以选择内置的 Chromium(CEF)后端。
- **框架自动检测。** 将 `deno desktop` 指向 Next.js、Astro、Fresh、Remix、Nuxt、SvelteKit、SolidStart、TanStack Start 或 Vite SSR 项目即可运行:发布模式下运行生产服务器,`--hmr` 下运行带热重载的开发服务器。无需修改代码,就能把现有 Web 项目带到桌面端。
- **进程内绑定,而非 IPC。** 后端与 UI 的通信通过进程内通道进行,而不是基于 socket 的 IPC。值在跨越调用边界时仍会被编码,但你的 Deno 代码与 webview 之间不会发生跨进程往返。
- **单机跨编译。** 同一台机器可以构建 macOS、Windows 和 Linux 版本。后端会按需下载,而不是在本地构建。
- **内置基于二进制差分的自动更新。** 只需发布一个 `latest.json` 清单和 bsdiff 补丁;运行时会自动轮询、应用更新,并在启动失败时回滚。
## Hello, desktop
创建一个单文件桌面应用:
```ts title="main.ts"
Deno.serve(() =>
new Response("
Hello, desktop
", {
headers: { "content-type": "text/html" },
})
);
```
```sh
deno desktop main.ts
```
编译后的二进制文件会打开一个窗口,并指向一个本地 HTTP 服务器,该服务器绑定到你的
[`Deno.serve()`](/api/deno/~/Deno.serve) 处理器。直接运行它:
```sh
./main # macOS / Linux
.\main.exe # Windows
```
[`Deno.serve()`](/api/deno/~/Deno.serve) 会自动绑定到 webview 导航所使用的地址,因此你无需传入端口或主机名。详见
[HTTP 提供服务](/runtime/desktop/serving/)。
## 本节内容
- [配置](/runtime/desktop/configuration/): `deno.json` 中的 `desktop` 配置块。
- [后端](/runtime/desktop/backends/): CEF、webview、raw;如何选择。
- [HTTP 提供服务](/runtime/desktop/serving/):
[`Deno.serve()`](/api/deno/~/Deno.serve) 集成与服务模型。
- [框架](/runtime/desktop/frameworks/): Next.js、Astro、Fresh、Remix、
Nuxt、SvelteKit 等。
- [窗口](/runtime/desktop/windows/):
[`Deno.BrowserWindow`](/api/deno/~/Deno.BrowserWindow) 生命周期、多窗口、事件。
- [绑定](/runtime/desktop/bindings/): 通过
`bindings.()` 从 webview 调用 Deno 代码。
- [菜单](/runtime/desktop/menus/): 应用菜单和上下文菜单。
- [托盘和程序坞](/runtime/desktop/tray_and_dock/): 系统状态图标和
macOS 程序坞。
- [对话框](/runtime/desktop/dialogs/): 将 `prompt()`、`alert()`、`confirm()` 作为
原生弹窗。
- [通知](/runtime/desktop/notifications/): 通过 Web `Notification` API 使用原生 OS 通知。
- [热模块替换](/runtime/desktop/hmr/): 面向框架应用和非框架应用的
`--hmr`。
- [DevTools](/runtime/desktop/devtools/): 同时连接 Deno 运行时和 webview 的统一 DevTools。
- [自动更新](/runtime/desktop/auto_update/):
[`Deno.autoUpdate()`](/api/deno/~/Deno.autoUpdate)、清单、bsdiff、
回滚。
- [错误报告](/runtime/desktop/error_reporting/): 捕获未处理的
异常和 panic。
- [分发](/runtime/desktop/distribution/): 跨编译、输出
格式、安装程序。
- [比较](/runtime/desktop/comparison/): `deno desktop` 与
Electron、Tauri、Electrobun、Dioxus 的关系。
- [`deno desktop` CLI 参考](/runtime/reference/cli/desktop/): 该命令、
其标志以及 `deno.json` 中的 `desktop` schema。