Deno Desktop

Visão geral do Deno Desktop

  • Oferece uma forma de criar aplicativos desktop com Deno usando tecnologias web (HTML/CSS/JS/TS).
  • Suporta múltiplos backends: WebView do sistema (padrão no design), Chromium empacotado via CEF e um backend de baixo nível “raw” voltado para renderização personalizada (por exemplo, WebGPU).
  • Integra-se aos recursos já existentes do Deno: compilação para binários únicos, cross-compilation, compatibilidade com Node, autoatualizações e o ecossistema npm.

Comparações com Electron, Tauri e outros

  • Posicionado como “parecido com Tauri, mas também pode ser parecido com Electron”:
    • Backend WebView para binários pequenos usando o engine do sistema.
    • Backend CEF opcional para renderização consistente e moderna em várias plataformas.
  • Comparado ao Electron: configuração mais fácil, potencial para bundles menores, TS-first, API do Deno em vez de Node e ferramentas integradas.
  • Comparado ao Tauri: Tauri é baseado em Rust no backend e usa apenas WebView do sistema (CEF a caminho), enquanto o Deno Desktop é baseado em JS/TS e já vem com CEF.
  • Outras alternativas mencionadas: Wails (Go), Dioxus/Blitz (Rust, engine customizado), Sciter, Java/Qt/GTK, abordagens baseadas em WASM (Jumpjet).

Tamanho do binário, desempenho e WebViews versus CEF

  • Alguns usuários relatam uma build de “hello world” em ~440 MB no Windows devido ao CEF; frustração diante da expectativa de apps com menos de 20 MB.
  • Os mantenedores indicam que WebView + compressão pode chegar a ~15 MB, mas o comportamento padrão/do backend está atualmente confuso e a documentação precisa ser corrigida.
  • WebViews do sistema:
    • Prós: binários menores, reutilizam o engine de navegador existente.
    • Contras: bugs específicos da plataforma e antiguidade (especialmente WebKitGTK no Linux, Safari/WebView mais antigo no macOS).
  • CEF:
    • Prós: renderização e APIs previsíveis e sempre atualizadas em todos os sistemas operacionais.
    • Contras: binários grandes; dúvidas sobre runtime/versão compartilhados e se isso realmente evita a duplicação de “browser por app” do Electron.

UI nativa versus UI web e consistência de UX

  • Debate longo e acalorado sobre se “web UI slop” é aceitável em comparação com toolkits nativos.
  • Argumentos a favor de UIs web:
    • Consistência entre plataformas e sistemas operacionais.
    • Enorme familiaridade dos desenvolvedores com HTML/CSS/JS.
    • Toolkits nativos são fragmentados, inconsistentes ou dolorosos (churn de toolkits no Windows, GTK vs Qt, problemas com SwiftUI, diversidade no Linux).
  • Argumentos a favor de UIs nativas:
    • Consistência e padrões em nível de sistema operacional ajudam na usabilidade, descobribilidade e acessibilidade.
    • Muitos apps web/electron ignoram convenções da plataforma, produzem “sopa de pixels” e têm acessibilidade fraca.
    • Alguns dizem que os usuários de fato reclamam de comportamento inconsistente, mesmo sem usar o termo “UI nativa”.
  • Sensação geral de que os próprios sistemas operacionais se tornaram menos consistentes, o que enfraquece para muitos desenvolvedores o argumento de “precisa parecer nativo”.

Segurança, permissões e modelo de IPC

  • Há dúvidas sobre como o sistema de permissões do Deno se aplica a binários desktop compilados.
    • Documentação atual: apps desktop ainda não oferecem prompts de permissão em runtime; as permissões são incorporadas no momento da compilação.
    • Alguns se preocupam que prompts de permissão seriam enganosos se você não controla o runtime empacotado.
  • Sugestões: executar apps baixados com um Deno local confiável (deno run) ou em contêineres/VMs se você se importa em impor permissões.
  • IPC/arquitetura:
    • Backend e UI rodam no mesmo processo (CEF) ou em um grupo de processos rigidamente coordenado (WebView), usando bindings C ABI em processo em vez de IPC baseado em sockets.
    • Isso é visto como tendo menos overhead do que o IPC tradicional no estilo Electron; as implicações de segurança são debatidas, mas não resolvidas no tópico.

Suporte de plataforma, ferramentas e casos de uso

  • Atualmente somente canary (Deno v2.9); alguns usuários encontraram bugs iniciais (janelas em branco) e foram orientados a abrir issues.
  • Suporte a mobile (iOS/Android) é “planejado/em investigação”, mas ainda não está disponível; a documentação sugere suporte futuro.
  • Casos de uso discutidos: ferramentas internas, apps de quiosque, empacotar jogos web para Steam/desktop, distribuir CLIs baseadas em Deno com GUIs opcionais.
  • Alguns estão entusiasmados com o Deno em geral (TS-first, ferramentas integradas, compilação, compatibilidade com Node); outros estão cansados de “mais uma forma de distribuir aplicativos desktop JavaScript inchados”.