В Deno 2.9 появится инструмент deno desktop. Он превращает любой проект (от одного TypeScript-файла до Next.js-приложения) в самостоятельное десктопное приложение. На выходе — бинарник, упаковывающий код, среду выполнения Deno и веб-движок. Пока функция нестабильна, команды и API ещё поменяются. Попробовать можно через deno upgrade canary.
Зачем это нужно? Веб — самый популярный UI-тулкит в мире. Десктопные приложения на веб-стеке (Electron, Tauri, Electrobun) этим пользуются, но у каждого свои компромиссы: огромные бинарники, слабая поддержка платформ, проблемы с экосистемой или обновлениями. deno desktop решает их жёстко.
Бинарники маленькие. По умолчанию используется системный WebView — никакого лишнего веса. При этом доступен весь npm через слой совместимости с Node. Если нужно одинаковое отображение на macOS, Windows и Linux, можно включить встроенный Chromium (CEF).
Фреймворки определяются автоматически. Укажите deno desktop на проект с Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start или Vite SSR — и он запустит продакшен-сервер или дев-сервер с горячей перезагрузкой (--hmr). Менять код не нужно.
Бэкенд и UI общаются напрямую, через in-process каналы, а не через сокетный IPC. Значения кодируются на границе вызова, но нет межпроцессного Round-Trip между кодом Deno и WebView.
Кросскомпиляция с одной машины — собирайте под macOS, Windows и Linux. Бэкенды скачиваются по мере необходимости, не собираются локально.
Встроено бинарно-дифференциальное автообновление. Достаточно выложить манифест latest.json и bsdiff-патчи. Среда опрашивает сервер, применяет обновления и автоматически откатывается при неудачном запуске.
Пример — однострочное приложение на TypeScript:
Deno.serve(() => new Response("<h1>Hello, desktop</h1>", {
headers: {"content-type": "text/html"},
}));
Скомпилированный бинарник открывает окно, привязанное к локальному HTTP-серверу, который запускает Deno.serve(). Не нужно указывать порт или хост — адрес подставляется автоматически.
В документации deno desktop описаны: конфигурация в deno.json, выбор бэкендов (CEF, webview, raw), интеграция HTTP-сервера, работа с фреймворками, управление окнами (Deno.BrowserWindow), вызов кода Deno из веб-вью через привязки (bindings.<name>()), меню, системный трей, док macOS, нативные диалоги и уведомления, горячая замена модулей, единые DevTools для рантайма и веб-вью, автообновление (Deno.autoUpdate()), обработка ошибок, кросскомпиляция, форматы установщиков и сравнение с Electron, Tauri, Electrobun и Dioxus. Есть и CLI-справка с флагами и схемой desktop для deno.json.