Heritiana Antonio Frond end Designer | Developer

Hello, I am

Heritiana Antonio

Frond end Designer | Developer

Node.js 26 passe en LTS le 28 octobre : que tester avant ?

1 min de lecture

Allée de baies de serveurs dans une salle sombre, lueurs bleues floues, sans texte

Node.js 26 passe en LTS le 28 octobre : que tester avant ?

Node.js 26.12.0, publié le 14 octobre 2026, est encore une version Current. Le calendrier du dépôt nodejs/Release place son entrée en Active LTS au 28 octobre 2026, la maintenance au 20 octobre 2027 et la fin de vie au 30 avril 2029. Le 20 octobre 2026, Node.js 24 « Krypton » quitte l’Active LTS : les correctifs de sécurité continuent jusqu’au 30 avril 2028. La production peut rester sur la 24. Les treize jours qui restent servent à voir, sur la 26.12.0, ce qui casse vraiment.

Les quatre lignes encore en jeu

Une ligne LTS (Long Term Support) est une version majeure que le projet s’engage à corriger pendant une fenêtre publiée. Le statut Current désigne la branche la plus récente, encore sans ce contrat. Le 15 octobre 2026, quatre lignes comptent.

  • Node.js 26.12.0 (14 octobre 2026) : Current. V8 14.6.202.34, npm 11.20.0, OpenSSL 3.5.9, NODE_MODULE_VERSION 147. Active LTS prévue le 28 octobre 2026. Dernière ligne de l’ancien rythme pair/impair.
  • Node.js 24.22.0 (14 octobre 2026) : Active LTS, nom de code Krypton. V8 13.6.233.17, npm 11.19.1, OpenSSL 3.5.8, NODE_MODULE_VERSION 137. Maintenance le 20 octobre 2026, fin de vie le 30 avril 2028.
  • Node.js 22 « Jod » : déjà en maintenance, fin de vie le 30 avril 2027. La 22.23.3 date du 23 septembre 2026.
  • Node.js 20 « Iron » : fin de vie depuis le 30 avril 2026. Plus aucun correctif du projet.

Une date de bascule peut bouger, avec un préavis d’au moins quatorze jours. Le plan de la branche 26 prévoit aussi une publication de sécurité le 21 octobre 2026, encore sans numéro. La 26.12.0 sert à tester. Le binaire du 28 octobre peut être un cran au-dessus.

À partir de Node.js 27, le rythme devient annuel : une majeure en avril, promue LTS en octobre, et chaque majeure devient LTS. L’alpha de la 27 commence en octobre 2026, la 27.0.0 est prévue en avril 2027, son LTS en octobre 2027, sa fin de vie en avril 2030. Cette alpha aide les auteurs de bibliothèques. Son API peut encore changer : elle ne sert pas de runtime de production. Le détail est dans Evolving the Node.js Release Schedule.

Ce que le 28 octobre change

Le passage en Active LTS fige le support. Pendant environ douze mois, la branche 26 reçoit correctifs et ajouts compatibles. À partir du 20 octobre 2027, la maintenance se concentre sur la sécurité, jusqu’au 30 avril 2029. Le comportement, lui, est déjà là : Temporal, Undici 8 et l’ABI 147 datent de Node.js 26.0.0, publié le 5 mai 2026. Les notes sont sur la page de la 26.0.0.

Après le 20 octobre, Node.js 24 reste couvert pour les correctifs critiques jusqu’au 30 avril 2028. En venant de la 24, OpenSSL 3.5 et son niveau de sécurité sont déjà en place. La marche décrite dans le guide v22 vers v24 ne se rejoue pas vers la 26.12.0.

Cinq contrôles qui révèlent une casse

Lancez la suite sous 26.12.0 avec les avertissements visibles :

node --trace-deprecation -p "process.version + ' modules=' + process.versions.modules"

Sur 26.12.0, la sortie commence par v26.12.0 modules=147. Sur 24.22.0, elle commence par v24.22.0 modules=137.

Recompiler les modules natifs

NODE_MODULE_VERSION numérote l’ABI des extensions natives. Il passe de 137 à 147. Un binaire compilé pour Node.js 24 refuse de se charger sous Node.js 26. sharp, bcrypt, better-sqlite3, canvas ou un addon maison sont les cas habituels.

Un npm ci sous Node.js 26 suffit si le paquet publie un précompilé pour l’ABI 147. Sinon il compile sur place, et échoue sans Python ni compilateur dans l’image. Un node_modules construit sur la 24, copié dans une image 26, ne se charge pas.

Relancer les tests HTTP

Le fetch intégré repose sur Undici. Node.js 26.0.0 embarque Undici 8.0.2. Un Client ou un Agent négocie alors HTTP/2 dès qu’un serveur TLS l’annonce via ALPN. Pour rester en HTTP/1.1, le guide Undici 7 vers 8 demande allowH2: false :

import { Client } from "undici";

const client = new Client("https://example.com", {
  allowH2: false,
});

Côté intercepteur, onHeaders devient onResponseStart et onComplete devient onResponseEnd. Undici 8 refuse un faux Blob reconnu seulement par Symbol.toStringTag. Un simple fetch n’a souvent aucune ligne à modifier : la suite doit rejouer en-têtes, FormData et version HTTP vue par le serveur.

Séparer les retraits des avertissements

Depuis la 26.0.0, deux retraits cassent un vieux code ou une vieille dépendance. writeHeader() n’existe plus sur http.Server : la méthode à appeler est writeHead(). Les modules internes _stream_wrap, _stream_readable, _stream_writable, _stream_duplex, _stream_transform et _stream_passthrough sont supprimés. Le code applicatif importe node:stream.

Même logique pour AES-GCM. decipher.setAuthTag() acceptait une étiquette plus courte que 16 octets. Cette exception, DEP0182, est en fin de vie. Une étiquette courte exige authTagLength dans crypto.createDecipheriv(), réglé sur la longueur réelle.

D’autres API avertissent et continuent de tourner. La liste complète est dans les API dépréciées de Node.js 26 :

  • DEP0205. module.register() est déprécié à l’exécution. Le remplacement est module.registerHooks() : hooks synchrones, dans le même fil, pour CommonJS et ESM.
  • DEP0201. L’option type de Duplex.toWeb() se remplace par readableType.
  • DEP0203. Passer un CryptoKey aux API de node:crypto émet un avertissement.
  • DEP0204. KeyObject.from() avec un CryptoKey non extractible lèvera plus tard.

Un symbole retiré lève au premier appel. Un avertissement laisse démarrer. --trace-deprecation donne la pile : on corrige d’abord ce qui jette, puis on met à jour la dépendance dont sort l’avertissement.

Vérifier le TypeScript lancé par Node

Le drapeau --experimental-transform-types a été retiré en 26.0.0. Le type stripping, stable depuis Node.js 24.12.0, exécute un .ts en effaçant les types, sans lire tsconfig.json et sans vérifier les types. La syntaxe qui doit produire du JavaScript est refusée avec ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX : enum, namespace qui exporte une valeur, propriétés de paramètre, alias d’import. Les décorateurs produisent une erreur de parsing. Les .tsx ne sont pas exécutés.

L’extension est obligatoire (import "./fichier.ts") et un import de type sans le mot-clé type est traité comme une valeur. Node ignore les .ts de node_modules. La doc de la 26.12.0, Modules: TypeScript, recommande TypeScript 5.8 ou plus, avec erasableSyntaxOnly et verbatimModuleSyntax. Les enum et les décorateurs restent du ressort de tsc ou de tsx.

Laisser Date, surveiller Temporal

Temporal est un global depuis Node.js 26.0.0, et Date garde son comportement. Deux polyfills, ou un polyfill face au global natif, produisent deux constructeurs : instanceof échoue de l’un à l’autre. Sur Node.js 26, le global natif suffit. Sur la 24, typeof Temporal vaut "undefined". V8 14.6 ajoute Map.prototype.getOrInsert() et Iterator.concat() : s’en servir tout de suite sort le fichier du périmètre Node.js 24.

Une matrice courte

Pendant les tests, l’image de production reste sur Node.js 24 et la CI ajoute la 26.12.0. Le 28 octobre, après la publication LTS, la 26 devient l’image par défaut. La 24 reste une cible tant que vous la promettez. Node.js 22 ne reste que pour les utilisateurs encore dessus, jusqu’au 30 avril 2027.

{
  "engines": {
    "node": "24.x || 26.x"
  }
}

Ce champ convient à une bibliothèque. Une application épingle le patch : 24.22.0 aujourd’hui, puis le premier binaire LTS de la 26 le 28 octobre. Deux majeures ne partagent pas les mêmes binaires natifs.

Testez la 26.12.0 maintenant. Basculez la production sur le binaire LTS du 28 octobre, après avoir rejoué la suite si la publication de sécurité du 21 octobre est sortie. Gardez Node.js 24 dans la CI au plus tard jusqu’au 30 avril 2028.

Questions fréquentes

Faut-il migrer la production le 15 octobre 2026 ?

La production reste sur Node.js 24.22.0. Le 15 octobre, la 26.12.0 est Current. Le contrat LTS commence avec la publication prévue le 28 octobre. D’ici là, la 26 sert à la CI et à la préproduction.

Node.js 24 devient-il risqué le 20 octobre 2026 ?

La branche Krypton entre en maintenance. Les correctifs de sécurité sont prévus jusqu’au 30 avril 2028. Les nouveautés de la branche active s’arrêtent. Le 20 octobre est une date de calendrier.

Temporal casse-t-il le code qui utilise Date ?

Date reste en place. Temporal s’ajoute comme global. À revoir : un polyfill Temporal, ou un instanceof qui compare deux implémentations.

Pourquoi un module natif charge sur la 24 et échoue sur la 26 ?

L’ABI passe de 137 à 147. Il faut un précompilé pour Node.js 26, ou une compilation dans l’image qui exécute la 26. Réutiliser le node_modules de la 24 échoue.

node fichier.ts exécute-t-il tout le TypeScript ?

Node exécute le TypeScript effaçable : annotations et imports marqués type. Les enum, les décorateurs et les .tsx passent par tsc ou tsx. --experimental-transform-types n’existe plus en 26.

Faut-il installer l’alpha de Node.js 27 ?

Les auteurs de bibliothèques l’ajoutent à une CI à part, avant la 27.0.0 d’avril 2027. Une application reste sur Node.js 24, puis sur le LTS de la 26. L’alpha est signée, et son API peut changer.

Pour aller plus loin

Les articles du site sont sur le blog. Les parcours HTML, CSS et Sass sont dans Apprentissage. Pour faire relire une matrice de versions ou un Dockerfile avant la bascule, écrivez via Me contacter.

Voir Egalement

My Blog

Bureau en bois près d’une fenêtre, carnet fermé, tasse et crayon, sans inscription

Faut-il étiqueter un article de blog rédigé avec une IA ?

9 min de lecture Depuis le 2 août 2026, un article généré par une IA ne s’étiquette que s’il informe le public sur une question d’intérêt public. Un tutoriel technique n’y est pas. Une correction orthographique ne suffit pas à écarter l’obligation quand elle existe. Read more