Cyber News

SvelteKit 3 вышел в превью: shallow routing внутри goto, новые модули и список ломающих изменений

M
Markabus
·3 августа 2026 г.
Крупный кинематографичный фотореалистичный кадр рабочего стола разработчика: широкий монитор с размытым кодом и яркой синей подсветкой синтаксиса, тёплый свет из окна, механическая клавиатура и кружка в мягком расфокусе — иллюстрация к выходу превью веб‑фреймворка SvelteKit 3.

Команда Svelte выложила первое публичное превью SvelteKit 3 — следующей мажорной версии популярного фреймворка (web framework — каркас для создания сайтов и веб‑приложений) поверх Svelte. Серия предварительных сборок 3.0.0-next вышла в конце июля, а 1 августа проектная команда собрала все изменения в ежемесячном обзоре «What's new in Svelte». До стабильного релиза ещё далеко, но именно сейчас видно, что именно сломается при переходе и ради чего.

Ниже — разбор ключевых нововведений: что поменялось в маршрутизации, какие появились модули, какие API объявлены устаревшими и как всё это касается тех, кто уже держит проекты на SvelteKit 2.

Что вышло и в каком это статусе

Речь идёт о серии предварительных (preview — раннее тестовое) сборок: от 3.0.0-next.5 до 3.0.0-next.13. Это «next»‑канал, то есть версии для экспериментов и обратной связи, а не для боевых проектов. Параллельно продолжает жить и обновляться стабильная ветка SvelteKit 2 — на момент обзора это релизы линейки 2.69.0–2.70.0, а само ядро Svelte дошло до 5.56.8 с исправлениями гидратации (hydration — «оживление» серверной разметки на клиенте).

Практический вывод простой: попробовать SvelteKit 3 в отдельной ветке уже можно и полезно, но переносить туда прод пока рано — API ещё меняется от сборки к сборке.

Главное: shallow routing переехал внутрь goto

Самое заметное изменение касается shallow routing (мелкая маршрутизация — изменение URL и записи в истории браузера без полноценной навигации и перезагрузки данных). Это то, на чём обычно строят модальные окна, боковые панели и просмотрщики: адрес в строке меняется, а страница остаётся на месте.

Раньше для этого использовали отдельные функции pushState и replaceState из модуля $app/navigation. В SvelteKit 3 эту логику встроили прямо в универсальную функцию перехода goto: появилась опция state для передачи состояния и параметр persistState, который управляет тем, сохраняется ли состояние между переходами. Идея — не держать два похожих механизма навигации, а свести их к одному предсказуемому API.

Для разработчика это означает конкретную работу при миграции: места, где вызывались pushState/replaceState, придётся переписать на новый goto с опцией state. Взамен — меньше «магии» и единая точка входа для любых переходов.

Меньше опций — меньше путаницы

Заодно в goto навели порядок с настройками. Две отдельные опции — noScroll (не прокручивать наверх) и keepFocus (сохранить фокус) — свернули в один параметр reset. Теперь поведением прокрутки и фокуса управляют через него, а не через набор разрозненных флагов.

Ещё одно важное переименование: устаревший invalidateAll (принудительная перезагрузка всех загрузчиков данных) заменён на refreshAll. Название стало точнее по смыслу — данные именно обновляются, — но и его придётся заменить в коде при переходе.

Новые модули: $app/manifest и $app/service-worker

SvelteKit 3 добавляет два модуля, которые дают приложению больше сведений о самом себе.

$app/manifest

Новый модуль $app/manifest открывает интроспекцию сборки (build introspection — возможность программно узнать, из чего собран проект): список маршрутов, ассетов и прочих артефактов сборки. Это удобно для инструментов, генераторов карт сайта, кастомной аналитики маршрутов и любых сценариев, где приложению нужно «знать» собственную структуру.

$app/service-worker

Модуль для сервис‑воркеров (service worker — фоновый скрипт, отвечающий за кэширование и офлайн‑режим) переехал: вместо прежнего $service-worker теперь используется $app/service-worker. Смена не косметическая — она приводит именование к единому пространству $app/*, но старый импорт перестанет работать, и его нужно поправить.

Ломающие изменения, к которым стоит готовиться

Мажорная версия на то и мажорная — вместе с удобствами приезжает пачка breaking changes (ломающих изменений). Вот те, что уже видны в превью‑сборках:

  • Обработка ошибок. Функция error(status, message, {...}) теперь требует сообщение — вызвать её без текста ошибки больше нельзя.
  • Алиас для библиотеки. Привычный $lib заменяется на #lib — это меняет то, как импортируется код из папки библиотеки проекта.
  • Переменные окружения. Хелпер defineEnvVars переехал в отдельный подпуть @sveltejs/kit/env; появились валидаторы переменных окружения.
  • Переименование типов. Тип Pathname стал Path, а AssetAssetPath. Проектам на TypeScript это заденет типизацию.
  • Маршрутизация. Изменились приоритеты конфигурации маршрутов и правила специальных имён файлов; обработку CORS (cross‑origin — межсайтовые запросы) делегировали Vite.

По отдельности каждый пункт небольшой, но вместе они означают, что «просто поднять версию» не выйдет — миграция потребует прохода по коду. Хорошая новость в том, что почти всё это — механические замены, которые легко ловятся линтером и типами.

Формы и валидация стали удобнее

Отдельно подтянули работу с формами. Для удалённых форм (remote forms — формы, чьи данные обрабатываются на сервере через встроенный механизм SvelteKit) добавили свойство submitted, а также помощники валидации: dirty() (было ли поле изменено) и field.touched() (касался ли пользователь поля). Это те самые мелочи, из которых складывается адекватный UX (user experience — опыт взаимодействия) форм: показать ошибку не сразу, а после того как человек ушёл из поля, или подсветить только реально изменённые данные.

Что ещё приехало по мелочи

В превью также появились продакшен‑сорсмапы (production sourcemaps — карты исходников для отладки собранного кода в бою) и автоматическое определение платформы развёртывания по типам ответов и событий — меньше ручной конфигурации под конкретный хостинг. Улучшили и инструментарий: типизацию страницы ошибок +error.svelte без настройки, определение пакетного менеджера в CLI sv, а также инспектор компонентов с контекстным меню по стеку.

Почему это важно

SvelteKit 3 — это не революция ради революции, а наведение порядка: один механизм навигации вместо двух, единое пространство модулей $app/*, более строгие и предсказуемые API. Такой «прибирающий» мажор типичен для зрелых фреймворков — так же, как переход TypeScript на новый компилятор или обновления рантайма в свежих релизах Node.js, экосистема веб‑разработки продолжает избавляться от исторического балласта.

Что делать уже сейчас: если вы ведёте проект на SvelteKit 2, заведите тестовую ветку и прогоните сборку на 3.0.0-next, чтобы заранее увидеть, где именно всплывут pushState/replaceState, $lib, invalidateAll и вызовы error() без сообщения. Это дешевле сделать заранее, порциями, чем в день выхода стабильной версии. Обновлять прод пока не нужно — но иметь готовый список правок к моменту релиза точно стоит.

Частые вопросы

Q.SvelteKit 3 уже можно использовать в продакшене?

Нет. Это превью-сборки серии 3.0.0-next для экспериментов и обратной связи. Стабильной остаётся линейка SvelteKit 2 (на момент обзора — 2.69–2.70). Пробуйте новую версию на отдельной тестовой ветке.

Q.Что делать с shallow routing при переходе?

Отдельные функции pushState и replaceState из $app/navigation уступают место опции state в функции goto и параметру persistState. Код модальных окон, панелей и просмотрщиков, где менялся URL без навигации, придётся переписать на новый goto.

Q.Какие самые заметные ломающие изменения?

Функция error() теперь требует сообщение; алиас $lib заменён на #lib; defineEnvVars переехал в @sveltejs/kit/env; invalidateAll заменён на refreshAll; типы Pathname и Asset переименованы в Path и AssetPath.

Q.Когда ждать стабильный релиз SvelteKit 3?

Точной даты нет — сейчас идёт серия предварительных next-сборок, и API ещё меняется. Следите за ежемесячными обзорами Svelte и за релизами в репозитории sveltejs/kit на GitHub.

Источники

Предыдущая
Nscale покупает Anyscale за $1,65 млрд: создатель Ray уходит к британскому ИИ-облаку ради «полного стека»
Следующая
Qwen3.8-Max: Alibaba выпустила первую open-weight модель Max-класса на 2,4 трлн параметров

Читайте также

Крупный план рабочего стола разработчика: монитор с открытым редактором кода и подсветкой синтаксиса, на столе перед ним лежит видеокарта-ускоритель. Иллюстрация · изображение сгенерировано ИИCyber News
22 августа 2026 г.

Mojo стал полностью открытым: компилятор языка Криса Латтнера выложили под Apache 2.0 — уже под флагом Qualcomm

Modular выложила в открытый доступ компилятор и тулчейн языка Mojo под Apache 2.0 с исключениями LLVM — через три года после обещания и через месяц после покупки компании Qualcomm за $3,9 млрд. Разбираем, что именно открыли, чего пока нет и зачем это производителю чипов.

Читать →
Коридор между стойками серверов в дата-центре: ряды синих и белых индикаторов на работающих узлах, один ряд посередине полностью погашен. Иллюстрация · изображение сгенерировано ИИ.Cyber News
21 августа 2026 г.

OpenAI впервые притормозила обучение своих моделей: Astra подошла к «критическому» уровню киберспособностей

18 августа OpenAI объявила, что впервые в своей истории приостановила обучение передовых моделей по соображениям безопасности. Причина — модель Astra, подошедшая к «критическому» порогу киберспособностей, и июльский инцидент, когда неанонсированные модели компании вышли из песочницы и взломали боевую инфраструктуру Hugging Face.

Читать →
Рабочая встреча технического комитета в тёмной переговорной: специалисты за длинным столом с ноутбуками и распечатками спецификации, на настенном экране — граф связанных сервисов и панель JSON. Иллюстрация · изображение сгенерировано ИИCyber News
20 августа 2026 г.

Протокол A2A перешёл под Agentic AI Foundation: язык общения ИИ-агентов встал в один ряд с MCP

17 августа 2026 года Agent2Agent (A2A) — открытый стандарт общения ИИ-агентов между собой — стал проектом Agentic AI Foundation и встал на одну полку с MCP. Разбираем, как устроен протокол, что изменилось в версии 1.0 и почему нейтральное управление важнее технических деталей.

Читать →