Коротко. Flutter и Kotlin Multiplatform — не две реализации одной идеи. Flutter — одна ставка: один движок рендеринга, один UI, все платформы. KMP — другая ставка: общая логика и нативный UI каждой платформы — если только вы не добавите сверху Compose Multiplatform, и тогда это становится ставкой «в форме Flutter», но с более молодой экосистемой. Какая из них правильная, куда сильнее зависит от навыков вашей команды и амбиций продукта по части UI, чем от любых бенчмарков. Мы разрабатываем на Flutter — и ниже конкретно скажем, когда сами отправили бы вас в сторону KMP.
Если нужен только ответ — переходите сразу к фреймворку принятия решения.
Сравниваете Flutter с React Native? Это отдельный пост. С полностью нативной разработкой на Swift/Kotlin? Тоже отдельный пост.
Наша позиция — сразу и открыто
Мы — Flutter-first агентство; работы публичны. Мы оценивали KMP для клиентов — основатель, который пишет этот текст, годами выпускал продакшн-код на Kotlin и следит за развитием KMP и SwiftUI, — но мы не выпускали продакшн-приложение на KMP, и было бы нечестно делать вид, что это не так. Поэтому этот пост аккуратен в двух вещах: там, где мы сравниваем developer experience, мы говорим о том, что показали наши оценочные проекты, а не намекаем на продакшн-пробег; а там, где KMP действительно лучший ответ, мы говорим это прямо — потому что сравнение, написанное так, чтобы всегда заканчиваться выводом «наймите нас», для вас бесполезно.
Что реально изменилось к 2026 году
KMP давно перестал быть экспериментальным вариантом, и сравнение, которое обращается с ним как с экспериментом, устарело.
- Сам KMP стабилен и одобрен с обеих сторон. JetBrains объявила Kotlin Multiplatform стабильным в конце 2023 года, а Google на I/O 2024 официально рекомендовала его для общей бизнес-логики на Android. Netflix, McDonald's и Cash App используют общий KMP-код в продакшне в серьёзном масштабе.
- Compose Multiplatform достиг стабильности на iOS в 2025 году. Слой общего UI от JetBrains теперь стабилен на Android, iOS и desktop; web-таргет всё ещё в бете. Это важно, потому что меняет само значение слова «KMP»: не только общая логика под нативными UI, но и общий UI тоже.
- Активный фронтир сейчас — сторона Swift. Прямой экспорт Kotlin в Swift — без прослойки из Objective-C bridging headers — вышел в экспериментальном статусе и стоит в планах JetBrains на стабилизацию. Пока он не стабилен повсюду, на границе Kotlin и iOS остаётся трение, которое замечают нативные Swift-разработчики: экспортированные API ощущаются переведёнными, а не спроектированными.
- Flutter тем временем не стоял на месте. Рендеринг на Impeller — устоявшийся дефолт, а десятилетие экосистемы фреймворка — pub.dev, тулинг, пул найма — это ровно то, с чем приходится конкурировать более молодому стеку.
Сравнение, которое большинство постов проводит неправильно
«Flutter vs KMP» — на самом деле два разных сравнения, и когда их сваливают в одну кучу, команды и приходят к неверным выводам.
Сравнение A: Flutter против KMP с нативными UI. Бизнес-логика — сеть, хранение данных, доменные правила, вью-модели — выносится в общий Kotlin-код, а интерфейс строится дважды: SwiftUI на iOS, Jetpack Compose на Android. Типичная доля общего кода — 40–70% кодовой базы. Взамен каждое приложение неотличимо от полностью нативного, потому что UI и есть полностью нативный.
Сравнение B: Flutter против Compose Multiplatform. Общим становится и UI. CMP на iOS рисует собственные пиксели через рендеринг семейства Skia — ровно та архитектурная ставка, которую Flutter сделал в 2017-м. В этот момент вы выбираете между двумя реализациями одной и той же идеи, где преимущества Flutter — зрелость, глубина экосистемы и широта платформ, а преимущество CMP в том, что язык и половина тулчейна — те самые, в которых уже живёт ваша Android-команда.
Постоянно спрашивайте себя, в каком из двух сравнений вы на самом деле находитесь. Ответ определяет почти всё, что ниже.
Шесть осей сравнения, которые реально имеют значение
1. Стратегия UI — настоящая развилка
- KMP с нативными UI даёт то, чего Flutter архитектурно дать не может: каждый экран собран из собственных компонентов платформы, с платформенно-точным поведением в каждой детали физики скролла, контекстного меню и атрибутов accessibility. Если «неотличимо от нативного» — жёсткое требование, а в enterprise-продажах в банкинге или медицине оно иногда прописано в контракте, — это честный способ его выполнить, сохранив общую логику под интерфейсом.
- Flutter даёт противоположную гарантию: одни и те же пиксели везде, дизайн-система, которой вы владеете целиком, и одна реализация каждого экрана. Для насыщенного брендом и анимацией кастомного UI — конца спектра, где живёт Arcana, — построить один раз лучше, чем строить дважды, и по стоимости, и по консистентности.
- CMP на этой оси стоит рядом с Flutter, а не с нативной разработкой.
Честный вердикт: с этой оси и нужно начинать решение. Всё остальное — уточнения.
2. Состав команды — где на самом деле принимается большинство решений
KMP с нативными UI по-прежнему требует людей, которые пишут SwiftUI, и людей, которые пишут Compose. Вы убрали дублирующуюся логику, но не потребность в двух наборах платформенных навыков. Это правильный размен для организаций, у которых уже есть нативные команды, — а именно они сегодня и выпускают KMP в масштабе.
Flutter переворачивает уравнение: одна команда, один язык, обе платформы — поэтому студия из шести человек вроде нашей может тянуть семь продакшн-приложений. Если вы нанимаете с нуля и Kotlin-экспертизы у вас нет, Flutter — это меньшая организация, которую придётся построить.
Честный вердикт: есть Android/Kotlin-команда → KMP заслуживает роли вашей гипотезы по умолчанию. Мобильной команды ещё нет → с Flutter организация получится меньше.
3. Экосистема и шов на стороне iOS
У экосистемы Flutter десятилетие глубины: пакеты на pub.dev для большинства значимых SDK, зрелый тулинг, огромный корпус продакшн-историй (мы написали свою долю). Библиотечная экосистема KMP реальна и растёт — kotlinx, Ktor, SQLDelight, Koin надёжны, — но тоньше в длинном хвосте, а шов на стороне iOS — то место, где это чувствуется в оценочных проектах: пока прямой экспорт в Swift не стабилен повсюду, общие API, потребляемые из Swift, могут ощущаться как переведённый Kotlin, а не как нативный Swift, — и у ваших iOS-инженеров будет об этом своё мнение.
Честный вердикт: сегодня — однозначно Flutter, с честной сноской: это самый быстро движущийся фронт KMP.
4. Постепенное внедрение — тихая суперсила KMP
Flutter нельзя осмысленно внедрять в существующее нативное приложение по 10% за раз; add-to-app существует и работает (мы строим на нём миграции), но это путь к замене UI, а не к вечному сосуществованию. KMP спроектирован для обратного: выделите один модуль — сеть, синхронизацию, правила ценообразования, — сделайте его общим, выпустите, повторите. Без переписывания, без большого решения, обратимо на каждом шаге.
Честный вердикт: для здорового существующего нативного приложения, которое хочет перестать писать логику дважды, KMP — правильный инструмент, а Flutter — неправильный. То же самое мы говорим на нашей странице миграций: стабильные нативные приложения с довольными командами не нужно переписывать ни во что.
5. Производительность
Скучный ответ, которого мы честно придерживаемся: для подавляющего большинства приложений все три конфигурации достаточно быстры, и производительность решают архитектура и дисциплина ребилдов, а не фреймворк. Impeller у Flutter и нативные UI у KMP рендерят на скорости платформы; канвас-рендеринг CMP на iOS — тот же подход, который Flutter годами закалял, только в исполнении команды, которая находится ближе к началу той же дороги. Если ваш продукт живёт на границе возможностей рендеринга — графики в реальном времени, тяжёлая анимация, — зрелость Flutter там доказана; именно таким было решение по ExtraETF.
6. Долгосрочные риски
Риск Flutter — концентрация: он процветает, пока этого хочет Google, что смягчают открытый код и огромная установленная база. Риск KMP меньше и другой формы: Kotlin — официальный язык Android, весь бизнес JetBrains — инструменты для разработчиков, и Google со своей стороны поддерживает историю с общим кодом. Но конкретно CMP молод, и ставить общий UI на него — значит ставить на его дорожную карту. Ни один из рисков не оправдывает страха; оба оправдывают написание бизнес-логики за чистыми границами модулей — это и есть настоящая страховка, и она не зависит от фреймворка: тот же аргумент — в FAQ нашей основной страницы услуг.
Выбирайте Kotlin Multiplatform, если…
- У вас есть существующее здоровое нативное приложение — особенно Android-first с Kotlin-командой — и боль в том, что логика пишется дважды, а не в UI.
- Платформенно-точный нативный UI — жёсткое требование, и вы можете укомплектовать команду под SwiftUI + Compose.
- Вы хотите постепенного, обратимого внедрения внутри приложений, которые уже выпускаете.
- Ваша организация уже думает на Kotlin: серверный Kotlin, senior-инженеры на Android, тулинг JetBrains повсюду.
Выбирайте Flutter, если…
- Вы строите новый продукт и хотите, чтобы одна команда выпускала в оба стора, — экономика, на которой работает всё наше портфолио.
- Вы владеете своей дизайн-системой и хотите попиксельно одинаковый вид везде, включая web и desktop там, где они оправданны.
- Вам нужны более глубокая экосистема и больший пул найма под сам фреймворк уже сегодня, а не после следующей вехи чьей-то дорожной карты.
- Альтернатива, которую вы на самом деле рассматриваете, — CMP; в этом случае вы так или иначе выбираете архитектуру Flutter, и зрелость на стороне оригинала.
Короткий фреймворк принятия решения
Существующее нативное приложение, Kotlin-навыки в команде, UI остаётся нативным: KMP — и вам не нужно агентство вроде нашего, чтобы это услышать. Новый продукт, одна команда, кастомная дизайн-система, оба стора на один бюджет: Flutter. Тянет к Compose Multiplatform на новом продукте: поймите, что вы делаете ставку Flutter более молодым стеком, и принимайте решение по зрелости экосистемы, а не по симпатии к языку. Если всё ещё сомневаетесь, решающий фактор — команда, которую вы реально будете содержать через два года.
Часто задаваемые вопросы
Выбираете между Flutter и KMP для реального продукта? Забронируйте 30-минутный звонок — мы дадим честную рекомендацию, включая вариант «используйте KMP, и мы вам для этого не нужны».

