Введение
5 мая 2026 года вышел Node.js 26.0.0 — и это, пожалуй, самый значимый релиз
в цикле 22→24→26. Node.js 26 приносит четыре крупных изменения,
которые затрагивают каждого Node.js-разработчика:
- Temporal API — включён по умолчанию, наконец заменяя проблемный
Date
- V8 14.6 — новые возможности JavaScript и улучшения производительности
- Undici 8 — обновление HTTP-клиента, лежащего в основе
fetch()
- Удаление устаревших API — чистка наследия, копившегося годами
Это руководство охватывает каждое изменение глубоко, с практическими примерами кода,
пошаговой стратегией миграции и честным советом: обновляться сейчас или ждать LTS.
1. Temporal API: долгожданная замена Date
Temporal API — главная фича Node.js 26. После лет за флагом
--experimental-temporal он теперь включён по умолчанию без флагов.
Это самое большое улучшение JavaScript API со времён Promise.
Почему Temporal заменяет Date
Объект Date в JavaScript был проблемным с 1995 года. Он мутабелен,
не учитывает часовые пояса, имеет непредсказуемое поведение в разных средах,
а нумерация месяцев (0-11 вместо 1-12) вызывает бесконечные баги. Temporal
исправляет всё это:
- Иммутабельные объекты — каждый метод Temporal возвращает новый экземпляр
- Явная работа с часовыми поясами — больше неявных UTC/local преобразований
- Предсказуемая арифметика — сложение месяцев работает, как ожидается
- Раздельные типы — даты, время, моменты, длительности — разные типы
- ISO 8601 парсинг — полная поддержка RFC 3339 с часовыми поясами
Типы Temporal
| Тип |
Что представляет |
Пример |
Temporal.PlainDate |
Дата без времени и часового пояса (календарь) |
"2026-05-27" |
Temporal.PlainTime |
Время без даты и часового пояса |
"14:30:00" |
Temporal.PlainDateTime |
Дата и время без часового пояса |
"2026-05-27T14:30:00" |
Temporal.ZonedDateTime |
Дата и время с конкретным часовым поясом |
"2026-05-27T14:30:00+03:00[Europe/Minsk]" |
Temporal.Instant |
Абсолютный момент времени (UTC), точность до наносекунд |
"2026-05-27T11:30:00Z" |
Temporal.Duration |
Промежуток времени (дни, часы, минуты и т.д.) |
"P1DT6H30M" |
Temporal.TimeZone |
IANA-таймзона с правилами перехода на летнее время |
"Europe/Minsk" |
Temporal.Calendar |
Календарная система (ISO 8601, иудейский, исламский и др.) |
"iso8601" |
Примеры до/после: Date vs Temporal
Создание дат: С Date — неопределённость с часовым поясом. С Temporal — явно.
const d = new Date("2026-05-27T10:00:00");
d.setHours(14);
const date = Temporal.PlainDate.from("2026-05-27");
const zoned = Temporal.ZonedDateTime.from({
timeZone: "Europe/Minsk",
year: 2026, month: 5, day: 27,
hour: 10, minute: 0
});
const later = zoned.add({ hours: 4 });
Работа с длительностями: Больше никакой ручной арифметики в миллисекундах.
const now = new Date();
const tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000);
const today = Temporal.Now.plainDateISO();
const tomorrow = today.add(Temporal.Duration.from({ days: 1 }));
Конвертация часовых поясов: Источник бесконечных багов Date — теперь очевидный.
const meeting = Temporal.ZonedDateTime.from({
timeZone: "Europe/London",
year: 2026, month: 6, day: 15,
hour: 14, minute: 0
});
const minskTime = meeting.withTimeZone("Europe/Minsk");
const utcInstant = meeting.toInstant();
console.log(`Лондон: ${meeting.toString()}`);
console.log(`Минск: ${minskTime.toString()}`);
console.log(`UTC: ${utcInstant.toString()}`);
2. V8 14.6: новые возможности JavaScript
Node.js 26 включает V8 14.6.202.33 на базе Chromium 146.
Два предложения JavaScript на Stage 4 готовы к использованию.
Upsert: Map.getOrInsert и getOrInsertComputed
Map.prototype.getOrInsert() и Map.prototype.getOrInsertComputed()
решают типичную задачу «получить значение из Map или создать и сохранить».
const cache = new Map();
function getCachedData(key) {
if (!cache.has(key)) {
cache.set(key, fetchExpensiveData(key));
}
return cache.get(key);
}
const cache = new Map();
function getCachedData(key) {
return cache.getOrInsertComputed(key, fetchExpensiveData);
}
Iterator.concat: ленивое объединение итераторов
Iterator.concat() объединяет несколько итераторов в один ленивый —
без создания промежуточных массивов.
const all = [...fetchPage(1), ...fetchPage(2), ...fetchPage(3)];
for (const item of Iterator.concat(
fetchPage(1), fetchPage(2), fetchPage(3)
)) { process(item); }
3. Undici 8: HTTP-клиент нового поколения
Undici — HTTP/1.1 и HTTP/2 клиент, на котором работает встроенный fetch(),
http.request() и все исходящие HTTP-операции Node.js. В Node.js 26
Undici обновлён до версии 8.0.2.
Ключевые улучшения: улучшенное соответствие WHATWG Fetch (поведение fetch()
теперь ближе к браузерному), улучшенная работа со стримами и backpressure, улучшения
управления соединениями, исправление краевых случаев в обработке chunked transfer encoding
и таймаутов.
4. Критические изменения и удаление устаревших API
Node.js 26 основательно чистит устаревший API. Вот что удалено и что объявлено устаревшим.
Полностью удалено (код сломается)
- УДАЛЕНО
http.Server.prototype.writeHeader() — используйте writeHead()
- УДАЛЕНО Legacy
_stream_* модули — используйте публичный stream API
- УДАЛЕНО Флаг
--experimental-transform-types
- УДАЛЕНО
crypto DEP0182
Новые runtime-предупреждения (появятся в консоли)
- УСТАРЕЛО
module.register() — используйте новый API хуков загрузчика
- УСТАРЕЛО
crypto DEP0203 и DEP0204
- УСТАРЕЛО
stream DEP0201
5. Руководство по миграции: с Node.js 22/24 LTS на 26
Пошаговый процесс обновления до Node.js 26.
Шаг 1: Аудит кодовой базы
grep -r "writeHeader" src/
grep -r "_stream_" src/
grep -r "experimental-transform-types" .
grep -r "module\.register" src/
Шаг 2: Установка Node.js 26
nvm install 26
nvm use 26
node --version
Шаг 3: Проверка предупреждений
node --pending-deprecation your-app.js
6. Обновляться сейчас или ждать LTS?
Node.js 26 выпущен 5 мая 2026 как Current-релиз. Он перейдёт в Active LTS
в октябре 2026.
Обновляйтесь сейчас ✅
- Среды разработки и CI/CD
- Новые проекты
- Приложения с интенсивной работой с датами
- Оценочные ветки для подготовки к LTS
Ждите LTS ⏳
- Продакшен на Node.js 22 LTS (поддержка до апреля 2027)
- Сложные нативные аддоны
- Регуляторные и комплаенс-среды
- Крупные монорепозитории
Node.js 26 — исторический релиз: это последняя версия по двухразовой схеме.
С Node.js 27 проект переходит на один major-релиз в год, что сделает обновления
более предсказуемыми.
Помогу с миграцией — мои услуги по разработке на Node.js
Часто задаваемые вопросы
Что такое Temporal API и почему это важно?
Temporal — это современный API для работы с датой и временем в JavaScript, полностью заменяющий проблемный объект Date. Он предоставляет иммутабельные, учитывающие часовые пояса объекты: PlainDate, ZonedDateTime, Instant, Duration и другие. Temporal устраняет проблемы ручного преобразования временных зон, непредсказуемой арифметики дат и неявных приведений типов. В Node.js 26 включён по умолчанию — без флагов. Для понимания того, как Temporal вписывается в общую эволюцию JavaScript, читайте моё
полное руководство по ES2026.
Какие критические изменения в Node.js 26?
Node.js 26 удаляет несколько давно устаревших API: http.Server.prototype.writeHeader() (используйте writeHead), модули _stream_* (_stream_readable, _stream_writable и др.), флаг --experimental-transform-types. Также добавлены runtime-предупреждения для module.register(), crypto DEP0203 и DEP0204, stream DEP0201. Нативные аддоны нужно перекомпилировать (NODE_MODULE_VERSION обновлён до 147), а GCC должен быть версии 13.2+.
Стоит ли обновляться до Node.js 26 сейчас или ждать LTS?
Node.js 26 выпущен 5 мая 2026 года как Current-релиз и перейдёт в Active LTS в октябре 2026. Для продакшена лучше дождаться LTS, если только вам не нужны Temporal API, V8 14.6 или Undici 8 прямо сейчас. Для CI/CD, сред разработки и новых проектов обновляться уже можно и нужно. Node.js 26 — последний релиз по двухразовой схеме: с 27-й версии будет один major-релиз в год.
Как Undici 8 меняет fetch в Node.js?
Undici 8 — это HTTP-клиент, на котором работает встроенный fetch() в Node.js. Версия 8 улучшает соответствие спецификации WHATWG Fetch, делая поведение fetch() в Node.js более похожим на браузерную реализацию. Улучшена работа со стримами, управление соединениями, исправлены краевые случаи при обработке chunked transfer encoding и таймаутов. Для большинства приложений обновление прозрачно, но стоит протестировать стриминг и обработку ошибок.
Какие новые возможности JavaScript даёт V8 14.6?
V8 14.6 (часть Chromium 146) добавляет два предложения JavaScript на Stage 4: Upsert-предложение (Map.prototype.getOrInsert() и Map.prototype.getOrInsertComputed() для атомарной операции «получить или создать» в Map и WeakMap) и объединение итераторов через Iterator.concat() для ленивой комбинации нескольких итераторов. Оба готовы к использованию в продакшене. Дополнительно в V8 появилась нативная поддержка
Promise.try (Chrome 128+) — смотрите моё
полное руководство по Promise.try с примерами кода и стратегиями миграции.
Как мигрировать с Node.js 22 или 24 на Node.js 26?
Начните с поиска устаревших API: writeHeader, _stream_*, --experimental-transform-types. Запустите Node.js 26 с флагом --pending-deprecation для выявления всех предупреждений. Замените полифилл Temporal на нативную реализацию. Протестируйте поведение Undici 8 (стриминг, обработка ошибок). Проверьте, что GCC 13.2+ установлен для сборки нативных аддонов. Запустите полный набор тестов перед развёртыванием. Обратите внимание:
модель разрешений перешла из экспериментальной в стабильную в Node.js 26.3 — читайте моё
руководство по модели разрешений Node.js с полным API process.permission.has() и process.permission.drop(). Для сравнения Node.js с альтернативными рантаймами читайте моё
руководство по Deno 2.8 с полным сравнением рантаймов.
Node.js 26 — последний релиз по текущему циклу?
Да. Node.js 26 — последний major-релиз по схеме два релиза в год. Начиная с Node.js 27, проект переходит на один major-релиз в год. Это означает меньше разрушительных обновлений и более предсказуемое долгосрочное планирование. Node.js 22 LTS поддерживается до апреля 2027, 24 LTS — до апреля 2029, у команд достаточно времени для планирования.
Готовы работать на Node.js 26?
Node.js 26 — надёжный релиз, который модернизирует рантайм значимыми улучшениями.
Один Temporal API стоит обновления для любого приложения, работающего с датами,
часовыми поясами или планированием.
Если вам нужна помощь с обновлением вашего Node.js-приложения или оценкой того,
подходит ли Temporal API под вашу архитектуру — я предоставляю консультационные
услуги и разработку для Node.js-проектов любого масштаба. С 20-летним опытом
full-stack разработки я провёл команды через каждое крупное обновление Node.js начиная с v12.
Я — senior full-stack разработчик, специализирующийся на Node.js, React
и современном JavaScript. Нахожусь в Минске и работаю по всему миру,
давайте обсудим ваш проект.