На конференции React прошлым летом команда объявила, что Remix «уходит в спячку».

К тому моменту Remix v2 стал настолько тонкой обёрткой над React Router, что между проектами возникло искусственное разделение. Чтобы упростить архитектуру фреймворка, команда перенесла код сборщика и серверного рантайма из Remix непосредственно в React Router v7, объединив всё лучшее из фреймворка в так называемый “framework mode” для роутера. Также было объявлено о планах добавить ограниченную поддержку React Server Components (RSC) в React Router.

Эта работа была завершена: версия 7 была выпущена в ноябре прошлого года, а в конце мая была представлена предварительная поддержка RSC. Теперь разработчики, использовавшие Remix v1, v2 или более ранние версии React Router, могут рассчитывать на стабильную платформу с долгосрочной поддержкой.

Теперь же, пришло время заняться Remix!

React Router оказался действительно хорошим

Когда команда приступила к развитию Remix, ожидалось, что он станет полнофункциональным full-stack фреймворком для React с приоритетной поддержкой React Server Components (RSC) — новым взглядом на архитектуру full-stack React.

Но по ходу работы произошло нечто неожиданное: React Router v7 стал действительно очень мощным инструментом.

Благодаря внедрению поддержки RSC в React Router теперь существует плавный путь постепенного внедрения, позволяющий возвращать серверные компоненты напрямую из loaders и actions. Более того, была реализована полноценная поддержка серверных маршрутов — функциональность, которую изначально планировалось включить в следующую версию Remix.

Если все маршруты приложения являются серверными, то React Router v7 уже ощущается как логичное продолжение развития Remix. Отличия между ними тонкие и не касаются структуры.

И это не только технически зрелое решение команды — оно проверено на практике. Сегодня React Router используется в приложениях таких компаний, как Shopify, X.com (деятельность компании запрещена на территории РФ), GitHub, ChatGPT, Linear, T3Chat и многих других — всего почти в 11 миллионах проектов на GitHub. React Router находится всего в одном минорном релизе от полной поддержки всей архитектуры React. У него есть выделенная команда, долгосрочная поддержка и модель открытого управления, которая призвана обеспечить устойчивое развитие на годы вперёд.

Что же это значит для Remix?

Это значит, что теперь у команды есть свобода для разработки новых релизов в будущем.

Новый путь

В последние годы веб-технологии и инструменты для разработки сильно улучшились. Но вместе с этим всё стало сложнее, иногда даже слишком. Сейчас создание сайтов часто похоже на борьбу с инструментами, а не на творческий процесс.

Ранее у команды были идеи, которые казались слишком радикальными, чтобы реализовать их. Но теперь, когда Remix больше не привязан к определённой парадигме, появилась свобода исследовать новые подходы.

Remix v3 — это переосмысление того, каким может быть веб-фреймворк. Новое основание, сформированное на основе многолетнего опыта разработки для веба. Основное внимание уделяется простоте, ясности и производительности — без отказа от мощности, необходимой разработчикам.

Это модульный набор инструментов, элементы которого хорошо работают вместе, но могут использоваться и по отдельности — от встроенных драйверов для баз данных до собственной библиотеки компонентов (пора пробудить и Reach UI!).

Это не просто новая версия — это новое направление. Быстрее, проще и ближе к самому вебу.

Чтобы реализовать это, необходим полный контроль над стеком — без опоры на слои абстракции, находящиеся вне сферы управления. Это означает отсутствие критических внешних зависимостей — даже у React. В качестве основы используется форк Preact — зрелой библиотеки виртуального DOM, уже широко применяемой в Shopify, Google и множестве других проектов.

Для Remix v3 команда делает ставку на простоту, ориентированную на рантайм: без сборщика в режиме разработки и, скорее всего, без него и в продакшене — благодаря нативному ESM и современным стратегиям доставки через CDN.

Без HMR(Hot Module Replacement) — только чистые и быстрые перезагрузки. Цель — минимизировать инструментарий, устранить критические зависимости и создать фреймворк, который будет ближе к самой платформе. Команда не считает, что Vite необходим для отличного DX, хотя при желании его можно подключить.

Что касается Preact: это осознанный компромисс в пользу простоты и контроля. Экосистема React огромна — как и её сложность. Команда делает ставку на более лёгкое ядро, стабильные API и хорошие значения по умолчанию, чтобы сделать фреймворк более доступным без потери мощности и гибкости.

Если когда-либо возникало желание работать в более лёгкой, быстрой и ориентированной на саму природу веба среде, Remix v3 создаётся именно для этого.

Новые принципы разработки:

Хотя предварительный релиз ещё не готов, разработка Remix v3 ведётся на основе следующих принципов:

  • Модель-прежде-всего (Model-First Development).
    Искусственный интеллект радикально меняет модель взаимодействия между человеком и компьютером — как в пользовательском опыте, так и в рабочих процессах разработчиков. Исходный код, документация, инструменты и абстракции проектируются с прицелом на эффективность работы больших языковых моделей (LLM). Кроме того, создаются абстракции, позволяющие использовать модели непосредственно в продуктах, а не только как средства разработки.

  • Опора на Web API.
    Общие абстракции по всему стеку значительно сокращают количество переключений контекста — как для людей, так и для машин. В качестве основы используется Web API и JavaScript, как единственная по-настоящему full stack экосистема.

  • Ориентированность на рантайм (Religiously Runtime).
    Проектирование с расчётом на бандлеры, компиляторы или генерацию типов (и любую другую статическую аналитику на этапе до выполнения) приводит к неудачным API, загрязняющим архитектуру. Все пакеты проектируются без предположений о статическом анализе, а все тесты запускаются без сборки. Поскольку речь идёт о браузерах, допустимы только простые трансформации через --import-лоадеры, например, для TypeScript и JSX.

  • Минимизация зависимостей.
    Зависимости привязывают проект к чужим планам развития. Поэтому каждая из них должна быть выбрана осознанно, полностью инкапсулирована и готова к последующей замене собственным пакетом. Цель — достичь нуля внешних зависимостей.

  • Композиционность как требование (Demand Composition).
    Абстракции должны быть узконаправленными и взаимозаменяемыми. Хорошо спроектированная абстракция легко подключается и удаляется из существующего проекта. Каждый пакет должен быть полезен и документирован независимо от других. Новые возможности сначала реализуются в виде отдельного пакета. Если это невозможно — пересматривается структура существующего, чтобы сделать его более гибким. Однако модули, которые тесно связаны и почти всегда изменяются совместно, объединяются в один пакет.

  • Единый способ распространения (Distribute Cohesively).
    Крайне композиционные экосистемы могут быть сложны в изучении и применении. Поэтому все отдельные пакеты объединяются в единый дистрибутив (например, remix) с переэкспортом и общей документацией — как единый инструментарий.

Remix V3 обещает стать интересным решением. Идея упростить стек и перейти под капотом на Preact уже вызвала живой отклик в фронтенд-сообществе. Пока трудно сказать, было ли это правильным решением, но мы с нетерпением будем следить за развитием проекта и желаем ему успехов на этом нелегком пути.


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

-15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

Комментарии (0)