Desktop apps | Deno DocsSkip to main content⌘K
↑↓Up or down tonavigate↵Enter toselectESCEscape toclose
Toggle Theme
Toggle navigation menu
On this pageWhy deno desktop<br>Hello, desktop<br>What's in this section<br>deno desktop turns a Deno project (anything from a single TypeScript file to a<br>Next.js app) into a self-contained desktop application. The output is a<br>redistributable binary that bundles your code, the Deno runtime, and a web<br>rendering engine into one bundle per platform.
Coming in Deno 2.9
deno desktop ships in Deno v2.9.0 and is not in a stable release yet. To try<br>it now, run deno upgrade canary to install the<br>canary build. The command, configuration<br>keys, and TypeScript APIs may still change before the feature is stable.
Why deno desktop Jump to heading#
Web technology is the most widely-known UI toolkit in the world. Desktop apps<br>built on web stacks (Electron, Tauri, Electrobun) take advantage of that, but<br>each has tradeoffs you have to live with: huge binaries, missing platform<br>support, no JavaScript ecosystem, no built-in update story, no framework<br>integration.
deno desktop is opinionated about those tradeoffs:
Small by default, full Node compatibility. The default WebView backend<br>uses the operating system's own webview for small binaries, and you still have<br>the entire npm ecosystem available through Deno's Node compat layer. Opt into<br>the bundled Chromium (CEF) backend when you need identical rendering across<br>macOS, Windows, and Linux.
Framework auto-detection. Point deno desktop at a Next.js, Astro, Fresh,<br>Remix, Nuxt, SvelteKit, SolidStart, TanStack Start, or Vite SSR project and it<br>runs: the production server in release mode, the dev server with hot reload<br>under --hmr. No code changes are required to take an existing web project to<br>the desktop.
In-process bindings instead of IPC. Backend and UI communication goes<br>through in-process channels, not socket-based IPC. Values are still encoded as<br>they cross the call boundary, but there is no cross-process round-trip between<br>your Deno code and the webview.
Cross-compile from one machine. The same machine can build for macOS,<br>Windows, and Linux. Backends are downloaded as needed, not built locally.
Built-in binary-diff auto-update. Ship a single latest.json manifest and<br>bsdiff patches; the runtime polls, applies, and rolls back automatically on<br>failed launches.
Hello, desktop Jump to heading#
Create a one-file desktop app:
main.ts<br>Deno.serve(() =><br>new Response("Hello, desktop", {<br>headers: { "content-type": "text/html" },<br>})<br>);
new Response("Hello, desktop<br>", {<br>headers: { "content-type": "text/html" },<br>})<br>);<br>" title="Copy">
>_<br>deno desktop main.ts
The compiled binary opens a window pointed at a local HTTP server bound to your<br>Deno.serve() handler. Run it directly:
>_<br>./main # macOS / Linux<br>.\main.exe # Windows
Deno.serve() automatically binds to the address the<br>webview navigates to, so you do not need to pass a port or hostname. See<br>HTTP serving for details.
What's in this section Jump to heading#
Configuration: the desktop block in<br>deno.json.
Backends: CEF, webview, raw; how to choose.
HTTP serving:<br>Deno.serve() integration and the serving model.
Frameworks: Next.js, Astro, Fresh, Remix,<br>Nuxt, SvelteKit, and others.
Windows:<br>Deno.BrowserWindow lifecycle, multiple<br>windows, events.
Bindings: calling Deno code from the webview via<br>bindings.().
Menus: application and context menus.
Tray and dock: system status icons and the<br>macOS dock.
Dialogs: prompt(), alert(), confirm() as<br>native popups.
Notifications: native OS notifications via<br>the Web Notification API.
Hot module replacement: --hmr for framework and<br>non-framework apps.
DevTools: unified DevTools attached to both the<br>Deno runtime and the webview.
Auto-update:<br>Deno.autoUpdate(), manifests, bsdiff,<br>rollback.
Error reporting: capturing uncaught<br>exceptions and panics.
Distribution: cross-compilation, output<br>formats, installers.
Comparison: how deno desktop relates to<br>Electron, Tauri, Electrobun, Dioxus.
deno desktop CLI reference: the command,<br>its flags, and the deno.json desktop schema.
Last updated on June 17, 2026<br>Did you find what you needed?<br>YesNoEdit this page<br>What can we do to improve this page?<br>0 / 2000
GitHub username (optional)If provided, you'll be @mentioned in the created GitHub issue
Send us feedback
Privacy policy
This page<br>Why deno desktop<br>Hello, desktop<br>What's in this section
Copyright © 2026 the Deno authors.