È stato pubblicato il rilascio della piattaforma Deno 2.9, progettata per l'esecuzione isolata di applicazioni server e desktop in linguaggi JavaScript e TypeScript utilizzando il motore V8, impiegato nei browser basati su Chromium. Il progetto è sviluppato da Ryan Dahl, creatore di Node.js, con l'obiettivo di fornire un ambiente più sicuro ed eliminare gli errori concettuali presenti nell'architettura di Node.js. Per aumentare la sicurezza, il wrapper attorno al motore V8 è scritto in Rust, e per elaborare le richieste in modalità non bloccante viene utilizzata la piattaforma Tokio. Il codice del progetto è distribuito sotto licenza MIT. Le versioni sono disponibili per Linux, Windows e macOS.
La nuova versione si distingue per l'implementazione di strumenti sperimentali in Deno Desktop, che consente di creare applicazioni utente con interfaccia grafica sfruttando tecnologie web, in analogia con la piattaforma Electron. La logica e l'interfaccia dell'applicazione sono definite in JavaScript o TypeScript utilizzando framework web standard, mentre il funzionamento è organizzato con l'ausilio di un motore browser. L'applicazione viene fornita come file eseguibile autonomo e non differisce dalle classiche applicazioni con interfaccia grafica dal punto di vista dell'interazione con l'utente.
In Deno Desktop sono disponibili backend per lavorare su due motori browser: quello fornito dal sistema operativo WebView e quello integrato nell'applicazione CEF (Chromium Embedded Framework). Il backend basato su WebView consente di ridurre le dimensioni dei file eseguibili grazie all'uso del motore browser di sistema WebView2 su Windows e WebKit su macOS e Linux, mentre il backend CEF consente di ottenere una resa uniforme dell'interfaccia su Linux, macOS e Windows, ma a costo di un notevole aumento delle dimensioni dei file eseguibili.
La dimensione del file eseguibile dell'applicazione di test utilizzando WebView è stimata in 40 MB, mentre utilizzando CEF è di 150 MB. A titolo di confronto, per Electron questo valore è di 100 MB, Electrobun di 61 MB, e Tauri di 2-10 MB (in Electron viene utilizzato il CEF integrato nell'applicazione, mentre in Electrobun e Tauri il WebView di sistema). È in fase di sviluppo un meccanismo per condividere un motore CEF comune tra diverse applicazioni, che consentirà di ridurre le dimensioni dei file eseguibili.
In Deno Desktop è implementata una piena compatibilità con Node.js, l'ecosistema NPM e framework web come Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start e Vite SSR. È fornita un'API per accedere alle API desktop native, ad esempio, è possibile gestire dimensione, posizione e visibilità della finestra, creare menu, allegare i propri gestori, esporre icone per il vassoio di sistema e le barre, visualizzare dialoghi nativi per il sistema operativo. È possibile costruire applicazioni web sotto forma di programmi desktop senza modificare il loro codice e c'è anche la rilevazione automatica dei framework web utilizzati e la compilazione incrociata su un unico sistema per Linux x64/arm64, Windows x64 e macOS x64/arm64. Per Linux possono essere generati pacchetti nei formati AppImage, deb e rpm.
A differenza di Electron, Electrobun e Tauri, in Deno Desktop si applica un modello di esecuzione multithread invece del modello multiprocesso con IPC basato su socket, utilizzando CEF o un modello basato su gruppi di processi per WebView, con interazione tra il backend e il codice dell'interfaccia grafica tramite canali all'interno di un unico processo. È presente un meccanismo integrato di controllo e installazione automatica degli aggiornamenti, che per risparmiare traffico scarica solo i dati modificati rispetto alla versione precedente (vengono utilizzati patch binari basati su bsdiff) e supporta il ripristino alla versione precedente in caso di errore durante l'avvio della nuova versione.
Tra le altre novità di Deno 2.9:
- Supporto per la lettura diretta dei file di blocco nel comando "deno install" per semplificare la migrazione a Deno da npm, pnpm, yarn e Bun.
- Supporto per l'importazione di moduli CSS.
- Implementazione della compatibilità con la piattaforma Node.js 26.
- Nuovi comandi "deno link", "deno unlink" e "deno list".
- Supporto per l'API Web Locks per impostare blocchi sulle risorse.
- Abilitazione predefinita di un ritardo di 24 ore (min-release-age=24h) prima dell'installazione di nuove versioni delle dipendenze per proteggere da attacchi tramite compromissione delle dipendenze.
- Riduzione dei tempi di avvio (~2x), diminuzione del consumo di memoria (~2.2x) e incremento della capacità di elaborazione durante l'uso di HTTP (~1.2x).

Fonte: opennet.ru

