Deno Desktop

Resumen de Deno Desktop

  • Ofrece una forma de crear aplicaciones de escritorio con Deno usando tecnologías web (HTML/CSS/JS/TS).
  • Admite múltiples backends: WebView del sistema (predeterminado en el diseño), Chromium integrado mediante CEF y un backend de bajo nivel “raw” orientado a renderizado personalizado (por ejemplo, WebGPU).
  • Se integra con las funciones existentes de Deno: compilación a binarios únicos, compilación cruzada, compatibilidad con Node, actualizaciones automáticas y el ecosistema npm.

Comparaciones con Electron, Tauri y otros

  • Se presenta como “como Tauri, pero también puede ser como Electron”:
    • Backend WebView para binarios pequeños usando el motor del sistema.
    • Backend CEF opcional para un renderizado coherente y moderno entre plataformas.
  • Comparado con Electron: configuración más sencilla, posibilidad de bundles más pequeños, enfoque TS-first, API de Deno en lugar de Node y herramientas integradas.
  • Comparado con Tauri: Tauri tiene un backend basado en Rust y solo WebView del sistema (CEF está en camino), mientras que Deno Desktop está basado en JS/TS y ya incluye CEF.
  • Otras alternativas mencionadas: Wails (Go), Dioxus/Blitz (Rust, motor personalizado), Sciter, Java/Qt/GTK, enfoques basados en WASM (Jumpjet).

Tamaño del binario, rendimiento y WebViews frente a CEF

  • Algunos usuarios informan de una compilación “hello world” de ~440 MB en Windows debido a CEF; una decepción dadas las expectativas de aplicaciones de menos de 20 MB.
  • Los mantenedores indican que WebView + compresión puede llegar a ~15 MB, pero el comportamiento por defecto/backend resulta confuso por ahora y hace falta corregir la documentación.
  • WebViews del sistema:
    • Pros: binarios más pequeños, reutilizan el motor del navegador existente.
    • Contras: errores específicos de plataforma y antigüedad (especialmente WebKitGTK en Linux, Safari/WebView más antiguos en macOS).
  • CEF:
    • Pros: renderizado y APIs predecibles y siempre actualizados en todos los sistemas operativos.
    • Contras: binarios grandes; dudas sobre el tiempo de ejecución/ versionado compartidos y sobre si realmente evita la duplicación de “un navegador por aplicación” al estilo Electron.

Interfaz nativa vs interfaz web y consistencia de UX

  • Largo y acalorado debate sobre si la “chapuza de UI web” es aceptable frente a los toolkits nativos.
  • Argumentos a favor de las UIs web:
    • Consistencia multiplataforma entre sistemas operativos.
    • Gran familiaridad de los desarrolladores con HTML/CSS/JS.
    • Los toolkits nativos están fragmentados, son inconsistentes o dolorosos (cambios frecuentes en toolkits de Windows, GTK frente a Qt, problemas con SwiftUI, diversidad en Linux).
  • Argumentos a favor de las UIs nativas:
    • La coherencia a nivel de sistema operativo y sus patrones mejora la usabilidad, la descubribilidad y la accesibilidad.
    • Muchas aplicaciones web/electron ignoran las convenciones de la plataforma, generan “sopa de píxeles” y tienen una a11y débil.
    • Algunos dicen que los usuarios se quejan del comportamiento inconsistente, aunque no usen el término “interfaz nativa”.
  • Sensación general de que los propios sistemas operativos han perdido coherencia, lo que debilita el argumento de “debe parecer nativo” para muchos desarrolladores.

Seguridad, permisos y modelo IPC

  • Preguntas sobre cómo se aplica el sistema de permisos de Deno a los binarios de escritorio compilados.
    • La documentación actual: las aplicaciones de escritorio todavía no ofrecen solicitudes de permisos en tiempo de ejecución; los permisos se fijan en tiempo de compilación.
    • A algunos les preocupa que las solicitudes de permisos sean engañosas si no controlas el runtime incluido.
  • Sugerencias: ejecutar las aplicaciones descargadas mediante un Deno local de confianza (deno run) o en contenedores/VM si te importa hacer cumplir los permisos.
  • IPC/arquitectura:
    • El backend y la UI se ejecutan en el mismo proceso (CEF) o en un grupo de procesos estrechamente coordinado (WebView), usando enlaces C ABI en el proceso en lugar de IPC basado en sockets.
    • Esto se percibe como de menor sobrecarga que el IPC tradicional estilo Electron; las implicaciones de seguridad se debaten, pero no se resuelven en el hilo.

Compatibilidad de plataformas, herramientas y casos de uso

  • Actualmente solo en canary (Deno v2.9); algunos usuarios encontraron errores tempranos (ventanas en blanco) y se les pidió que abrieran incidencias.
  • La compatibilidad con móvil (iOS/Android) está “planeada/en investigación”, pero no está disponible; la documentación insinúa soporte futuro.
  • Casos de uso debatidos: herramientas internas, aplicaciones tipo kiosk, empaquetar juegos web para Steam/escritorio, distribuir CLIs basadas en Deno con GUI opcional.
  • Algunos están entusiasmados con Deno en general (TS-first, herramientas integradas, compilación, compatibilidad con Node); otros están cansados de “otra forma más de distribuir aplicaciones de escritorio de JavaScript infladas”.