Deno 2.9 introduces `deno desktop`, a single command that turns a TypeScript project — even a full Next.js app — into a self-contained, cross-platform desktop application.
JavaScript has long owned the browser and the server. Now it's making a serious play for the desktop. With the upcoming Deno 2.9, the team behind the popular runtime is shipping deno desktop — a single command that turns a Deno project into a self-contained, cross-platform desktop application. Before we dig into it, let's cover the basics for anyone who hasn't met Deno yet.
First, what is Deno?
Deno is a modern runtime for JavaScript and TypeScript, created by Ryan Dahl — the same engineer who originally created Node.js. He launched Deno in 2018 to fix a list of regrets he had about Node, and it has since grown into a polished, production-ready platform.
A few things set it apart:
- Secure by default. Code can't touch the filesystem, network, or environment variables unless you explicitly grant permission with flags like
--allow-netor--allow-read. - TypeScript out of the box. There's no build step or extra tooling to configure — Deno runs
.tsfiles directly. - Web-standard APIs.
fetch,Request,Response, and Web Workers behave the way they do in the browser, so knowledge transfers cleanly. - Batteries included. A formatter, linter, test runner, bundler, and dependency management all ship in a single executable — no sprawling toolchain to assemble.
- Node compatibility. Modern Deno runs much of the npm ecosystem through its Node compatibility layer, so you're not cut off from existing packages.
The new frontier: building desktop apps
The headline addition in Deno 2.9 is deno desktop. It takes a Deno project — anything from a single TypeScript file to a full Next.js application — and compiles it into a redistributable binary that bundles your code, the Deno runtime, and a web rendering engine for each target platform.
If you've used Electron or Tauri, the goal is familiar: ship web technology as a native-feeling app. Deno's pitch is that it folds that capability into the runtime you may already be using, with an opinionated set of defaults that keep things simple.
What it brings to the table
- Small binaries by default. The default backend uses the operating system's native webview rather than bundling a full browser, keeping output lean. A bundled Chromium (CEF) backend is available when you need pixel-consistent rendering across platforms.
- Framework auto-detection. Deno desktop recognizes Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start, and Vite SSR projects and wires them up without code changes.
- In-process bindings. Your UI talks to your backend through in-process channels instead of socket-based IPC, which means calling backend functions from the webview is as direct as
bindings.<name>(). - Cross-compilation. Build for macOS, Windows, and Linux from a single machine.
- Built-in auto-update. Ship a
latest.jsonmanifest with bsdiff patches, and the runtime handles polling, applying updates, and rolling back.
How simple is it?
Here's a complete desktop app. The same Deno.serve() you'd use for a web server doubles as the handler for the app's window:
// main.ts
Deno.serve(() =>
new Response("<h1>Hello, desktop</h1>", {
headers: { "content-type": "text/html" },
})
);Compile and run it:
deno desktop main.ts
./main # macOS / Linux
.\main.exe # WindowsBeyond that minimal example, the runtime exposes APIs for real native behavior — Deno.BrowserWindow for window lifecycle and management, and Deno.autoUpdate() for binary-diff updates — plus documented support for menus, system tray and dock, native dialogs, notifications, hot module replacement, and DevTools.
A few caveats
This is early. deno desktop is slated to arrive in Deno 2.9 and isn't in a stable release yet. To try it today you'll need the canary build:
deno upgrade canaryBecause it's pre-release, the command, its configuration, and the TypeScript APIs may change before they stabilize. It's a great time to experiment and give feedback, but you'll want to wait for the stable release before betting production software on it.
Why it matters
Desktop development with web tech is a crowded space, but Deno's angle is compelling: if your team already writes TypeScript and leans on web standards, building a desktop app becomes one more command rather than a separate framework, build pipeline, and mental model. Folding native windows, auto-update, and cross-compilation into a runtime that's secure by default and ships its own toolchain is a genuinely tidy story — and it's worth watching as 2.9 lands.