Deno 2.9 Ships deno desktop, Compiles Framework Apps to Native Binaries
Deno 2.9 ships the experimental deno desktop command, compiling Next.js, Astro, Fresh, and other framework apps into native desktop binaries with auto-updates, plus CSS module imports and post-quantum crypto in Web Crypto.
You compile your Next.js or Astro app once with deno desktop and get a native desktop binary. Experimental in 2.9, the command auto-detects Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start, and Vite SSR, so the codebase that serves your web app becomes the codebase that ships the desktop app. No Electron shell to maintain. Deno.autoUpdate() handles version checks and installer downloads, so you stop building and hosting an update pipeline. Tray icons, dock menus, and native dialogs come as built-in APIs instead of per-platform modules.
Two backends exist. webview is the default: it uses the OS engine and keeps binaries small. cef bundles Chromium for identical rendering everywhere, at the cost of size. Start with webview; switch to cef when engine drift shows up in screenshots.
CSS module imports, import sheet from "./styles.css" with { type: "css" }, give you identical module semantics in Deno and the browser with no bundler in the path. Lockfile seeding converts npm, pnpm, yarn, or bun lockfiles into deno.lock with integrity hashes, so migrating keeps your supply chain checks intact.
Performance keeps climbing: cold start down from 34.2ms to 17.3ms, realworld throughput from 56.8k to 72.4k req/s, RSS from 142MB to 64MB. On the edge, faster starts mean cheaper serverless cold starts. Post-quantum ML-KEM, ML-DSA, and SLH-DSA land in Web Crypto, so you can harden now instead of migrating later.