← Back to news

Deno 2.9

deno.com|96 points|34 comments|by enz|Jun 25, 2026

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:

  1. Deno.BrowserWindow: Manage window dimensions, visibility, and menus. Use window.bind() to create a bridge between the webview's JavaScript and the Deno backend.
  2. Deno.Tray & Deno.Dock: Create system tray icons and macOS dock integrations.
  3. Native Dialogs: Standard functions like alert(), confirm(), and prompt() now trigger native OS dialogs.
  4. 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:

BackendEngine UsedProsCons
webview (Default)OS Native (WebView2/WebKit)Small binaries, fast launchRendering varies by OS
cefBundled ChromiumIdentical rendering everywhereLarger 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:

  • npm
  • pnpm
  • yarn
  • Bun

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: Speedup=v2.8 Start Timev2.9 Start Time=34.2ms17.3ms1.98×\text{Speedup} = \frac{\text{v2.8 Start Time}}{\text{v2.9 Start Time}} = \frac{34.2\text{ms}}{17.3\text{ms}} \approx 1.98\times

Deno.serve Throughput

Measured on a dedicated x86_64 Linux machine with a concurrency of 100:

MetricDeno 2.8Deno 2.9Result
Cold Start34.2ms34.2\text{ms}17.3ms17.3\text{ms}\downarrow Faster
Real-world Req/s56.8k56.8\text{k}72.4k72.4\text{k}\uparrow Higher