Deno 2.9 : du web au bureau avec deno desktop
Deno 2.9, sorti le 25 juin 2026, est une release qui étend radicalement le périmètre du runtime : au-delà du serveur et du CLI, Deno peut désormais compiler vos projets web existants en applications de bureau natives. Pas d'Electron, pas de réécriture — un seul binaire qui embarque votre code, le runtime et un moteur de rendu.
deno desktop : le concept
La commande deno desktop prend un projet web existant (un répertoire avec un package.json ou un deno.json) et le compile en un exécutable autonome. Le tooling détecte automatiquement le framework utilisé parmi une liste croissante : Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start et Vite SSR. Aucune modification de code n'est nécessaire pour les projets qui s'en tiennent aux APIs standard.
Le résultat est distribué dans le format natif de chaque plateforme :
- macOS :
.appet.dmg - Windows :
.exeet.msi - Linux :
.AppImage,.debet.rpm
bash# Compiler un projet Next.js en app de bureau macOS deno desktop build --platform macos --out ./dist # Lancer en mode développement avec rechargement à chaud deno desktop dev
Deno marque deno desktop comme expérimental dans cette version, avec une surface d'API qui se stabilise et certaines fonctionnalités spécifiques à des plateformes encore en cours d'atterrissage.
Import des lockfiles existants
Deno 2.9 résout l'un des principaux points de friction à l'adoption : la compatibilité avec les lockfiles des autres package managers. deno install lit désormais directement package-lock.json, pnpm-lock.yaml, yarn.lock et bun.lock et génère un deno.lock à partir des versions et des hashes d'intégrité résolus.
Le support des workspaces est inclus : Deno comprend le champ workspaces des package.json npm/yarn/Bun, ce qui rend les monorepos immédiatement utilisables sans reconfiguration.
En pratique, migrer un projet existant vers Deno se réduit à :
bashdeno install # lit le lockfile npm/pnpm/yarn/Bun existant et génère deno.lock deno run dev # ou n'importe quel script package.json
Imports CSS natifs
Deno 2.9 prend en charge les imports CSS comme CSSStyleSheet constructibles, via la syntaxe d'import avec attribut :
tsimport styles from './button.css' with { type: 'css' } document.adoptedStyleSheets.push(styles)
La feature est activée avec le flag --unstable-raw-imports. L'intérêt : le même code de composant fonctionnel sous Deno et dans le navigateur, sans étape de bundling. C'est particulièrement utile pour tester des composants web en environnement Deno sans avoir à mocker les imports CSS.
Performance
Deno 2.9 apporte des gains mesurés sur les scénarios de démarrage et de charge :
- 2× plus rapide au démarrage à froid : 34 ms → 17 ms
- 3× moins de mémoire sous charge
- Amélioration du débit HTTP brut
Test runner : snapshot, paramétrage et sharding
La release améliore aussi sensiblement le test runner intégré, avec des fonctionnalités qui rapprochent Deno de ce que Vitest ou Jest proposent :
- Snapshot testing —
Deno.test.snapshot()pour capturer et comparer des valeurs complexes - Tests paramétrés —
Deno.test.each()pour éviter la duplication - Sélection sensible aux changements — n'exécute que les tests affectés par les fichiers modifiés
- Couverture seuils — fail fast si le coverage tombe sous un seuil configuré
- CI sharding — répartir les tests sur plusieurs runners en parallèle
