Еженедельный дайджест #62: Новости фронтенда
Как читать этот дайджест
- Начните с заголовков статей, чтобы получить общее представление о содержании
- Быстро пробегитесь по первым абзацам, чтобы понять актуальность материалов именно для вас
- Выберите наиболее интересные или полезные темы под текущие задачи
- Планируйте чтение: выделите, например, 15 минут утром и 15 минут вечером
- Не пытайтесь прочитать всё сразу — возвращайтесь к дайджесту в удобное время
- При повторном просмотре читайте выбранные статьи более вдумчиво, делая заметки
- Не сожалейте, если прочитали лишь часть: ценность в качестве, а не в количестве
- Используйте закладки для сохранения интересных материалов
- Делитесь инсайтами и ссылками с коллегами — так информация лучше усвоится

🧪 HTML и веб-платформа
Что нового появилось в HTML в 2026 году
HTML развивается спокойнее JavaScript и CSS, но платформа продолжает получать новые возможности. В большом обзоре современного HTML собраны экспериментальные элементы для геолокации, камеры и микрофона, 3D-моделей и рисования HTML-содержимого внутри Canvas.
Эти API пока нельзя без проверки поддержки переносить в рабочие проекты. Зато обзор хорошо показывает направление развития платформы: типовые возможности постепенно становятся частью браузера, а разработчику требуется меньше собственного JavaScript.
Какие старые фрагменты HTML уже не нужны
В разборе устаревших HTML-конструкций объясняется происхождение условных комментариев, X-UA-Compatible, настроек ClearType и других строк, которые до сих пор копируют из старых шаблонов. Большая часть таких инструкций решала проблемы давно исчезнувших браузеров и теперь лишь усложняет документ.
- W3C проводит опрос сообщества о будущем веб-стандартов и работе самой организации.
- Идеи для Interop 2027 можно отправить через форму, о которой рассказала команда Edge, или изучить объявление WebKit. Проект выбирает несовместимости браузеров, которые команды будут исправлять вместе.
- Chrome перешёл на двухнедельный цикл релизов; похожий темп планируют Firefox, Edge и Brave.
- Исследователь заметил, что Chrome 152 снова может не удалять данные сайтов Google при очистке данных на выходе, хотя похожее исключение уже исправляли раньше.
- Для адаптивной страницы больше не обязательно указывать
initial-scale=1.0в метатеге viewport: параметр был обходным путём для старых версий iOS. - Владельцам адресов третьего уровня в зоне
.nameстоит учесть предстоящее отключение этого формата доменов.
🎨 CSS и дизайн
Нужен ли сайту переключатель тёмной темы
Lea Verou после обсуждения вариантов переключателя темы и аргументов в пользу трёх состояний пришла к более радикальному выводу: постоянная кнопка может быть вообще не нужна. Если сайт корректно следует системной теме, отдельный контрол полезен только там, где посетителю действительно важно менять оформление независимо от системы.
Компоненты связываются через CSS без JavaScript
Typed attr() позволяет брать типизированное значение из HTML-атрибута и использовать его в CSS, например для числа колонок или размера отступа. В статье про связку attr() и container style queries показано, как передавать такое состояние дочерним элементам без дополнительных классов и JavaScript.
Подход пока требует внимания к поддержке браузерами, но делает границу между разметкой и стилями яснее: HTML задаёт данные компонента, а CSS решает, как их представить.
- Современные свойства CSS помогают создать собственный scrollbar без тяжёлых вычислений размеров и видимости в JavaScript.
- CSS Anchor Positioning можно использовать, чтобы анимировать перестроение Grid и связывать движение элементов с их новыми позициями.
- Roux предлагает стартовый набор нативных стилей, переменных и HTML-компонентов; результат можно посмотреть в документации проекта.
- В Drawably собраны рисованные элементы интерфейса с анимациями и повторяемой случайностью. Библиотека занимает около 7 КБ JavaScript в сжатом виде, не имеет зависимостей, а исходный код открыт на GitHub.
🔐 Безопасность и доступность
CSS может стать оружием внутри почтового клиента
Исследование атак через CSS в веб-почте показывает, что таблицы стилей способны не только менять внешний вид письма. Ошибки фильтрации позволяют подменять части интерфейса, обходить прокси изображений и даже собирать введённые пользователем данные.
- Dropbox рассказала о внутреннем аудиторе cookie, который автоматически проверяет поведение файлов cookie на сотнях страниц и сервисов компании.
- WCAG Radar запускается как расширение или bookmarklet, проверяет открытую страницу по WCAG 2.1 и 2.2 AA и отмечает найденные проблемы прямо в интерфейсе.
- SimpleWebAuthn 14.0 научился проверять постквантовые passkey на основе ML-DSA, а на Node.js 24.7 и новее предпочитает ML-DSA-44 при регистрации.
Заходите в Telegram-канал
Там можно спокойно обсудить выпуск, принести свою ссылку, задать вопрос или просто отметить материал, который пригодился в работе
📦 JavaScript и браузеры
Почему Safari пришлось переписать загрузчик модулей
Поддержка top-level await годами вызывала в Safari ошибки вида «нельзя обратиться до инициализации». Команда WebKit объяснила, как старую реализацию модулей заменили на соответствующую спецификации. Полностью исправленное поведение войдёт в Safari 27.
Проблема была глубже отдельного оператора: загрузчик строился по раннему варианту стандарта, который затем отменили. Асинхронное выполнение модулей потребовало заново согласовать порядок загрузки, связывания и вычисления зависимостей.
await fetch() ждёт не весь ответ
Вызов await fetch(url) завершается, когда браузер получил заголовки, а не всё тело ответа. Разбор реального поведения fetch() объясняет, почему это важно для таймаутов, отмены запросов, clone() и повторного использования соединений.
- Большой материал о стоимости главного потока браузера показывает, как разбивать, группировать, откладывать и переносить тяжёлые задачи, чтобы интерфейс не зависал.
- Разработчик Moonshine объяснил, зачем перенёс распознавание речи в JavaScript: модель работает прямо в браузере с низкой задержкой и без постоянных запросов к серверу.
- Руководство по бесконечной сетке с эффектом жидкого стекла объединяет Three.js, WebGPU и TSL в одном практическом эффекте.
- Экскурсия по исходникам Chromium объясняет, как устроена игра с динозавром: от игрового цикла и физики прыжка до роста скорости.
- Fixi Project собрал пять маленьких автономных библиотек от создателей htmx. Они повторяют отдельные идеи htmx, Hyperscript и Idiomorph без подключения всего набора; доступен и общий репозиторий с исходниками.
- Dropzone.js 6 завершил пятилетнюю бету: загрузчик файлов через drag-and-drop избавился от зависимостей, уменьшил сборку и исправил повреждение файлов при загрузке частями.
- vgpu позволяет запускать один WGSL-шейдер в браузере или без окна в Node.js, а модули шейдеров импортируются и экспортируются по модели TypeScript.
- deck.gl 9.4 расширил экспериментальную поддержку WebGPU в библиотеке для визуализации больших наборов данных.
- 20-летие jQuery 1.0 стало поводом вспомнить роль библиотеки в эпоху несовместимых браузеров. Ещё раньше Microsoft добавила в Internet Explorer собственный JScript, название которого помогало обойти ограничения торговой марки.
⚛️ React и React Native
React 19.3 стабилизировал Fragment Refs и View Transitions
В React 19.3 два ожидаемых API вышли из экспериментального статуса. Fragment Refs дают управлять фокусом, событиями и измерениями группы DOM-узлов без лишней обёртки. Компонент <ViewTransition> анимирует появление, исчезновение и перемещение элементов, включая раскрытие Suspense; познакомиться с базовым API помогает практический обзор View Transitions.
Релиз также расширил возможности Server Components, научился сохранять объекты Trusted Types при передаче в DOM и добавил use(browser()) для компонентов, которым нужны только браузерные API. Остальные исправления и изменения перечислены в полных примечаниях к версии 19.3.
Shopify отказывается от React Native в основных приложениях
После шести лет активного использования React Native Shopify решила вернуться к нативной разработке на Swift и Kotlin. Компания считает, что ИИ-инструменты снизили цену параллельной разработки под две платформы, а нативный стек даёт прямой доступ к новым возможностям iOS и Android. Отдельный отчёт описывает 12-недельный перенос приложения Shop и сравнивает запуск, стабильность и размер сборки.
React Compiler на Rust ускорил большую сборку в 17 раз
Команда перевела приложение из тысячи с лишним файлов на Rust-версию React Compiler из проекта oxc. В отчёте о миграции компиляция сократилась с 14,3 до 0,81 секунды, а новый порт смог оптимизировать некоторые шаблоны, которые пропускает реализация на Babel.
- React DevTools 8.0 включает вкладку Suspense по умолчанию и убирает Timeline в пользу панели Performance браузера. Экспериментальный пакет открывает данные DevTools ИИ-агентам через MCP.
- При переносе Discord на новую архитектуру React Native только 14% задач относились к самой миграции. В разборе длинного хвоста работ перечислены обновления библиотек, инфраструктуры и собственного нативного кода.
- Включение перевода страницы в Chrome может размонтировать React-приложение. Статья про ошибку
removeChildпри работе Chrome Translate объясняет, почему популярный monkey patch скрывает падение, но не чинит интерфейс. - Evil Martians описали переезд с Gatsby на Astro меньше чем за десять дней, сохранив существующие React-компоненты после предварительной подготовки.
- Jotai 3.0 стал ESM-only, требует React 18 и TypeScript 5.5, переносит
atomFamilyв отдельный пакет и заменяетloadableнаunwrap. Автор отдельно разобрал единственное изменение поведения. - Полностью переписанный React Native ExecuTorch 0.10 запускает ИИ-модели на устройстве через настраиваемые TypeScript-конвейеры; сайт проекта показывает доступные модели и платформы.
- Vidact компилирует React-подобные функциональные компоненты и хуки в прямые операции с DOM без Virtual DOM и React runtime. Неподдерживаемые шаблоны останавливают сборку с ошибкой.
- React Google Maps 1.10 добавил декларативные 3D-модели и маркеры для Google Maps JavaScript API, которые можно изучить в интерактивном примере.
- Lexical 0.50 получил HMR и пакет
@lexical/compilerдля более эффективного удаления неиспользуемого кода во время сборки. - Base UI 1.8 обновил библиотеку компонентов без готового оформления, которая стала стандартной основой для shadcn/ui.
- wouter 3.11 продолжает предлагать маршрутизацию примерно в 2 КБ для React и имеет отдельную поддержку Preact.
- Доступен релиз-кандидат React Native 0.88 для ранней проверки совместимости приложений и библиотек.
🛰️ Фреймворки и рантаймы
Как Turbopack делит JavaScript на части
На примере официального сайта Next.js команда объяснила стратегию разбиения кода в Turbopack. Сборщику приходится выбирать между количеством сетевых запросов и объёмом лишнего кода: иногда восемь крупных чанков весят больше, чем 355 маленьких.
- Bun 1.4.1 и Bun 1.4.2 снизили потребление памяти в простое, уменьшили результат
bun buildи добавили одновременную работу HTTP/1.1 и HTTP/2 на одном портуBun.serve. - Вышли Astro 7.3, Vuetify 4.2 и компонент vue-echarts 8.3 для графиков Apache ECharts во Vue.
- Astro LilyPond превращает текстовую запись музыки в нотную графику во время сборки Astro-сайта.
- TanStack описала партнёрство с Vercel и выпустила адаптеры TanStack AI для AI Gateway и Sandbox.
⚙️ Node.js
В Node.js появится встроенный запуск бенчмарков
Экспериментальный модуль node:bench строится по образцу node:test: тесты производительности можно будет запускать через node --bench и получать JSON-отчёт. Реализация уже попала в основную ветку Node.js, но API ещё может измениться до релиза.
Критическая уязвимость показала ограничения vm2
Исследователи GitLab нашли выход из песочницы vm2 с оценкой CVSS 10.0. Ошибка исправлена начиная с 3.11.7, однако авторы рекомендуют не доверять библиотеке выполнение действительно враждебного кода. Сама документация vm2 также описывает фундаментальную сложность безопасной изоляции JavaScript.
- Вышли Node.js 26.8.2 Current и Node.js 24.21.0 LTS. В них вошло обновление Undici, закрывающее несколько уязвимостей, а также OpenSSL 3.5.8.
- Небольшое изменение инициализации энтропии V8 ускоряет запуск Node.js примерно на миллисекунду, используя операционную систему вместо OpenSSL.
- Практика фаззинга конечных автоматов HTTP-клиента добавила свойства из fast-check к 206 тестам ffetch и нашла ещё 11 реальных ошибок.
- Команда Prisma ответила на опасения вокруг новой модели миграций и объяснила, готова ли Prisma 8 к долгоживущим production-приложениям.
- Руководство Paketo показывает, как упаковать Node.js-приложение в контейнер и уменьшить образ с помощью Buildpacks.
- MikroORM 7.2 добавил политики Row Level Security PostgreSQL в метаданные сущностей, связи
throughи WASM-драйвер sql.js, благодаря которому ORM может работать прямо в браузере. - Javet 6.0 позволяет встроить Node.js 26 и V8 в JVM, вызывать npm-пакеты из Java и запускать несколько экземпляров рантайма; исходники доступны на GitHub.
- parse-xml 5.0 перешёл только на ESM без изменения API; на Node.js 22+ старый
require()продолжает работать. Подробности есть в описании релиза. - dhcp.js 1.0 предоставляет DHCPv4-клиент, сервер и инструменты для Node.js; архитектура библиотеки описана в отдельном материале.
- pnpm 12.4 умеет управлять зависимостями npm, Python и Cargo в одном workspace.
- Nodemailer 10.0 переписан на TypeScript и поставляется в форматах ESM и CommonJS.
- Fastify 5.12.2 исправил четыре опасные уязвимости, включая обходы проверки данных и авторизации.
- tinybench 6.2 обновил компактную библиотеку точных бенчмарков для Node.js.
- supercluster 9.1 группирует большие наборы географических точек для быстрого отображения на карте в Node.js-приложениях.
🤖 ИИ и разработка
- Evil Martians предлагают десять способов сдерживать некачественный ИИ-код: генерацию клиентов из OpenAPI, архитектурные границы, мутационное тестирование и обязательные проверки в CI.
- Robin Wieruch объясняет, почему при агентной разработке иногда выгоднее строить на низкоуровневых примитивах, сравнивая D3 с более высокоуровневым Recharts.
⚒️ Инструменты и библиотеки
Vitest 5 ускорил тесты и добавил пошаговую отладку
Vitest 5 сосредоточился на скорости и поиске причин падения тестов. В проектах с большим количеством зависимостей команда измерила ускорение до 53%, а новый Trace View позволяет пошагово воспроизвести браузерный тест.
Команда vitest doctor анализирует конфигурацию и предлагает настройки для ускорения набора тестов. Это особенно удобно, когда отдельные тесты быстрые, но общий запуск замедляют изоляция, зависимости или неоптимальный пул процессов.
Rslib 1.0 собирает библиотеки и CLI
Rslib 1.0 предлагает единый конвейер публикации JavaScript-библиотек: параллельные ESM- и CJS-сборки, CSS компонентов React, Vue, Svelte и Solid, а также Module Federation. Для Node.js он умеет выводить целевую версию синтаксиса из engines.node, быстрее создавать декларации на TypeScript 7 и экспериментально собирать исполняемые Node SEA-файлы.
Атака на цепочку поставки npm привела к арестам
Двух подозреваемых арестовали по делу об атаках TeamPCP. Группу связывают с копированием механики червя Shai-Hulud и последующими волнами заражений, получившими название Mini Shai-Hulud. История напоминает, что обновление пакета может принести в проект не только исправления, но и код, опубликованный через захваченный аккаунт.
Обновления
- Вышли ESLint 10.10 и Storybook 10.6.
- ESLint Config Inspector 3.4 добавил измерение времени правил, чтобы находить причины медленного линтинга.
- eslint-plugin-regexp 3.3 находит ошибки и неоднозначности в регулярных выражениях; набор проверок можно увидеть в онлайн-песочнице.
- GPUIX 0.7 строит нативные GPU-ускоренные desktop-приложения на React и TypeScript поверх технологии редактора Zed.
- memlab 2.0.5 ищет утечки памяти в браузерных и Node.js-приложениях.
- Confectionery — минималистичный браузер для macOS, который убирает лишние панели со скриншотов и занимает около 2,9 МБ.