A versão 2.9 da plataforma Deno foi publicada, destinada à execução isolada de aplicações de servidor e desktop nas linguagens JavaScript e TypeScript, utilizando o motor V8, empregado em navegadores baseados em Chromium. O projeto é desenvolvido por Ryan Dahl, o criador do Node.js, com o objetivo de fornecer um ambiente mais seguro e corrigir erros conceituais cometidos na arquitetura do Node.js. Para aumentar a segurança, a camada ao redor do motor V8 é escrita em Rust, e para o processamento de requisições de forma não bloqueante, utiliza-se a plataforma Tokio. O código do projeto é distribuído sob a licença MIT. Compilações estão disponíveis para Linux, Windows e macOS.
A nova versão se destaca pela implementação de uma ferramenta experimental chamada Deno Desktop, que permite criar aplicações de usuário com interface gráfica, construídas utilizando tecnologias web, de forma semelhante à plataforma Electron. A lógica e a interface da aplicação são definidas nas linguagens JavaScript ou TypeScript, utilizando frameworks web típicos, enquanto o funcionamento é organizado com o uso do motor de navegador. A aplicação é fornecida como um arquivo executável autossuficiente e não difere, em interação com o usuário, de programas clássicos com interface gráfica.
No Deno Desktop, são oferecidos backends para funcionar sobre dois motores de navegador — o fornecido pelo sistema operacional WebView e o que é integrado ao aplicativo CEF (Chromium Embedded Framework). O backend baseado em WebView permite reduzir o tamanho dos arquivos executáveis ao operar sobre o motor de navegador do sistema WebView2 no Windows e WebKit em macOS e Linux, enquanto o backend CEF possibilita conseguir uma rendering uniforme da interface nas plataformas Linux, macOS e Windows, mas a um custo significativo de aumento no tamanho dos arquivos executáveis.
O tamanho do arquivo executável do aplicativo de teste ao usar o WebView é estimado em 40 MB, enquanto ao usar CEF — 150 MB. Para comparação, este número é de 100 MB para Electron, 61 MB para Electrobun, e entre 2-10 MB para Tauri (no Electron é utilizado o CEF integrado ao aplicativo, enquanto em Electrobun e Tauri, o WebView do sistema). Um mecanismo para compartilhar um motor CEF comum entre diferentes aplicativos está em desenvolvimento, o que permitirá reduzir o tamanho dos arquivos executáveis.
O Deno Desktop oferece total compatibilidade com Node.js, a ecossistema NPM e frameworks web como Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start e Vite SSR. Fornece uma API para acessar APIs nativas de desktop, permitindo que o programa gerencie o tamanho, a posição e a visibilidade da janela, crie menus, anexe seus próprios manipuladores, exiba ícones na bandeja do sistema e painéis, e mostre diálogos nativos do sistema operacional. É possível compilar aplicações web na forma de programas de desktop sem alterar seu código, além de detectar automaticamente os frameworks web usados e realizar cross-compilation em um único sistema para Linux x64/arm64, Windows x64 e macOS x64/arm64. Para Linux, pacotes podem ser gerados nos formatos AppImage, deb e rpm.
Ao contrário do Electron, Electrobun e Tauri, o Deno Desktop utiliza um modelo de execução multithread para CEF ou um modelo baseado em grupos de processos para WebView, interagindo entre o backend e o código da interface gráfica através de canais dentro de um único processo. Existe um mecanismo embutido para verificação e instalação automática de atualizações, que carrega apenas os dados que mudaram em relação à versão anterior (aplicando patches binários baseados em bsdiff) e suporta rollback para a versão anterior em caso de falha ao iniciar uma nova versão.
Entre outras novidades do Deno 2.9:
- Suporte na equipe 'deno install' para leitura direta de arquivos lock para facilitar a migração para o Deno a partir do npm, pnpm, yarn e Bun.
- Suporte para importação de módulos CSS.
- Implementação de compatibilidade com a plataforma Node.js 26.
- Novos comandos 'deno link', 'deno unlink' e 'deno list'.
- Suporte para a API Web Locks para aplicar bloqueios em recursos.
- Ativação por padrão de um atraso de 24 horas (min-release-age=24h) antes da instalação de novas versões de dependências para proteção contra ataques via comprometimento de dependências.
- Redução no tempo de inicialização (~2x), diminuição no consumo de memória (~2.2x) e aumento na taxa de transferência ao trabalhar com HTTP (~1.2x).

Fonte: opennet.ru

