DevelopmentNew Release11 min readPublished June 25, 2026

Web stack in, single native binary out · experimental in Deno 2.9 · 9 frameworks auto-detected

Deno Desktop Apps: Build Cross-Platform from the Web

Deno 2.9 introduces the deno desktop command — point it at a Next.js, Astro, or Vite project and it produces a single self-contained native app, with no Electron boilerplate. It is genuinely promising and explicitly experimental: mobile is not here yet, and the size figures below come from Deno’s docs plus one hands-on test, not a stable release.

DA
Digital Applied Team
Senior engineers · Published Jun 25, 2026
PublishedJun 25, 2026
Read time11 min
SourcesDeno docs + The Register + 4 more
Deno version
2.9.0
ships deno desktop · Jun 25, 2026
WebView bundle
~68.5MB
The Register macOS test · docs cite ~40 MB
Frameworks auto-detected
9fw
Next.js, Astro, SvelteKit + 6
Cross-compile targets
5OS
Linux x64/arm64 · Windows · macOS x64/arm64

Deno desktop apps just became a real option: on June 25, 2026, Deno 2.9 shipped deno desktop, an experimental command that turns a web project — from a single TypeScript file up to a full Next.js app — into one self-contained native binary that bundles your code, the Deno runtime, and a rendering engine. The pitch is blunt and appealing: keep the web stack you already know, drop the Electron boilerplate, and ship a desktop app at the end. The catch is equally blunt: it is marked experimental, mobile is not included, and a few rough edges are visible on day one.

This is worth taking seriously and worth reading carefully. The feature lands in the same release as a batch of unrelated runtime gains and tighter Node compatibility, so it is not a side experiment — it is a deliberate move to give Deno a niche of its own. But almost every number attached to it is either vendor-stated by Deno or comes from a single hands-on test, and one widely-quoted framework count is already out of date. Getting the facts straight matters more here than usual.

This guide covers what deno desktop actually ships, the three rendering backends and the size each one costs, the framework auto-detection that is the genuine differentiator, an honest comparison against Electron, Tauri, Electrobun, and Dioxus, the native API surface, and what is still missing. Deno is a first-class TypeScript runtime, so if you are weighing your TypeScript runtime options more broadly, this is one more entry on that list.

Key takeaways
  1. 01
    deno desktop turns a web project into one native binary.The experimental command bundles your code, the Deno runtime, and a rendering engine into a single self-contained app. It auto-detects the framework and needs no code changes — pointing deno desktop at the project root is enough. It ships output in each OS's native format: .app/.dmg, .exe/.msi, .AppImage/.deb/.rpm.
  2. 02
    Three backends trade binary size against consistency.WebView (default) reuses the OS's native engine for the smallest binary but renders differently on each platform. CEF bundles a full Chromium copy for identical rendering everywhere at a much larger size. Raw ships no engine at all — you render via WebGPU or Skia, for game-style or custom workloads.
  3. 03
    Cite both bundle-size figures, with their source.Deno's comparison docs list ~40 MB (WebView) and ~150 MB (CEF) as typical. The Register, testing on macOS, measured ~68.5 MB (WebView) and ~308.9 MB (CEF). These are not contradictory — they measure different conditions. Never flatten them into a single number.
  4. 04
    Nine-framework auto-detection is the real differentiator.Deno's docs list Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start, and Vite SSR as auto-detected. No other desktop framework — Electron, Tauri, Electrobun, Dioxus — offers zero-config detection of the web framework you already use. That, plus IPC-free in-process bindings, is the strongest reason to look.
  5. 05
    Treat it as a preview, not a production target.Deno labels the feature experimental; the blog says the surface is stabilizing and some platform features are still landing. Mobile is planned but absent with no timeline. Known launch issues include a non-working macOS WebView close button and friction with some frameworks. Performance numbers are Deno's own benchmarks.

01The ReleaseWhat deno desktop actually ships.

Deno 2.9.0 was released on June 25, 2026, and its headline addition is the deno desktop command. The Deno blog frames it as “a new way to build native desktop applications from the web stack you already know, with no Electron boilerplate and a single binary at the end.” Mechanically, it converts a web project — anything from a lone TypeScript file to a full Next.js app — into one self-contained executable that carries the code, the runtime, and a rendering engine inside it.

The part that makes it feel low-friction is auto-detection. Pointing deno desktop . at a project root is enough; the command recognizes the framework and wires it up with no code changes required. Build output maps to each operating system’s convention — .app and .dmg on macOS, .exe and .msi on Windows, and .AppImage, .deb, and .rpm on Linux — and a single deno desktop --all-targets main.ts can cross-compile all five supported targets from one machine.

Desktop is not the only thing in 2.9. According to Deno’s own benchmarks, the release also cut cold startup from 34 ms to 17 ms, improved HTTP throughput by 1.11x to 1.27x, and reduced memory use by 2.2x to 3.1x under load, achieved through lazy-loading Node globals, V8 code caching, and Rust rewrites of hot paths. Those are vendor-stated figures, so read them as Deno’s measurements rather than independently verified results — but they signal that desktop arrived alongside real runtime investment, not in isolation.

Experimental — read this first
Deno marks deno desktop as experimental in 2.9. The release post states that the surface described “is stabilizing and some platform features are still landing,” and no stable-version timeline has been given. Mobile application support is explicitly not included. Plan around a capable preview you can prototype with today — not a finished, frozen API you would bet a shipping product on this month.

02Rendering EnginesWebView, CEF, and Raw — three ways to draw a window.

The single most important decision in a Deno desktop build is the rendering backend, because it sets both the binary size and how consistent your UI looks across machines. Deno offers three. The default, WebView, delegates to the operating system’s native engine — WebKit on macOS and Linux, WebView2 on Windows — so it ships almost no rendering code of its own. CEF bundles a full copy of Chromium. Raw bundles no engine at all.

Default
WebView backend
OS-native engine · smallest binary

Uses WebKit on macOS/Linux and WebView2 on Windows. Because it borrows the host's browser engine, the binary stays small — but the UI renders differently on each OS, so recent CSS and JS features can fail on machines whose system engine lags Chromium.

~40 MB docs / ~68.5 MB tested
Consistency
CEF backend
bundled Chromium · identical everywhere

Passing --backend cef bundles a full Chromium build, so rendering is guaranteed identical across macOS, Windows, and Linux. That predictability is the whole point; the cost is a much larger download and on-disk footprint.

~150 MB docs / ~308.9 MB tested
Custom
Raw backend
window only · bring your own renderer

Raw exposes only window management and ships no engine. You render the UI yourself via WebGPU, the Skia library, or any custom renderer. It targets game-style or custom-rendering workloads, not typical web-app porting.

no engine bundled

The trade-off is real and under-reported. WebView’s appeal is the small binary, but its engine on macOS tracks Safari/WebKit, which frequently trails Chromium on newer CSS and JavaScript features. An app that leans on recent capabilities can render correctly on your machine and break on a user’s older one — the exact problem Tauri developers have lived with, and the reason CEF exists. If your UI depends on cutting-edge platform features, --backend cef buys consistency at the price of size; if it does not, WebView’s lighter footprint is the better default.

03Bundle SizeWhat the binaries actually weigh.

Bundle size is where you have to be careful, because two credible sources report different numbers and both are right. Deno’s own comparison docs cite roughly 40 MB for a WebView build and roughly 150 MB for CEF as typical figures. The Register, testing a build hands-on on macOS, measured about 68.5 MB for WebView and about 308.9 MB for CEF. These are not contradictory: they measure different conditions — the docs’ on-disk runtime figure versus an independently measured build that likely reflects the full download rather than the extracted runtime alone. The honest way to quote Deno’s size is to give both, with their source attached, and never average them into one tidy number.

Typical desktop bundle size by framework (vendor-stated)

Source: Deno Desktop comparison docs (vendor-stated typical figures). The Register independently measured Deno's WebView build at ~68.5 MB and CEF at ~308.9 MB on macOS — different test conditions, not a contradiction.
DioxusOS-native WebView · Rust backend
~5 MB
Tauri v2OS-native WebView · Rust backend
~2–10 MB
Deno Desktop (WebView)OS-native WebView · Deno backend
~40 MB
ElectrobunOS-native WebView · Bun backend
~61 MB
ElectronBundled Chromium · Node.js backend
~100 MB+
Deno Desktop (CEF)Bundled Chromium · Deno backend
~150 MB

Read the bars as a band, not a ruling. Rust-backed Tauri and Dioxus sit at the lightest end because they bundle the least; Electron sits heavy because it always carries Chromium. Deno Desktop’s WebView mode lands between Electrobun and the Rust tools by Deno’s own figures, while its CEF mode is the heaviest option on the chart for the same reason Electron is large — a full embedded browser. The independently measured numbers run higher than the docs in both cases, which is exactly why the size you should plan against is “tens of megabytes for WebView, a few hundred for CEF,” verified on your own target, rather than any single quoted figure.

04The DifferentiatorNine frameworks, zero config.

If one capability makes Deno Desktop interesting for an agency with existing web apps, it is framework auto-detection. Deno’s docs list nine frameworks it recognizes with no code changes: Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start, and Vite SSR. Worth a note on sourcing — The Register’s coverage listed only five frameworks, almost certainly working from an earlier canary build; the official docs’ list of nine is the authoritative count, and it is the one to use.

That matters because no other desktop framework does this. Electron, Tauri, Electrobun, and Dioxus all require you to wire your app into their model; none auto-detect the framework you are already on. Teams shipping Next.js storefronts or building with the Next.js performance patterns we cover elsewhere suddenly have a new distribution channel that does not demand a rewrite — the existing web app becomes the desktop app.

Auto-detected
Zero-config detection
9frameworks

Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start, and Vite SSR are recognized with no code changes — point deno desktop at the project root and it wires the framework up.

Next.js → Vite SSR
Cross-compile
One machine, every OS
5targets

A single deno desktop --all-targets main.ts builds Linux x64, Linux arm64, Windows x64, macOS x64, and macOS arm64 from one machine — no per-platform CI matrix required to produce installers.

Linux · Windows · macOS
Output
OS-native installers
3platforms

Build output maps to each OS convention: .app and .dmg on macOS, .exe and .msi on Windows, and .AppImage, .deb, and .rpm on Linux — the formats users already expect from their platform.

.dmg · .msi · .deb

05Reality CheckDeno Desktop vs the field in 2026.

Most comparisons of desktop frameworks only pit Electron against Tauri and stop at bundle size. The table below is our own, and it does three things existing comparisons skip: it separates Deno’s vendor-stated sizes from The Register’s independently measured ones, it adds whether backend-to-UI communication needs IPC, and it surfaces framework auto-detection as a column. Every cell is sourced — no derived or computed values — so what you are reading is a side-by-side of published figures, not our arithmetic.

Desktop framework comparison for 2026: for Deno Desktop (WebView and CEF backends), Electron, Tauri v2, Electrobun, and Dioxus, the table lists the vendor-stated typical bundle size, The Register's independently measured macOS size where available, the rendering engine, the backend language, whether IPC-free backend-to-UI binding is available, and whether the tool auto-detects web frameworks. Deno sizes are from Deno's comparison docs (vendor-stated); measured sizes are from The Register's June 24, 2026 hands-on test; an em dash means no independent measurement is in this dataset.
FrameworkBundle (docs, typical)The Register macOS testRendering engineBackendIPC-free bindingFramework auto-detect
Deno Desktop (WebView)~40 MB~68.5 MBOS-native WebViewDeno / TypeScriptYesYes · 9 frameworks
Deno Desktop (CEF)~150 MB~308.9 MBBundled ChromiumDeno / TypeScriptYesYes · 9 frameworks
Electron~100 MB+Bundled ChromiumNode.jsNo · IPCNo
Tauri v2~2–10 MBOS-native WebViewRustNo · IPCNo
Electrobun~61 MBOS-native WebViewBunNo · IPCNo
Dioxus~5 MBOS-native WebViewRustNo · IPCNo

The table makes the positioning clear. If your only goal is the smallest possible binary and you are comfortable in Rust, Tauri or Dioxus win on size. If you need guaranteed-identical rendering and do not mind weight, Electron and Deno’s CEF mode are the heavy, predictable options. What Deno Desktop adds that none of the others offer is the combination of two things in the right-most columns — no IPC round-trip between your backend and the UI, and zero-config detection of the framework you already ship. For a team that values shipping an existing web app fast over shaving the last few megabytes, that combination is the argument.

06The ArchitectureNative APIs without the IPC tax.

Beyond rendering, a desktop framework lives or dies on the native APIs it exposes and how cleanly your code reaches them. Deno puts the desktop surface under the Deno.* namespace, and its standout architectural choice is in-process bindings rather than inter-process communication. In Electron, a UI calling a backend function serializes to JSON, crosses a process boundary, deserializes, runs, and reverses the trip — synchronous latency on every call. Deno’s window.bind() runs the handler in the same process, so the webview calls a Deno function directly. Electron, Electrobun, and Tauri all use IPC; this is a concrete DX and latency advantage.

Windowing
Deno.BrowserWindow

Controls window size, position, visibility, menus, and DevTools — the core surface for shaping how the app presents on each OS.

Full window control
System UI
Deno.Tray + Deno.Dock

System-tray icons and panels via Deno.Tray, macOS dock behavior via Deno.Dock, plus native prompt(), alert(), and confirm() dialogs that look like the platform's own.

Native OS chrome
Updates
Deno.autoUpdate()

Ships binary patches using bsdiff binary-diff — the same approach as Electrobun. Electron does full-binary replacement and Tauri requires a plugin, so small delta updates come built in here.

Small delta updates
Dev loop
deno desktop --hmr

Hot Module Replacement during development, including framework-level HMR where the framework supports it — so the inner dev loop stays close to web development.

Live reload
Backend ↔ UI
In-process bindings

window.bind() calls a Deno function directly from the webview with no IPC serialization round-trip. A local web server runs by default outside Raw mode, a hop the docs call negligible in most cases — and in-process binding removes even that.

No IPC tax

This surface is also why Deno Desktop is interesting for distributing internal tooling. A team standing up self-hosted deployments of an AI tool, for instance, could wrap a working web UI into a single signed binary with tray controls and auto-update, rather than asking non-technical staff to run a local server by hand. The building blocks — window management, system tray, native dialogs, delta updates — are the unglamorous pieces that decide whether a desktop app feels native or feels like a webpage in a frame.

07Read Before You ShipWhat is still missing in 2.9.

An experimental label is not a formality here — there are concrete gaps. File picker dialogs are not yet supported except through the web <input> file element or drag-and-drop, and there is no separate clipboard API yet. On the bug side, The Register’s hands-on testing found the window close button not working on macOS with the WebView backend, plus friction integrating with some web frameworks. None of these is fatal for a prototype, but each is the kind of thing that would block a polished release — so scope your first build around what works today.

The gaps to plan around
As of 2.9: no native file-picker API (use the web <input> file element or drag-and-drop), no separate clipboard API, a non-working macOS WebView close button, some framework-integration friction, and no mobile support — it is described as planned, with no date. Treat any “coming soon” framing as your own inference, not a Deno commitment: the project has stated the feature is stabilizing, but it has not published a timeline for stability or for mobile.
Deno desktop looks well thought-out, though it is not yet stable.— Tim Anderson, The Register, after hands-on testing

08The Strategic ReadDeno, Node, and the search for a new niche.

The more interesting story is why desktop, and why now. Deno was created by Ryan Dahl, who also created Node.js and launched Deno to address what he saw as Node’s design mistakes. But Deno 2, released in October 2024, walked some of that philosophy back by adding npm/Node.js compatibility — and 2.9 continues the trend: it now matches Node.js 26.3.0 compatibility, resolves a bare fs import without configuration, and can read lockfiles from npm, pnpm, yarn, and Bun directly to seed deno.lock with exact versions. The runtime that set out to replace the Node ecosystem has spent its recent energy joining it.

That is the lens to read desktop through. Competing with Node on Node’s own ground — server-side JavaScript — is a grind, and the Bun runtime has crowded the “faster, simpler runtime” pitch from the other side. Desktop is a move to a space where Deno can win on its own terms: a single command that turns a web app into a native binary, with auto-detection and IPC-free bindings that no incumbent offers. It is a niche play, and a smart one — carve new ground rather than refight a lost battle. The supply-chain posture fits the same story: 2.9 enables a 24-hour min-release-age by default, so a freshly-published npm package cannot enter the dependency tree immediately.

Looking forward, the bet that matters is whether auto-detection plus small WebView binaries is enough to pull teams who would otherwise reach for Electron or Tauri. If Deno stabilizes the API, lands mobile, and fixes the rough edges, the “your existing Next.js or Astro app is now also a desktop app” pitch is genuinely compelling for agencies — it turns a web build into a second product with little extra work. That is the practical core of how we approach web development services: pick the tool that ships the client’s existing work fastest, and treat distribution as part of the build. For teams running an AI and digital transformation program, single-binary distribution of internal tools is exactly the kind of capability worth tracking as it matures — while keeping the experimental label firmly in view.

09ConclusionPromising, experimental, and worth a prototype.

Where deno desktop lands in 2026

A real new option for shipping web apps as desktop apps — not a finished one.

Deno 2.9’s deno desktop is the most interesting thing to happen to web-stack desktop apps in a while. The combination of nine-framework auto-detection and IPC-free in-process bindings is genuinely novel — no other tool in the field offers both — and the WebView default keeps binaries in the tens of megabytes rather than Electron’s hundreds. For a team with an existing Next.js, Astro, or SvelteKit app, the path from web to desktop has never been shorter.

The discipline is in the caveats. The feature is experimental with no stability timeline; mobile is planned but absent; the performance wins are Deno’s own benchmarks; and the two published bundle-size figures measure different conditions, so you quote both or you quote neither. There are visible day-one bugs and missing APIs. None of that disqualifies it — it just means the right move today is a prototype on your own target, measured with your own numbers, not a production commitment.

Read alongside the broader shift in runtimes, the pattern is clear: Deno has stopped trying to out-Node Node and started building somewhere it can win. Desktop is that bet. If it stabilizes, the agencies best positioned to benefit are the ones already shipping modern web apps — because for them, the desktop version is now mostly a build step away.

Turn your web app into a product you can ship

Ship the web app once. Distribute it everywhere.

We build production web apps and help teams pick the right distribution path — including new single-binary desktop options like Deno Desktop, weighed honestly against Electron and Tauri for your stack.

Free consultationSenior-led deliveryTailored solutions
What we work on

Web and desktop delivery

  • Next.js, Astro, and SvelteKit production builds
  • Desktop distribution: Electron, Tauri, and Deno Desktop trade-offs
  • Single-binary packaging of internal tools
  • Cross-platform rendering and update strategy
  • Migration and runtime-choice advisory
FAQ · Deno Desktop in 2026

The questions teams ask about Deno Desktop.

deno desktop is an experimental command introduced in Deno 2.9 (released June 25, 2026) that turns a web project into a native cross-platform desktop application. It converts anything from a single TypeScript file to a full Next.js app into one self-contained binary that bundles your code, the Deno runtime, and a rendering engine. It auto-detects the web framework with no code changes, so pointing it at the project root is enough, and it outputs installers in each operating system's native format — .app and .dmg on macOS, .exe and .msi on Windows, and .AppImage, .deb, and .rpm on Linux. The pitch is to keep the web stack you already use and skip Electron boilerplate. It is explicitly marked experimental, so treat it as a capable preview rather than a finished, frozen API.
Related dispatches

Continue exploring modern web development.