Opublikowano wersję platformy Deno 2.9, przeznaczonej do izolowanego uruchamiania aplikacji serwerowych i desktopowych w językach JavaScript i TypeScript z wykorzystaniem silnika V8, stosowanego w przeglądarkach opartych na Chromium. Projekt prowadzi Ryan Dahl, twórca Node.js, w celu zapewnienia bardziej zabezpieczonego środowiska i usunięcia błędów koncepcyjnych, które wystąpiły w architekturze Node.js. Aby zwiększyć bezpieczeństwo, obudowa wokół silnika V8 została napisana w języku Rust, a do obsługi zapytań w trybie nieblokującym wykorzystano platformę Tokio. Kod projektu jest udostępniany na licencji MIT. Kompilacje zostały przygotowane dla systemów Linux, Windows i macOS.
Nowa wersja wyróżnia się wdrożeniem eksperymentalnego narzędzia Deno Desktop, umożliwiającego tworzenie aplikacji użytkowych z interfejsem graficznym, zbudowanych z wykorzystaniem technologii webowych, na wzór platformy Electron. Logika i interfejs aplikacji są definiowane w języku JavaScript lub TypeScript z użyciem typowych frameworków webowych, a działanie organizowane jest z wykorzystaniem silnika przeglądarki. Aplikacja dostarczana jest w formie samodzielnego pliku wykonywalnego i pod względem interakcji z użytkownikiem nie różni się od klasycznych programów z interfejsem graficznym.
W Deno Desktop oferowane są backendy do pracy na dwóch silnikach przeglądarek — dostarczanym przez system WebView oraz integrowanym w aplikacji CEF (Chromium Embedded Framework). Backend oparty na WebView pozwala zmniejszyć rozmiar plików wykonywalnych dzięki działaniu na bazie systemowego silnika przeglądarki WebView2 w Windows oraz WebKit w macOS i Linux, natomiast backend CEF umożliwia uzyskanie jednolitego renderowania interfejsu na platformach Linux, macOS i Windows, ale kosztem znacznego zwiększenia rozmiaru plików wykonywalnych.
Rozmiar pliku wykonywalnego testowej aplikacji przy użyciu WebView szacowany jest na 40 MB, a przy użyciu CEF — na 150 MB. Dla porównania, dla Electron ten wskaźnik wynosi 100 MB, Electrobun — 61 MB, a Tauri — 2-10 MB (w Electronie wykorzystywany jest wbudowany w aplikację CEF, a w Electrobun i Tauri systemowy WebView). W opracowaniu znajduje się mechanizm współdzielenia wspólnego silnika CEF w różnych aplikacjach, który umożliwi zmniejszenie rozmiaru plików wykonywalnych.
Deno Desktop oferuje pełną kompatybilność z Node.js, ekosystemem NPM oraz frameworkami webowymi, takimi jak Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start i Vite SSR. Udostępnione jest API do korzystania z natywnych API desktopowych, co pozwala na zarządzanie rozmiarem, pozycją i widocznością okna, tworzenie menu, dodawanie własnych obsługiwaczy, ustawianie ikon dla zasobnika systemowego oraz paneli, a także wywoływanie natywnych dla systemu dialogów. Możliwa jest budowa aplikacji webowych w formie programów desktopowych bez zmiany ich kodu, a także automatyczne wykrywanie używanych frameworków webowych oraz cross-kompilacja na jednym systemie dla Linux x64/arm64, Windows x64 i macOS x64/arm64. Dla Linuxa mogą być generowane pakiety w formatach AppImage, deb i rpm.
W przeciwieństwie do Electron, Electrobun i Tauri, Deno Desktop stosuje nie model wieloprocesowy z IPC opartym na socketach, lecz model wielowątkowy dla CEF lub model oparty na grupach procesów dla WebView z interakcją pomiędzy backendem a kodem interfejsu graficznego przez kanały w ramach jednego procesu. Zawiera wbudowany mechanizm kontroli i automatycznej instalacji aktualizacji, który oszczędza transfer, ładując tylko zmienione względem poprzedniej wersji dane (stosowane są binarne patche oparte na bsdiff) i wspiera cofnięcie do poprzedniej wersji w przypadku awarii przy uruchamianiu nowej wersji.
Wśród innych nowości Deno 2.9:
- Wsparcie dla bezpośredniego czytania plików lock w komendzie „deno install” w celu uproszczenia migracji na Deno z npm, pnpm, yarn i Bun.
- Wsparcie dla importu modułów CSS.
- Zrealizowana kompatybilność z platformą Node.js 26.
- Nowe komendy „deno link”, „deno unlink” i „deno list”.
- Wsparcie dla API Web Locks do ustawiania blokad na zasoby.
- Domyślnie włączone jest 24-godzinne opóźnienie (min-release-age=24h) przed instalacją nowych wersji zależności, aby chronić przed atakami związanymi z kompromitacją zależności.
- Skrócenie czasu uruchamiania (~2x), zmniejszenie zużycia pamięci (~2.2x) i zwiększenie przepustowości w przypadku pracy z HTTP (~1.2x).

Źródło: opennet.ru

