Node.js 26.0.0: Temporal API di default, V8 14.6 e rimozione delle API legacy
Il 5 maggio 2026 il team di Node.js ha rilasciato la versione 26.0.0, denominata “Current”, che introduce cambiamenti significativi alla piattaforma runtime JavaScript server-side più diffusa al mondo. Node.js 26 entrerà in Long-Term Support (LTS) nell’ottobre 2026: da quel momento sarà la release raccomandata per ambienti di produzione. Nel frattempo, i sei mesi di status “Current” sono il momento ideale per esplorare le novità e valutare l’impatto sulle proprie applicazioni.
Temporal API abilitata di default
La novità più attesa di Node.js 26 è l’abilitazione di default della Temporal API, la moderna API JavaScript per la gestione di date e orari. Per anni, la community ha convissuto con i limiti dell’oggetto Date: mancanza di supporto per i fusi orari, comportamenti incoerenti, mutabilità non controllata, e risultati controintuitivi in molti scenari di internazionalizzazione.
Temporal risolve tutti questi problemi alla radice, introducendo un sistema di tipi ricco e immutabile:
Temporal.PlainDate: una data senza orario né fuso orarioTemporal.PlainTime: un orario senza data né fuso orarioTemporal.PlainDateTime: data e orario senza fuso orarioTemporal.ZonedDateTime: data e orario con fuso orario esplicitoTemporal.Instant: un momento preciso nel tempo (come un timestamp Unix)Temporal.Duration: un intervallo di tempo
Ecco un esempio pratico di come Temporal semplifica operazioni che con Date richiedevano librerie esterne come Luxon o date-fns:
// Ottenere la data di oggi in un fuso orario specifico
const oggi = Temporal.Now.plainDateISO('Europe/Rome');
console.log(oggi.toString()); // "2026-05-07"
// Aggiungere 30 giorni senza preoccuparsi dei mesi
const traThentaGiorni = oggi.add({ days: 30 });
console.log(traThentaGiorni.toString()); // "2026-06-06"
// Calcolare la differenza tra due date
const inizio = Temporal.PlainDate.from('2026-01-01');
const fine = Temporal.PlainDate.from('2026-12-31');
const differenza = inizio.until(fine);
console.log(differenza.days); // 364
// Lavorare con fusi orari in modo esplicito
const appuntamento = Temporal.ZonedDateTime.from({
year: 2026,
month: 5,
day: 15,
hour: 14,
minute: 30,
timeZone: 'America/New_York'
});
const inRoma = appuntamento.withTimeZone('Europe/Rome');
console.log(inRoma.toLocaleString('it-IT'));
Fino a Node.js 25, Temporal era disponibile ma richiedeva il flag --harmony-temporal. Ora è parte integrante del runtime e non serve alcuna configurazione aggiuntiva.
V8 14.6: due nuove proposte TC39
Il motore JavaScript V8 è stato aggiornato alla versione 14.6.202.33 (Chromium 146), portando con sé due importanti proposte TC39 ora disponibili nativamente:
Upsert: Map.prototype.getOrInsert()
La proposta Upsert introduce i metodi getOrInsert() e getOrInsertComputed() su Map e WeakMap. Si tratta di un pattern molto comune nello sviluppo: controllare se una chiave esiste in una mappa, e se non esiste, inserire un valore di default e restituirlo.
// Prima di Node.js 26 - verboso e ripetitivo
function getOrCreate(map, key, defaultValue) {
if (!map.has(key)) {
map.set(key, defaultValue);
}
return map.get(key);
}
const cache = new Map();
const utenti = getOrCreate(cache, 'admin', []);
utenti.push('mario');
// Con Node.js 26 - conciso e leggibile
const cache = new Map();
const utenti = cache.getOrInsert('admin', []);
utenti.push('mario');
// Versione con factory function (lazy initialization)
const grandi = cache.getOrInsertComputed('admin', (key) => {
return recuperaUtentiDalDb(key); // calcolato solo se necessario
});
Iterator sequencing: Iterator.concat()
La proposta Iterator sequencing introduce Iterator.concat(), che permette di concatenare più iteratori senza materializzarli tutti in memoria contemporaneamente:
// Concatenare lazily più sorgenti di dati
const paginaUno = [1, 2, 3][Symbol.iterator]();
const paginaDue = [4, 5, 6][Symbol.iterator]();
const paginaTre = [7, 8, 9][Symbol.iterator]();
const tuttiGliElementi = Iterator.concat(paginaUno, paginaDue, paginaTre);
for (const elemento of tuttiGliElementi) {
console.log(elemento); // 1, 2, 3, 4, 5, 6, 7, 8, 9
}
Undici 8.0: il client HTTP di nuova generazione
La libreria Undici, il client HTTP integrato in Node.js, è stata aggiornata alla versione 8.0.2. Undici è il motore dietro fetch() nativo in Node.js ed è progettato per prestazioni e correttezza del protocollo HTTP/1.1 e HTTP/2. La versione 8 porta miglioramenti all’implementazione di WebSocket, gestione delle connessioni e supporto per proxy avanzati.
Deprecazioni e rimozioni importanti
Come ogni major version, Node.js 26 rimuove API che erano state deprecate nelle versioni precedenti. Ecco le più impattanti:
Rimozione di http.Server.prototype.writeHeader()
Il metodo writeHeader() è stato definitivamente rimosso. Era già deprecato da anni: la forma corretta è writeHead().
// ❌ Non funziona più in Node.js 26
res.writeHeader(200, { 'Content-Type': 'application/json' });
// ✅ Forma corretta
res.writeHead(200, { 'Content-Type': 'application/json' });
Rimozione dei moduli legacy _stream_*
I moduli interni _stream_wrap, _stream_readable, _stream_writable, _stream_duplex, _stream_transform e _stream_passthrough sono stati rimossi definitivamente. Se li state importando direttamente (cosa sconsigliata ma ancora diffusa in codice datato), dovete migrare all’API pubblica:
// ❌ Non funziona più
const { Readable } = require('_stream_readable');
// ✅ Sempre corretto
const { Readable } = require('stream');
// o con ESM:
import { Readable } from 'node:stream';
Rimozione di –experimental-transform-types
Il flag --experimental-transform-types, che abilitava la trasformazione automatica dei tipi TypeScript a runtime, è stato rimosso. Per eseguire TypeScript in Node.js, la raccomandazione ufficiale rimane l’uso di --experimental-strip-types (disponibile dalla v22.6+) oppure di tool dedicati come tsx o ts-node.
Deprecazioni runtime
Diverse API passano ora a deprecazione a runtime, il che significa che genereranno un avviso quando utilizzate, senza però bloccare l’esecuzione:
module.register() — deprecato in favore di import.meta.url patterns- Alcune API crypto (DEP0203, DEP0204) legate a formati di chiavi obsoleti
- Alcune API stream (DEP0201)
Come aggiornare
Per installare Node.js 26 tramite nvm:
nvm install 26
nvm use 26
node --version # v26.0.0
Con fnm:
fnm install 26
fnm use 26
Prima di aggiornare i progetti in produzione, si raccomanda di:- Verificare che tutte le dipendenze siano compatibili con Node.js 26 (controllate le note di release dei principali package)
- Cercare nel codice le API rimosse:
writeHeader, _stream_*, --experimental-transform-types - Testare il comportamento della Temporal API se il vostro codice ha workaround per
Date - Abilitare i log delle deprecazioni runtime con
NODE_OPTIONS='--trace-deprecation'
Conclusioni
Node.js 26 è una release di maturazione: la Temporal API è finalmente pronta per la produzione, V8 14.6 porta proposte TC39 da lungo tempo attese, e le rimozioni puliscono la piattaforma dagli artefatti del passato. Per chi lavora su progetti Node.js, questo è il momento di iniziare i test su questa versione in vista dell’ingresso in LTS di ottobre 2026.
Fonte: Node.js 26.0.0 Release Notes — nodejs.org, 5 maggio 2026
Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.
nodejs.org
informapirata ⁂
in reply to Trames Venenosus • • •chi blocca gli account che scrivono più di 500 caratteri dimostra quella che probabilmente è solo ignoranza twittercentrica: non esiste un solo software nel Fediverso oltre a Mastodon che limiti i post a una quantità piccola e ispirata alla lunghezza standard di Twotter moltiplicata per due...
Che dire, è un po' come se qualcuno abituato a esprimersi con frasi da massimo 6 parole decidesse di tapparsi le orecchie ogni volta che sente parlare una persona scolarizzata...
Luca Sironi
in reply to informapirata ⁂ • • •pensa quanto tempo perde a distinguere i post di 495 caratteri da quelli con 501
informapirata ⁂ reshared this.
informapirata ⁂
in reply to Luca Sironi • • •@luca sì, davvero! Ma in fondo che vuoi farci: ognuno ha la facoltà di dedicare il proprio tempo alle proprie ossessioni 😂
@Trames
Trames Venenosus
in reply to informapirata ⁂ • • •Le scrivo in ricordo di una divertente rubrica di stoncature che tanti anni fa Roberto Cotroneo gestiva sulla rivista L'Espresso.
Cotroneo evidenziava solo gli aspetti negativi di opere letterarie, a volte incuriosendo e facendo venire in realtà voglia di leggerle.
Allo stesso modo sottolineo in modo schezoso il lato tossico di certi pensieri, ma solo per riflettere un po'.
informapirata ⁂ reshared this.
Elena Brescacin
in reply to Trames Venenosus • • •Anche il blocco è un tema a cui tengo particolarmente: per esigenze tipo "no al testo lungo, no alle foto..." sono d'accordo che basta il mute; ma se un utente inizia a mandare materiale pedo usando l'hashtag kids, a quel punto là non è che il mute sia sufficiente; tu non lo vedresti ma lui riempirebbe il fediverso di spazzatura comunque. Su questo, ci sono varie liste blocco di istanze problematiche e il bello è che non è obbligatorio. Ci sono. Tu scegli se importare quei csv nella tua istanza o no.
Io non ritengo il blocco come una violenza, ma come un confine; nel momento in cui arrivasse uno che dicesse tipo "l'accessibilità è inutile, è una stronzata, mettere gli alt nelle immagini è una rottura di palle", lì io non ho margine di dialogo con quella gente là, sarebbe come se pensassi di dare un bacio con la lingua a una palla di fuoco convinta che l'amore possa riparare la mia faccia dalle ustioni. Rendo l'idea? Io non voglio permettere di cercare, leggere quello che scrivo, a gente che deliberatamente è contraria ai miei valori. Sproloquia pure, ma non farlo davanti a me. E se c'hai un'istanza singola dove scrivi solo tu, da me non entri se sei un omofobo-razzista-abilista-demmerda.
Micolcosta reshared this.
Trames Venenosus
in reply to Elena Brescacin • • •Elena Brescacin
in reply to Trames Venenosus • • •Il blocco e il mute però hanno un problema nel fediverso, rispetto ai social centralizzati: se uno ha voglia di romperti le tole, puoi bloccarlo; ma lui se è uno competente a livello tecnico, si può creare un'istanza in self-hosting e farsi tutti gli utenti che vuole. Lo blocchi nel dominio triccotracco.net? Si compra il .com ... o i sottodomini... Certo non dura all'infinito ma può farti passare un brutto quarto d'ora.
Micolcosta
in reply to Elena Brescacin • • •Trames Venenosus
in reply to Micolcosta • • •Sono d'accordo: neanch'io sopporto l'aggressività.
Siamo qui tutti insieme per costruire uno stile diverso di socializzazione virtuale, che ci risparmi dalla veemenza di cui i social commerciali si stanno nutrendo.
Grazie per la tua risposta.
@elettrona
Elena Brescacin
in reply to Micolcosta • • •Micolcosta
in reply to Elena Brescacin • • •