3 августа 2026 года проект Node.js одновременно выпустил версии 24.19.0 LTS и 26.6.0 Current. В LTS-ветку пришли импорт текстовых файлов, управляемые буферы для readFile(), расширенные настройки TCP и TLS, а свежая Current-версия получила новые события встроенного тестового раннера и доступ к циклу событий через экспериментальный FFI.

Node.js 24.19.0 LTS собрал изменения из экспериментальной ветки
Два релиза в один день выглядят как обычная синхронизация веток, хотя практический эффект у них разный. Node.js 24.19.0 «Krypton» относится к линии долгосрочной поддержки и предназначен для проектов, которым нужна предсказуемая среда выполнения. Node.js 26.6.0 остаётся веткой Current, где раньше появляются новые и экспериментальные механизмы.
Главная интрига релиза связана с тем, что Node.js 24 получает сразу несколько функций, которые до этого обкатывались в Current. Среди них — потоковое чтение текста из Blob, импорт текстовых файлов через синтаксис модулей ECMAScript, управление памятью при чтении файлов, более точные сетевые параметры и новые данные для наблюдения за циклом событий.
Для разработчиков это меняет сам характер обновления LTS. Версия 24.19.0 затрагивает код, работающий с файлами, потоками, HTTP, TCP и TLS, то есть с базовыми частями большинства серверных приложений. При этом часть функций уже получила стабильный статус, а часть по-прежнему скрыта за экспериментальными флагами.
Текстовые файлы подключаются через import с отдельным флагом
Node.js 24.19.0 добавил экспериментальный флаг --experimental-import-text. Он разрешает загружать содержимое текстового файла через обычный import, сохраняя его в строковую переменную.
import template from './email.txt' with { type: 'text' };
console.log(template);Такой файл запускается командой:
node --experimental-import-text app.mjsМеханизм основан на предложении TC39 со статусом Stage 3. Синтаксис уже близок к финальному стандарту JavaScript, хотя разработчики Node.js оставили функцию в категории ранней разработки. Причина связана с совместимостью между средами выполнения: похожие импорты уже существуют в Deno и Bun, а окончательное поведение должно оставаться согласованным между платформами.
Где здесь практический смысл? Серверные приложения часто хранят рядом с кодом SQL-запросы, шаблоны писем, GraphQL-схемы, фрагменты HTML и текстовые конфигурации. Раньше для их загрузки обычно требовались readFile(), пользовательский загрузчик модулей или сборщик. Новый импорт сокращает этот путь до одной декларации и делает зависимость файла видимой прямо в модульном графе.
Флаг в названии показывает текущую границу функции. Код с текстовыми импортами пока привязан к экспериментальному режиму Node.js и может измениться вместе со спецификацией.
Blob.textStream() переводит текст в поток без ручного декодера
В классе Blob появился метод textStream(). Он возвращает ReadableStream, который выдаёт содержимое объекта в виде строк, декодированных в UTF-8. По поведению метод соответствует связке blob.stream() и TextDecoderStream, собранной вручную.
const blob = new Blob(['первая строка\n', 'вторая строка\n']);
for await (const chunk of blob.textStream()) {
process.stdout.write(chunk);
}Разница особенно заметна при обработке больших текстовых объектов. Вызов blob.text() формирует строку целиком, а поток позволяет потреблять данные частями. Такой режим подходит для последовательного разбора журналов, преобразования выгрузок, подготовки ответов HTTP и передачи данных между компонентами без промежуточной полной копии содержимого.
В той же версии API stream.compose() получил стабильный статус. Этот метод соединяет несколько преобразований в единый поток. Его стабилизация фиксирует интерфейс, который раньше считался экспериментальным, и сближает работу классических потоков Node.js с современными потоковыми конструкциями JavaScript.
Node.js продолжает переносить привычные браузерные API на сервер. Blob, ReadableStream, TextDecoderStream и модульные импорты теперь образуют более цельную систему, поэтому один и тот же подход к данным проще использовать в браузере, серверном обработчике и инструментах командной строки.
readFile() получил пользовательские буферы для контроля памяти
Функции fs.readFile(), fs.promises.readFile() и синхронный вариант теперь поддерживают буфер, предоставленный вызывающим кодом. Параметр buffer принимает Buffer, типизированный массив, DataView либо функцию, которая получает размер файла и возвращает подходящую область памяти.
Раньше readFile() самостоятельно выделял память под результат. Новый механизм даёт приложению контроль над этим этапом. Один заранее созданный буфер можно использовать в цикле обработки файлов одинакового размера, а функция-фабрика может выбирать тип и объём памяти после получения размера конкретного файла.
Это изменение связано с нагрузкой на сборщик мусора и количеством временных объектов. Сервисы, которые регулярно читают файлы, архивы, изображения или двоичные блоки, могут точнее управлять выделениями. Сам API остаётся высокоуровневым: Node.js выполняет чтение целиком, а приложение определяет место, куда попадут байты.
Разработчики предусмотрели конфликт параметров. Режим с пользовательским буфером предназначен для получения бинарных данных, поэтому он отделён от варианта, где readFile() сразу возвращает строку с заданной кодировкой.
TCP keep-alive получил интервал проверок и число попыток
Метод net.Socket.setKeepAlive() научился принимать параметры, соответствующие системным настройкам TCP_KEEPINTVL и TCP_KEEPCNT. Первый задаёт интервал между проверочными пакетами после начала keep-alive, второй определяет количество неудачных проверок до признания соединения потерянным.
До версии 24.19.0 Node.js позволял включить keep-alive и задать начальную задержку. Новые параметры закрывают часть разрыва между JavaScript API и системным setsockopt(). Приложение получает более точный контроль над тем, как быстро обнаруживается оборванное TCP-соединение.
Эта деталь влияет на базы данных, брокеры сообщений, прокси, WebSocket-сервисы и внутренние соединения между микросервисами. Разорванный канал иногда остаётся внешне активным, пока операционная система не проведёт серию проверок. Настраиваемые интервалы помогают согласовать поведение Node.js с тайм-аутами балансировщиков, контейнерной сети и удалённой стороны.
Поддержка зависит от возможностей операционной системы и libuv. Node.js передаёт параметры нижележащему сетевому стеку, поэтому итоговое поведение связано с платформой, ядром и системными ограничениями.
TLS-соединения сообщают группы обмена ключами и сжимают сертификаты
В TLS API появились сразу два изменения. Node.js 24.19.0 умеет сообщать согласованную группу обмена ключами, выбранную во время рукопожатия. Эта информация помогает диагностировать, какой криптографический механизм реально использовали клиент и сервер.
Параметр certificateCompression добавляет поддержку сжатия цепочки сертификатов. Сертификаты могут занимать заметную долю начального TLS-обмена, особенно при длинной цепочке доверия. Сжатие уменьшает объём данных, который стороны передают до установки защищённого соединения.
Эффект зависит от клиента, сервера и согласованного алгоритма. Функция раскрывает ещё один уровень настройки для CDN, шлюзов, API-платформ и сервисов с большим количеством коротких HTTPS-соединений. При повторно используемых соединениях влияние ниже, поскольку полное рукопожатие выполняется реже.
Параллельно HTTP-сервер получил параметр httpValidation, управляющий проверкой значений заголовков. Он делает встроенную валидацию более явной частью конфигурации и даёт инфраструктурному коду возможность согласовывать обработку заголовков с собственным сетевым слоем.
perf_hooks показывает задержку каждой итерации event loop
Цикл событий — механизм, который последовательно обрабатывает таймеры, сетевые операции, завершённые задачи и пользовательские колбэки. Когда одна операция надолго занимает основной поток, ответы сервера задерживаются даже при свободном процессоре и доступной памяти.
В Node.js 24.19.0 модуль perf_hooks получил выборку задержки по каждой итерации event loop. Раньше наблюдение чаще строилось на агрегированных значениях за интервал. Более мелкая детализация позволяет связать всплеск задержки с конкретным участком времени и сопоставить его с трассировкой, журналом запроса или задачей фоновой обработки.
Это особенно заметно в системах мониторинга. Среднее значение может скрыть единичную блокировку, тогда как последовательность измерений показывает короткий провал непосредственно в момент события. Node.js постепенно превращает данные о внутренней работе цикла событий в полноценный источник телеметрии для APM-систем и собственных диагностических панелей.
Релиз не обещает автоматического поиска причины. Метрика фиксирует момент и величину задержки, а связь с конкретной функцией появляется после сопоставления с профилем, трассировкой или прикладными событиями.
Node.js 26.6.0 расширил тестовый раннер и экспериментальный FFI
Версия 26.6.0 развивает функции, которые пока остаются в ветке Current. Встроенный модуль node:test получил метод context.log() и событие test:log. Тест может передать сообщение в структурированный поток событий, сохранив связь с конкретным тестовым контекстом.
Это отличается от обычного console.log(), который пишет в общий поток процесса. Структурированное событие проще обрабатывать собственным репортёром, CI-системой или инструментом, который строит отчёт по тестам. В событиях TestStream появилось поле entryFile, указывающее исходный файл запуска. Оно помогает различать результаты при параллельном выполнении нескольких наборов тестов.
Экспериментальный модуль node:ffi получил функцию getCurrentEventLoop(). FFI, или Foreign Function Interface, связывает JavaScript с нативными библиотеками. Новый вызов открывает доступ к циклу событий текущего основного потока или Worker, что нужно библиотекам, интегрирующим собственные нативные обработчики с libuv.
В Node.js 26.6.0 вошёл npm 11.18.0, обновились данные часовых поясов до версии 2026c, c-ares, libffi и другие встроенные зависимости. Ветка Current остаётся площадкой, где такие механизмы получают первые реальные сценарии использования до переноса в будущие LTS-релизы.
Node.js сближает серверные API с веб-стандартами и системным уровнем
Релизы 24.19.0 и 26.6.0 движутся сразу в двух направлениях. Blob, текстовые импорты и Web Streams делают серверный JavaScript ближе к API браузера. Параметры TCP, TLS, пользовательские буферы и FFI дают больше доступа к возможностям операционной системы и нативных библиотек.
Точно известно, что Node.js 24.19.0 уже является актуальной LTS-версией, а 26.6.0 остаётся Current-релизом. Экспериментальный импорт текста и FFI сохраняют возможность изменений, тогда как stream.compose() перешёл в стабильный статус.
Вопросы совместимости текстовых импортов в Node.js, Deno и Bun, а также в будущих браузерных реализациях остаются открытыми. Кроме того, неизвестно, насколько широко будет распространяться сжатие TLS-сертификатов среди клиентов и серверов. Ответы на эти вопросы появятся, когда новые API пройдут испытания в реальных условиях, в библиотеках и инструментах наблюдения.