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

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 из одной машины для всех платформ, загрузка бэкендов по мере необходимости без локальной сборки.

Ред. Очередной финальный гвоздь в гроб Electron, по счёту примерно седьмой. Гроб держится бодрее многих стартапов.

Почему это важно

Deno Desktop устраняет болезненные компромиссы, которые приходилось принимать с Electron, Tauri и Electrobun. Историческая проблема веб-стека для десктопа: либо огромные бинарники (Electron), либо ограниченная экосистема, отсутствие встроенного обновления и сложность интеграции с фреймворками. Deno предлагает компактные бинарники по умолчанию, полную поддержку npm через Node-совместимость, автоматическое распознавание популярных фреймворков и встроенное обновление через bsdiff.

Ред. «Устраняет болезненные компромиссы» Electron, Tauri и Electrobun. Список вытесняемых сам по себе намекает, сколько раз индустрия уже устраняла этот компромисс.

Кому это важно

Разработчикам, пишущим на TypeScript и Next.js, Astro или другим Node-фреймворкам, которые хотят развернуть приложение на десктоп. Стартапам, которые стремятся уменьшить размер бинарников и упростить процесс кроссплатформной доставки. Командам, работающим с in-process архитектурой, где скорость коммуникации между фронтенд и бэкенд имеет значение.

Ред. Стартапам, которым важен размер бинарника. Пользователю, у которого на диске двенадцать чатиков по 300 мегабайт каждый, тоже было бы важно, но его никто не спрашивал.

Как это применить

Создать файл TypeScript, использующий Deno.serve() для HTTP-сервера, запустить команду deno desktop main.ts. Для существующих проектов указать deno desktop на директорию Next.js или другого поддерживаемого фреймворка. Развернуть обновления через latest.json-манифест. Использовать Deno.BrowserWindow для работы с окнами, встроенные диалоги и уведомления через Web Notification API, встроенную систему меню и тея.

Ред. Звучит как «наведи на папку Next.js и всё заработает». Эта фраза в истории фронтенда обычно предшествует трём дням чтения issue на GitHub.

Можно ли доверять

Функция находится в версии canary (v2.9.0) и не является стабильной: команды, ключи конфигурации и TypeScript API могут измениться перед релизом. API и поведение ещё не зафиксированы, поэтому новый код нужно готовить к переписыванию при стабилизации. Deno подтвердил техническое направление и выложил полную документацию, что говорит о серьезности намерений.

Ред. Canary-версия, где «команды, ключи и API могут измениться». То есть готовьте код к переписыванию, но документацию уже выложили красивую: серьёзность намерений измеряется объёмом README.

Риски и подводные камни

Использование встроенного системного WebView создает расхождения в рендеринге между macOS, Windows и Linux, хотя это решается опциональным CEF-бэкенд. В-process коммуникация требует тщательного кодирования граничных переходов, иначе ошибки в бэкенде повалят весь процесс (в отличие от межпроцессного IPC). Экосистема расширений и плагинов для Deno Desktop на момент запуска отсутствует, поэтому сложные кейсы придется решать самостоятельно.

Ред. Системный WebView рендерит по-разному на трёх ОС, зато in-process: одна ошибка в бэкенде кладёт весь процесс. Сэкономили на IPC, заплатили отсутствием изоляции, чистый размен.