Deno Desktop
Package web applications as cross-platform desktop programs with deno desktop in Deno 2.9
deno desktop is available in Deno 2.9+. It packages a TypeScript/JavaScript application, the Deno runtime, and a web rendering backend into a self-contained artifact per platform.
Shortest workflow
deno --version # requires 2.9+
deno desktop --hmr main.ts
deno desktop main.ts
The entry can be a small Deno.serve application or a framework such as Next.js, Astro, Fresh, or SvelteKit. Configure adapters, assets, and development commands from the framework-specific official guide.
Capabilities and boundaries
| Capability | Current meaning |
|---|---|
| Windows | Deno.BrowserWindow owns lifecycle and multiple windows |
| Frontend/backend calls | explicit bindings; renderer input is never trusted code |
| Desktop integration | menus, tray, Dock, dialogs, and native notifications |
| Debugging | --hmr and unified DevTools |
| Distribution | target triples and --all-targets cross-builds |
| Updates | Deno.autoUpdate() with bsdiff and failed-launch rollback |
deno desktop --target aarch64-apple-darwin main.ts
deno desktop --all-targets main.ts
Release checks
- Configure real macOS/Windows code signing; an ad-hoc signature does not remove Gatekeeper warnings.
- Verify notifications, file dialogs, GPU, fonts, and updates on every target OS.
- Sign update manifests with Ed25519 and serve updates over HTTPS.
- Official docs currently say Windows cannot apply a downloaded auto-update patch; verify again before release.
- Error reports may contain stacks and runtime context. Send them only over HTTPS after data classification.
Official sources: Desktop apps, Distribution, and Auto-update.