Deno 2.9
Deno 2.9: Native Desktop Apps and Beyond
Note: Check out Claw Patrol, the new open-source security firewall designed specifically for AI agents!
Released on June 25, 2026, by Bartek Iwańczuk, Deno 2.9 introduces a paradigm shift in how developers build desktop software. The headline feature is deno desktop, which allows you to create native applications using your existing web stack—without the heavy Electron boilerplate—resulting in a single, streamlined binary.
🚀 Getting Started
To move to the latest version, simply execute:
deno upgrade
If you haven't installed Deno yet, choose your platform:
- macOS/Linux (Shell):
curl -fsSL https://deno.land/install.sh | sh - Windows (PowerShell):
iwr https://deno.land/install.ps1 -useb | iex
🖥️ Introducing deno desktop
Traditionally, building desktop apps required complex toolchains like Tauri or Electron. deno desktop simplifies this by turning a script or web project into a self-contained application. The UI is rendered in a webview, while the backend logic is powered by Deno.
How it Works
Quick Implementation
Using Deno.serve() inside a desktop entrypoint automatically handles port binding, removing the need for manual wiring.
// main.ts
Deno.serve(( ) => new Response("<!DOCTYPE html> <h1>Hello from Deno desktop 👋</h1>", {
headers: { "content-type": "text/html" }
}));
Run it with: $ deno desktop main.ts
Framework Integration
Deno 2.9 features automatic detection for several popular frameworks. If you run deno desktop . in a project folder, it will build and wrap the following:
- Next.js / Remix / Nuxt
- Astro / Fresh / SvelteKit
- SolidStart / TanStack Start
- Vite SSR
Pro tip: Use the --hmr flag during development for Hot Module Replacement.
Native Desktop APIs
You can now access OS-level features via the Deno.* namespace without external dependencies:
Deno.BrowserWindow: Manage window dimensions, visibility, and menus. Usewindow.bind()to create a bridge between the webview's JavaScript and the Deno backend.Deno.Tray&Deno.Dock: Create system tray icons and macOS dock integrations.- Native Dialogs: Standard functions like
alert(),confirm(), andprompt()now trigger native OS dialogs. Deno.autoUpdate(): A built-in polling system for background binary patching.
Example: System Tray
// tray.ts
const tray = new Deno.attachPanel({
url: "https://localhost:8000/panel"
});
Choosing Your Backend
You can specify the rendering engine using the --backend flag:
| Backend | Engine Used | Pros | Cons |
|---|---|---|---|
webview (Default) | OS Native (WebView2/WebKit) | Small binaries, fast launch | Rendering varies by OS |
cef | Bundled Chromium | Identical rendering everywhere | Larger binary, slower build |
Commands:
$ deno desktop main.ts(Native)$ deno desktop --backend cef main.ts(Chromium)
📦 Distribution & Cross-Compilation
Since deno desktop leverages the deno compile engine, it produces standalone binaries.
Supported Formats:
- macOS:
.app,.dmg - Windows:
.exe,.msi - Linux:
.AppImage,.deb,.rpm
You can build for multiple platforms from a single machine (e.g., a Linux CI runner) using the --target or --all-targets flags. The .msi and .deb/.rpm installers are written in Rust, meaning no platform-specific toolchain is required on the host.
# Build for current host
$ deno desktop --output MyApp.dmg main.ts
# Cross-compile to Windows
$ deno desktop --target x86_64-pc-windows-msvc main.ts
# Build for all 5 targets (Linux x64/arm64, Win x64, Mac x64/arm64)
$ deno desktop --all-targets main.ts
Note: Use --compress to create a self-extracting bundle for smaller file sizes.
Real-world Example: Check out denidian, a note-taking app built entirely with this workflow.
⚙️ Other Major Updates
Seamless Node.js Migration
Switching to Deno is now a matter of a few commands rather than a full migration. deno install now natively parses lockfiles from:
npmpnpmyarnBun
General Improvements
- CSS: Now supports module imports.
- Testing: A significantly more robust test runner.
- Compatibility: Full support for Node.js 26.
📈 Performance Benchmarks
Deno 2.9 delivers massive improvements in memory efficiency, HTTP throughput, and startup speed.
Cold Start Comparison
The improvement in startup time is calculated as:
Deno.serve Throughput
Measured on a dedicated x86_64 Linux machine with a concurrency of 100:
| Metric | Deno 2.8 | Deno 2.9 | Result |
|---|---|---|---|
| Cold Start | Faster | ||
| Real-world Req/s | Higher |
