Сначала безопасность: почему 16.3.3 — не опция
Начну не с новых возможностей, а с патча. 25 августа 2026 Vercel выпустил внеплановый security-релиз с двумя уязвимостями критической степени:
- Удалённое выполнение кода через оптимизацию AVIF-изображений. Дыра в библиотеке libheif, которую использует sharp: Next.js оптимизирует подсунутую злоумышленником картинку — и на сервере выполняется чужой код. В исправленных версиях оптимизация AVIF временно отключена, пока не приедет фикс выше по цепочке.
- Удалённое выполнение кода на Windows-серверах (CVE-2026-75604). Затрагивает приложения, где одновременно используются Pages Router и App Router без Cache Components. Linux и macOS не подвержены, но для Windows-хостинга обходного пути нет.
Исправлено в 16.3.3 (Active LTS) и 15.5.24 (Maintenance LTS). Команда одна: npm install next@16.3.3. Если у вас статический экспорт без Node-сервера, серверные уязвимости вас не касаются напрямую — но версию всё равно поднимите, чтобы не тянуть уязвимую зависимость дальше.
Что получает любой проект без изменений кода
Главная новость 16.3 — улучшения, которые включаются сами после обновления. Цифры ниже — из официального анонса.
Память в dev-режиме. Turbopack теперь выгружает неиспользуемые модули из памяти и держит кэш на диске. Результат — до 90% меньше RAM в длинных сессиях разработки: дашборд vercel.com с 21,5 ГБ упал до 2 ГБ, сайт nextjs.org — с 4,6 ГБ до 840 МБ. Для заказчика это означает одно: разработчик меньше ждёт и меньше перезапускает.
Сборка. Дисковый кэш, который с 16.1 ускорял dev, теперь работает и в next build и включён по умолчанию. Повторные сборки читают неизменившиеся артефакты из кэша: nextjs.org собирается за 9,2 секунды вместо 21, отдельные проекты — в 5,5 раза быстрее. Деплой по каждому коммиту становится дешевле.
Серверный рендеринг. Web-потоки в App Router заменили на нативные потоки Node.js — до 22% больше запросов под нагрузкой на том же железе.
Меньше prefetch-запросов. Мелкие префетчи ссылок склеиваются в один запрос, крупные общие сегменты остаются отдельными, чтобы переиспользоваться между маршрутами.
Кэш статики между деплоями. Неизменяемые ассеты могут переиспользоваться от деплоя к деплою.
Мелочи, которые давно просили. Кастомные границы ошибок через catchError с функцией retry — можно повторно запросить упавший серверный компонент, не ломая notFound и redirect. Доступ к корневым параметрам вроде языка из любого серверного компонента без прокидывания пропсов. Импорт нескольких файлов через import.meta.glob — например, всех markdown-постов блога.
TypeScript 7: проверка типов в 10 раз быстрее
В июле 2026 вышел TypeScript 7 — нативный порт компилятора, который проверяет типы примерно в 10 раз быстрее старого. Next.js 16.3 умеет использовать его прямо в next build: достаточно поднять версию typescript до 7 в зависимостях проекта. На сайте с сотнями страниц контента это заметно: этап «Running TypeScript» в сборке перестаёт быть самым долгим.
Instant Navigations: что это и кому включать
Вторая половина релиза — набор инструментов, который Vercel называет Instant Navigations. Идея: серверные компоненты дали быстрый первый рендер, но переходы между страницами часто ощущались медленнее, чем в старых SPA, где оболочка появлялась мгновенно. 16.3 это чинит, и включается всё двумя флагами в next.config: cacheComponents и partialPrefetching.
Что внутри:
- Partial Prefetching. Next.js сам извлекает из любой страницы переиспользуемую «оболочку» и подгружает её до клика. Через prefetch на ссылке можно задать, сколько контента целевой страницы тянуть заранее.
- Instant Insights. Панель в DevTools, которая подсвечивает переходы, оказавшиеся не мгновенными, и подсказывает, что исправить.
- Navigation Inspector. Можно «заморозить» навигацию на этапе оболочки и посмотреть, что именно увидит пользователь в момент клика.
- Новый ISR. Страницы, не сгенерированные при сборке, первому посетителю отдают мгновенную оболочку, а в фоне дорендериваются и попадают в кэш.
- Хелпер instant() для Playwright. Тест падает, если контент, который должен появляться мгновенно, вдруг начал ждать сеть — например, после рефакторинга кто-то добавил чтение cookies в общий header.
Vercel прямо говорит, что это поведение станет умолчанием в следующей мажорной версии. Поэтому включать флаги стоит уже сейчас — но на staging и с прогоном Instant Insights, а не на проде в пятницу.
Экспериментальное — попробовать, не включать в прод
- React Compiler на Rust. Компилятор теперь может работать внутри Turbopack без Babel. На большом приложении время от запуска next dev до готовой страницы сократилось на 34% при холодном старте и на 46% при тёплом. Выигрыш есть, только если Babel из проекта убран полностью.
- Устойчивость к обрывам сети. С флагом useOffline навигации, запросы данных и Server Actions при потере связи не падают, а ждут и повторяются после восстановления. Хук useOffline позволяет показать пользователю баннер «вы офлайн».
Что это меняет для заказчика сайта
Если отбросить фреймворковую лексику, для владельца бизнес-сайта релиз означает три вещи:
- Дешевле сопровождение. Меньше памяти и быстрее сборки — меньше часов разработчика на ожидание и меньше денег на CI.
- Быстрее сайт для посетителя. Мгновенные переходы между каталогом, карточками и формой заявки — это прямое влияние на конверсию, о чём я писал в разборе View Transitions и Speculation Rules.
- Меньше сюрпризов при обновлениях. Next.js публикует версионированную документацию для AI-агентов: next dev поддерживает блок в AGENTS.md, который ведёт агента к документации именно вашей версии. Если ваш подрядчик работает с Claude Code или Cursor, ошибок от «устаревших знаний» модели становится меньше.
Порядок обновления
- Посмотреть текущую версию next в package.json и в продакшене.
- Обновиться до 16.3.3 (или 15.5.24, если проект на 15-й ветке и переезд на 16 не запланирован).
- Прогнать сборку и e2e-тесты. В 16.3 нет ломающих изменений для существующих приложений, но проверять надо всегда.
- Поднять TypeScript до 7 и сравнить время сборки.
- На staging включить cacheComponents и partialPrefetching, пройтись по сайту с Instant Insights, закрыть найденные медленные переходы.
- Только после этого — прод.
Если сайт до сих пор на Next.js 13–14, отдельный разговор: там сначала миграция на 15, потом на 16. Как это делается без остановки бизнеса — в моих корпоративных сайтах на Next.js и в разборе миграции с WordPress на Next.js.
