Deno Desktop: десктопные приложения на TypeScript

Deno v2.9.0 добавил функцию Desktop для упаковки TypeScript-проектов в самостоятельные приложения. Бинарник включает весь код, среду выполнения Deno и встроенный веб-движок, работает кроссплатформенно (macOS, Windows, Linux) и собирается из одной машины без локальной сборки для каждой платформы.
Фреймворк поддерживает автоматическое распознавание популярных проектов (Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit) и включает встроенное обновление через bsdiff-патчи, встроенные уведомления, горячую перезагрузку модулей и коммуникацию между фронтенд и бэкенд через in-process каналы вместо межпроцессного IPC.
Ключевые факты
- Компактные бинарники благодаря использованию встроенного системного WebView вместо полного браузера, с опцией добавления CEF для единообразного рендеринга.
- Поддержка Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit и других фреймворков без изменения кода: средство обнаруживает тип проекта и запускает его напрямую.
- Встроенная система обновлений через latest.json-манифест и bsdiff-патчи, автоматические откаты при сбое.
- Cross-compilation из одной машины для всех платформ, загрузка бэкендов по мере необходимости без локальной сборки.
Почему это важно
Deno Desktop устраняет болезненные компромиссы, которые приходилось принимать с Electron, Tauri и Electrobun. Историческая проблема веб-стека для десктопа: либо огромные бинарники (Electron), либо ограниченная экосистема, отсутствие встроенного обновления и сложность интеграции с фреймворками. Deno предлагает компактные бинарники по умолчанию, полную поддержку npm через Node-совместимость, автоматическое распознавание популярных фреймворков и встроенное обновление через bsdiff.
Кому это важно
Разработчикам, пишущим на TypeScript и Next.js, Astro или другим Node-фреймворкам, которые хотят развернуть приложение на десктоп. Стартапам, которые стремятся уменьшить размер бинарников и упростить процесс кроссплатформной доставки. Командам, работающим с in-process архитектурой, где скорость коммуникации между фронтенд и бэкенд имеет значение.
Как это применить
Создать файл TypeScript, использующий Deno.serve() для HTTP-сервера, запустить команду deno desktop main.ts. Для существующих проектов указать deno desktop на директорию Next.js или другого поддерживаемого фреймворка. Развернуть обновления через latest.json-манифест. Использовать Deno.BrowserWindow для работы с окнами, встроенные диалоги и уведомления через Web Notification API, встроенную систему меню и тея.
Можно ли доверять
Функция находится в версии canary (v2.9.0) и не является стабильной: команды, ключи конфигурации и TypeScript API могут измениться перед релизом. API и поведение ещё не зафиксированы, поэтому новый код нужно готовить к переписыванию при стабилизации. Deno подтвердил техническое направление и выложил полную документацию, что говорит о серьезности намерений.
Риски и подводные камни
Использование встроенного системного WebView создает расхождения в рендеринге между macOS, Windows и Linux, хотя это решается опциональным CEF-бэкенд. В-process коммуникация требует тщательного кодирования граничных переходов, иначе ошибки в бэкенде повалят весь процесс (в отличие от межпроцессного IPC). Экосистема расширений и плагинов для Deno Desktop на момент запуска отсутствует, поэтому сложные кейсы придется решать самостоятельно.