React Native в 2026: как устроен, кому подходит и когда лучше Flutter
Вопрос обычно звучит так: подрядчик предложил React Native, а знакомый говорит, что все ушли на Flutter — кому верить. Сразу раскроем карты: мы в Code Pilots делаем мобильные приложения на Flutter и на React Native не работаем. Поэтому дальше — не защита своего стека, а разбор, при каких ограничениях выбор одного или другого меняет результат проекта.
Если совсем коротко. React Native в 2026 году — не тот фреймворк, о котором писали в 2022: моста больше нет, JavaScript вызывает нативный код напрямую, а Expo стал стандартным тулчейном. По производительности разрыв с Flutter сократился настолько, что технический спор перестал быть решающим.
Выбор теперь про другое: кто будет писать и поддерживать код, какой у продукта интерфейс и как быстро нужно выйти в сторы. JavaScript-команда с опытом React разумно останется на React Native. Если команды нет, а интерфейс нестандартный и важна одинаковая картинка на всех устройствах — выигрывает Flutter.
В статье
- Что такое React Native
- Новая архитектура
- Сравнение с Flutter
- Кому подходит RN
- Почему мы на Flutter
- Когда нужна нативка
- Что спросить у подрядчика
- Кадры и ставки
- Сроки и стоимость
- Жизнь приложения через год
- Миграция между стеками
- Публикация в России
- Ошибки выбора
- С чего начать
- Часто задаваемые вопросы
Что такое React Native и как он устроен
React Native — фреймворк от Meta, который позволяет писать мобильные приложения на JavaScript и TypeScript, используя подход React. Ключевое отличие от веб-обёрток: интерфейс собирается из настоящих нативных компонентов платформы, а не рисуется внутри браузерного окна.
Разница между такими подходами — отдельная тема; кто путает гибридные приложения с кроссплатформенными, найдёт разбор в материале про нативную, гибридную и кроссплатформенную разработку.
Практическая ценность React Native всегда была в одном: если в компании есть веб-команда на React, она может делать мобильное приложение почти тем же инструментом. Это не маркетинг, а реальная экономия на найме и обучении — и главный аргумент фреймворка до сих пор.
Второй элемент экосистемы, без которого сейчас не обходится ни один проект, — Expo. Изначально это была надстройка «для новичков», сегодня это стандартный набор инструментов: сборка, обновления, работа с нативными модулями, публикация. Проект на React Native без Expo в 2026 году — скорее исключение, требующее объяснения.
Что изменила новая архитектура
Главные претензии к React Native касались моста — прослойки, через которую JavaScript общался с нативной частью, упаковывая данные в JSON. Мост давал задержки в анимациях, тормозил длинные списки и делал производительность непредсказуемой.
С января 2026 года эта история закрыта: новая архитектура стала единственной, а мост полностью удалён начиная с версии 0.82. Вместо него работают три механизма.
JSI — прямой вызов нативного кода из JavaScript через C++, без сериализации в JSON. Это фундамент, на котором держится всё остальное.
Fabric — новый рендерер, синхронизирующий поток интерфейса с потоком JavaScript. Отсюда корректные синхронные измерения вёрстки и заметно более плавные анимации.
TurboModules — нативные модули, которые подгружаются только тогда, когда нужны. Меньше памяти и быстрее старт приложения.
Что это значит для заказчика: аргумент «React Native тормозит» устарел. Сравнения производительности, написанные до 2025 года, описывают другой фреймворк — их нельзя брать в основу решения.
Что это значит для действующих проектов: приложения, которые годами жили на старой архитектуре, придётся переводить. Библиотеки, не обновлённые под новую архитектуру, отваливаются, а самописные нативные модули требуют переписывания.
Если у вас RN-приложение старше двух-трёх лет, это отдельная работа с отдельной оценкой, и она не про новые функции. Как устроена клиентская часть и почему такие обновления затрагивают приложение целиком — в материале про архитектуру мобильного приложения.
Flutter или React Native: сравнение по делу
| Критерий | React Native | Flutter |
|---|---|---|
| Язык и подход | JavaScript и TypeScript, React-подход, знакомый веб-разработчикам | Dart, собственная модель виджетов, изучается с нуля |
| Как рисует интерфейс | Нативными компонентами платформы | Своим движком; одинаковая картинка на всех устройствах |
| Производительность | После перехода на JSI и Fabric разрыв с Flutter сократился до незначимого для большинства продуктов | Стабильно предсказуемая, особенно в сложных анимациях |
| Ощущение платформы | Ближе к «родному» виду iOS и Android из коробки | Точный контроль дизайна, но платформенные привычки настраиваются вручную |
| Экосистема | Огромный JavaScript-пул пакетов, но не всё поддерживает новую архитектуру | Меньше пакетов, зато выше доля актуальных под текущие версии |
| Найм | Кадровый рынок в разы больше: React-разработчик переходит в RN за месяц-два | Специалистов меньше, но в России они пока обходятся дешевле |
| Стабильность API | Экосистема быстро меняется, обновления требуют внимания | Обновления предсказуемее, ломающих изменений меньше |
| Кому исторически подходит | Продуктам, у которых уже есть React-команда | Продуктам со сложным кастомным интерфейсом и высокими требованиями к единообразию |
Про пакеты полезно уточнение, которое обычно опускают: в npm действительно на порядки больше библиотек, чем в pub.dev, но это вся JavaScript-экосистема, а не мобильные решения. Для мобильного проекта важнее не общее число, а актуальность конкретных нужных библиотек — и здесь после перехода на новую архитектуру у React Native появился отдельный чек-лист проверок.
Кому подходит React Native
Честный список ситуаций, где React Native — рациональный выбор:
- У вас есть веб-команда на React. Те же люди, тот же язык, общая часть логики. Это самый весомый аргумент, и он перекрывает большинство технических нюансов.
- Нужен максимально широкий рынок найма. Заменить или добить команду проще: JavaScript-разработчиков на рынке в разы больше.
- Интерфейс близок к стандартному для платформ, без тяжёлой кастомной графики и нестандартных анимаций.
- Планируется общий код с веб-версией — часть логики, типы, работа с API переиспользуются.
- Проект уже на React Native. Переписывать работающее приложение без причины — худшая идея из возможных.
В этих случаях спор о стеке не имеет практического смысла: команда и найм важнее фреймворка, а технический разрыв в 2026 году слишком мал, чтобы перекрыть организационные плюсы.
Почему мы выбрали Flutter
Наша позиция объясняется профилем проектов, а не абстрактной любовью к технологии.
Предсказуемая картинка. Flutter рисует интерфейс своим движком, поэтому дизайн выглядит одинаково на десятках устройств — от флагманов до бюджетных Android. Для продуктов с кастомным брендовым интерфейсом это снимает целый класс правок.
Меньше зависимость от чужой экосистемы. Библиотек меньше, но обновляются они предсказуемее, а ломающих изменений в проекте меньше — на длинных проектах это дешевле.
Один кластер компетенций внутри. У нас Flutter-разработчики работают вместе годами, есть собственные каркасы приложений с авторизацией, правами и тестовым контуром. Старт нового проекта не начинается с нуля, поэтому кликабельный прототип появляется на первой неделе.
Проверено на нагрузке. Для VK Fest мы собрали MVP за два месяца командой из пяти человек: 90 тысяч скачиваний, до 100 тысяч одновременных пользователей и первое место в Google Play. Для PetShop приложение на готовой API-платформе вышло за две недели.
Где нужна нативная вставка, мы её делаем — это нормальная практика для обоих фреймворков. А React Native не берём именно потому, что не хотим держать вторую экосистему на уровне «умеем немного»: в мобильной разработке цена поверхностной экспертизы всегда всплывает в поддержке.
Когда кроссплатформа не подходит вообще
Есть класс задач, где спор RN против Flutter не имеет смысла, потому что нужна нативная реализация — полностью или для отдельного модуля.
| Задача | Почему нативно | Что делают на практике |
|---|---|---|
| Тяжёлая графика и обработка видео в реальном времени | Нужен прямой доступ к графическому конвейеру и кодекам | Нативный модуль внутри кроссплатформенного приложения |
| Сложная работа с Bluetooth, датчиками, промышленным оборудованием | Поведение зависит от платформенных API и прошивок | Нативный слой плюс кроссплатформенный интерфейс |
| Фоновая работа с жёсткими требованиями | Ограничения энергосбережения на каждой платформе свои | Нативные сервисы, интерфейс общий |
| Часы, ТВ, автомобильные платформы | Отдельные SDK и правила интерфейса | Отдельное нативное приложение |
| Приложения с требованиями по сертификации | Проверяющая сторона предъявляет требования к платформенным механизмам | Нативная реализация критичных частей |
Практический вывод: кроссплатформа не бинарный выбор. Правильная постановка вопроса — «какие 5–10% функциональности потребуют нативного кода», а не «нативно или нет».
Что спросить у подрядчика, который предлагает React Native
Если стек уже предложен, проверять надо не фреймворк, а понимание подрядчиком его особенностей. Шесть вопросов и то, что вы хотите услышать в ответ:
| Вопрос | Хороший ответ | Тревожный ответ |
|---|---|---|
| На какой версии и архитектуре будете делать? | Актуальная версия, новая архитектура, Expo как тулчейн | «Разберёмся по ходу», версия не называется |
| Какие библиотеки закладываете и все ли они под новую архитектуру? | Список с проверкой поддержки и планом на замену | «Библиотек полно, найдём» |
| Что будете писать нативно? | Конкретные модули: пуши на устройствах без сервисов Google, работа с камерой, фоновые задачи | «Всё сделаем на React Native» |
| Как решается публикация в RuStore и доставка уведомлений? | Отдельный канал доставки, тесты на реальных устройствах | «Firebase закроет всё» |
| Кто поддерживает приложение после релиза и по какому SLA? | Названы люди, регламент и сроки реакции | «Обращайтесь, если что» |
| Что останется у нас: код, доступы, сборочный контур? | Репозиторий, ключи, инструкция сборки на вашей стороне | Всё живёт у подрядчика |
Последний пункт важнее выбора между RN и Flutter. Приложение, собранное на чужих ключах и в чужом репозитории, вы не сможете передать другой команде — и тогда стек уже не имеет значения.
Кадры и ставки: что происходит на российском рынке
Стек выбирают на годы, поэтому кадровый вопрос весит больше бенчмарков.
Пул специалистов. JavaScript-разработчиков на рынке кратно больше, чем Flutter-разработчиков, и React-специалист переходит в React Native за один-два месяца практики. Для компании, которая собирает команду в штат, это ощутимый плюс.
Стоимость. В России Flutter-разработчики пока обходятся работодателю дешевле — рынок ещё не выровнялся. Разница не так велика, чтобы решать ей исход, но в смете на год она заметна.
Риск «одного разработчика». Более узкий рынок Flutter означает: если приложение писал один человек и ушёл, замену искать дольше. Лечится не выбором стека, а требованиями к коду и документации на входе.
Что важнее обоих пунктов. Кто будет поддерживать приложение через два года: ваша команда, подрядчик или никто. Ответ «никто» встречается чаще, чем кажется, — и тогда любой стек становится проблемой.
Сроки и стоимость
Кроссплатформенная разработка экономит на том, что одна команда пишет один код под две платформы: по рыночным оценкам это заметно сокращает и сроки, и бюджет по сравнению с двумя параллельными нативными командами. Но экономия не бесконечна: чем больше платформенной специфики, тем сильнее кроссплатформа приближается по стоимости к нативной разработке.
На сроки сильнее влияет не фреймворк, а объём интеграций и требования к дизайну. Одинаковое по функциям приложение на RN и на Flutter выходит примерно за одно время, если команда владеет своим инструментом. Порядок бюджета под свой объём экранов и интеграций можно посчитать в бесплатном калькуляторе.
Ориентиры по нашим работам: мобильная разработка начинается от 1,8 млн ₽, аудит кода и архитектуры существующего приложения — от 200 до 600 тыс. ₽. Точная сумма зависит от числа экранов, интеграций и офлайн-требований: оценка проекта бесплатная — опишите задачу. Как складывается смета мобильного проекта в деталях, разобрано в материале про стоимость разработки приложения.
Что происходит с приложением через год
Мобильное приложение — не сайт: оно живёт в чужих правилах, и правила меняются без вашего участия. Это часть стоимости владения, которую в первой смете обычно не видят.
Платформы поднимают требования. Apple и Google регулярно повышают минимальную версию SDK, под которую собирается приложение, и без обновления сборка перестаёт принимать в стор. Работы немного, но она обязательная и повторяется ежегодно.
Фреймворк уходит вперёд. У React Native релизы выходят часто, и экосистема ждёт обновления вместе с ними; крупный переход вроде новой архитектуры случается редко, но стоит отдельного проекта. Flutter обновляется предсказуемее, с меньшим числом ломающих изменений — на длинных проектах это заметная экономия нервов.
Библиотеки перестают поддерживаться. Автор пакета потерял интерес — и через год у вас зависимость без обновлений безопасности. Проверять актуальность нужно не только на старте, но и в ходе поддержки.
Устройства и ОС меняются. Новые размеры экранов, новые ограничения энергосбережения, новые правила уведомлений. Всё это ловится тестированием на реальных устройствах, а не в эмуляторе.
Практический вывод: закладывайте регулярное обслуживание отдельной строкой — обновления версий, зависимости, тесты на новых устройствах. Приложение, к которому не прикасались год, обычно требует не «пары правок», а спринта работы, и это правило не зависит от того, RN у вас или Flutter.
Миграция между стеками
Вопрос «переписать RN-приложение на Flutter» задают часто, и в большинстве случаев правильный ответ — не переписывать.
Когда миграция не нужна. Приложение работает, команда его поддерживает, критичных ограничений нет. Переписывание с нуля означает несколько месяцев без новых функций и повторение всех старых ошибок в новом коде.
Когда о миграции стоит думать. Кода никто не поддерживает, а команду на нём собрать не получается. Приложение застряло на старой архитектуре, а нужные библиотеки под новую уже не выпускаются. Производительность упирается в решения, заложенные на старте. Или продукт меняется настолько, что новая версия — это другое приложение.
Как это делают. Не «большим взрывом», а по частям: новый функциональный блок пишется на целевом стеке, старое приложение продолжает работать, экраны переезжают постепенно. Переносится серверная часть, API и логика; интерфейс и нативные модули переписываются.
Перед решением полезен аудит: сколько кода живого, что покрыто тестами, где узкие места, какие библиотеки без поддержки. По итогам обычно выясняется, что дешевле обновить архитектуру существующего приложения, чем начинать заново.
Публикация в России: RuStore и сторы
Техническая часть выбора стека почти не влияет на публикацию — влияет география.
Три канала вместо двух. App Store, Google Play и RuStore. Для российской аудитории RuStore перестал быть опцией: на части устройств это единственный работающий магазин.
Устройства без сервисов Google. Стандартная доставка push-уведомлений через Firebase на них не работает. Нужен альтернативный канал — и это архитектурное решение, а не настройка перед релизом. Оба фреймворка требуют здесь ручной работы; подробности зависят от платформы, и на Android их больше — как и всей платформенной специфики в разработке Android-приложений.
Зарубежные SDK. Часть аналитики, платежных и картографических решений в России недоступна или работает нестабильно. Список замен формируется на этапе проектирования, иначе на релизе выясняется, что половина интеграций не проходит.
Сборы платформ. Apple берёт плату за аккаунт разработчика ежегодно, Google — разово, RuStore на момент публикации бесплатен. Это не главная строка бюджета, но её стоит держать в плане.
Ошибки выбора
Опираться на сравнения 2022–2024 годов. До удаления моста React Native был другим фреймворком; старые бенчмарки описывают несуществующую ситуацию.
Выбирать стек без учёта команды. Технически лучший вариант, который некому поддерживать, дороже среднего варианта с доступным наймом.
Переписывать работающее приложение из-за моды. Миграция оправдана ограничениями, а не тем, что «Flutter сейчас популярнее».
Считать, что кроссплатформа исключает нативный код. В любом серьёзном проекте есть модули, которые пишутся нативно; их надо заложить в план, а не обнаруживать в середине.
Игнорировать российскую специфику. RuStore, устройства без сервисов Google и недоступные SDK всплывают на релизе и стоят недель работы.
Верить студии, которая владеет одним стеком и говорит, что он лучший для всего. Мы тоже владеем одним — поэтому и объясняем, при каких ограничениях он не подходит.
С чего начать
Три вопроса, которые снимают спор о стеке. Первое — кто будет писать и поддерживать приложение: своя команда, подрядчик или смешанный вариант; если есть React-разработчики, чаша сильно склоняется к React Native. Второе — насколько нестандартный интерфейс: брендовые анимации и сложная графика — довод за Flutter. Третье — какие функции требуют платформенного кода: Bluetooth, фоновые задачи, оборудование, часы.
С этими ответами выбор занимает один разговор, а не месяц сравнений. И если приложение уже существует, начинать стоит не с выбора стека, а с оценки того, что есть.
Часто задаваемые вопросы
Технически они сравнимы: после перехода React Native на новую архитектуру с JSI и Fabric разрыв в производительности перестал быть значимым для большинства продуктов. Выбор решают три вещи: наличие React-команды (довод за RN), сложность кастомного интерфейса и требования к одинаковому виду на всех устройствах (довод за Flutter) и то, кем вы будете поддерживать код через два года.
Это утверждение устарело. Задержки возникали из-за моста между JavaScript и нативной частью; мост полностью удалён в версии 0.82, а с января 2026 года новая архитектура стала единственной. Сейчас узким местом становится не фреймворк, а архитектура приложения: тяжёлые списки, лишние перерисовки, неоптимальная работа с сетью и изображениями.
Нет. Мы работаем на Flutter и добавляем нативные модули там, где это нужно, — держать вторую экосистему на уровне «умеем немного» считаем нечестным по отношению к заказчику. Если у вас приложение на React Native, мы можем сделать аудит кода и архитектуры и посчитать варианты: обновление существующего приложения или поэтапная миграция.
В большинстве случаев нет. Переписывание с нуля — это месяцы без новых функций и риск повторить старые ошибки. Думать о миграции стоит, если приложение застряло на старой архитектуре и нужные библиотеки не обновляются, команду на этом стеке собрать не удаётся или производительность упирается в решения, заложенные на старте. Делают её по частям, а не разом.
Почти всё, но не всегда экономично. Тяжёлая графика и обработка видео, сложная работа с Bluetooth и промышленным оборудованием, жёсткие фоновые задачи, приложения для часов и ТВ — это нативные модули или отдельные нативные приложения. Правильный вопрос на старте: какие 5–10% функциональности потребуют платформенного кода, — и заложить их в план сразу.
Разработка с Code Pilots
Code Pilots — студия заказной разработки полного цикла: веб- и мобильные продукты с нетривиальной бизнес-логикой, интеграциями и высокими нагрузками. В мобильной разработке наш стек — Flutter, с нативными вставками там, где без них не обойтись; React Native мы не берём и говорим об этом сразу.
Внутри — кластер Flutter-разработчиков, который работает вместе годами, плюс аналитики, дизайнеры, backend, QA и DevOps: команда middle+ и senior без джунов. Начинаем не с нуля — есть свои каркасы приложений с авторизацией, правами и тестовым контуром, поэтому кликабельный прототип появляется на первой неделе, а рабочий продукт собирается за два-три месяца.
Если у вас уже есть приложение — на любом стеке — начнём с аудита кода и архитектуры и честно скажем, что стоит развивать, а что переписывать. Обсудить проект →