вышел Svelte 5, главные изменения: реактивные элементы теперь описываются явно (раньше было более магически); убран синтаксис slot, let: и <svelte:fragment> в пользу {#snippet …}; нативно поддержан TS; появился новый CLI; SvelteKit будет доработан под Svelte 5, но работает уже сейчас
вышел Next.js 15: API headers, cookies, params и searchParams стали асинхронными; кеширование GET Route Handlers и Client Router Cache выключено по умолчанию; поддержан React 19 и ESLint 9; добавлен новый компонент <Form>
выпущена React Compiler Beta: чтобы компайлер работал корректнее, код должен соответствовать требованиям специального плагина eslint-plugin-react-compiler (также сохранена обратная совместимость с React 17 и 18)
в shadcn зарелизили «семейство» компонентов сайдбара, много всяких их вариаций, есть «ручки» CSS-переменных для стилизации, но одним большим НО всё ещё остаётся Tailwind в ядре этого кита; православный React Spectrum пока что на эту тему имеет только beta-версию компонента Tree View
IDE WebStorm стал Free for non-commercial use, делаю вывод: редактор Fleet не полетел, в JetBrains решили потратить прибыль от лицензий WebStorm на маркетинг, в момент когда есть повсеместно некая усталость от VSCode (кстати, а где моя доля?!)
большинство CSS-фич уже вышло, но при этом всё ещё есть болит кроссбраузерность
самые любимые фичи :has() и subgrid
обновилась версия Transformers.js v3, JS-реализации популярных ИИ-моделей (около 120 штук): появилась поддержка WebGPU; совместим с Node, Bun, Deno; теперь хостится в официальном хранилище Hugging Face
Проекты
hexp3 — быстрый конвертер цвета hex в похожий цвет в пространстве P3
обратная сторона того, что веб-тулинг написан на ненативном языке (например, Rust вместо JS), его становится сложно продебажить, а также если тулинг работает в браузерном рантайме, то уходят бесплатные браузерные плюшки — JIT и кэширование байт-кода (это когда во второй раз скрипт берётся в прекомпилированном виде из кэша, а в n-ннадцатый раз ещё и дополнительно оптимизируется); кстати, ещё есть рецепт, как включить compile cache в Node: export NODE_COMPILE_CACHE=~/.cache/nodejs-compile-cache
мнения по поводу предложения в TC39 разделить версии языка на JS0/JSSugar разделились: сторонник изменений будет рад появлению pipes в JSSugar, а вот противник хочет продолжать писать на «низком уровне» и дальше (хотя вроде как ему этого и не запрещают)
статья про перевод cjs в esm: в целом, ничего нового, но ребята из Deno напоминают, что в Node уже давно есть import.meta.dirname и import.meta.filename, а также что в VSCode есть рефакторинг-тула для перевода cjs-модулей в esm (также можно выполнить deno lint --fix, но его ещё установить надо)
недавний выход в Node.js возможности require-ить esm-модули создало проблему: это работает только если в импортируемых esm-модулях (а также их внутренних зависимостях) не используется top-level await; таким образом имели два конфликтующих типа модулей CommonJS и ESM, а появился ещё и третий — ESM без top-level await
если нужно сделать кастомный курсор с анимацией по наведению на элемент интерфейса и доп инфой рядом с курсором, то свойством cursor не обойтись: нужно создать невидимый элемент, которому на mousemove будут прокидываться координаты и он будет становиться видимым в момент :root:has(button:hover) {}
WeakRef в JS даёт возможность создать ссылку на другой объект, которая уберётся из памяти Garbage Collector-ом, а с FinalizationRegistry можно создать колбек на сам момент очистки памяти
CSS
для того, чтобы стать КМС по теням, градиентам, а также их комбинациям с масками + clip-path можно рисовать пластилиновых человечков на CSS
функция min() понятна сходу (в отличие от container queries) и её можно применять как «односторонний стопор» при задании динамических значений для width, margin, `font-size
Text fragments — возможность ссылаться на определённый текст на странице хороша ещё и тем, что в Chromium-браузерах есть фича «Copy link to highlight» в контекстом меню на выделенном тексте, которая сгенерит эту ссылку
чтобы фон вложенного элемента не вылезал за скругленные углы родителя, можно принудительно унаследоватьborder-radius: inherit вместо добавления overflow: hidden
Платформа
в чём веб-компоненты плохи (там есть и хорошая часть, но плохая всегда интереснее): Shadow DOM катастрофически переусложнён; SSR сложно и делается только из-под фреймворков; роутер на веб-компонентах лучше не делать; есть проблемы с доступностью; и главная проблема — нет широкой поддержки в популярных фреймворках
по аналогии с conventional commits есть conventional comments, для того, чтобы сделать комментарии в процессе ревью кода более осмысленными и сразу было видно, какие комментарии пишутся только чтобы поумничать и их можно не учитывать и отправлять прямиком в глубокий бэклог
хорошая абстракция в коде абсорбирует сложность, влезать внутрь приходится редко; плохая абстракция маскирует сложность дополнительными слоями смыслов и в неё надо часто залезать