Пишем UI один раз, запускаем везде с Compose Multiplatform

10 Jan, 2026

Знакомая ситуация? Вы сделали крутое Android-приложение, и теперь бизнес хочет версию для iOS. А еще было бы неплохо иметь десктопный клиент для Windows и macOS. И вот, команда разработки раздувается, появляются три отдельных проекта, три кодовые базы UI, которые нужно синхронизировать. Каждое изменение в интерфейсе превращается в тройную работу. Звучит больно, не правда ли?

Сегодня я хочу рассказать о проекте, который предлагает элегантное решение этой проблемы — Compose Multiplatform от JetBrains. Это не просто очередной фреймворк, а реальный шанс воплотить мечту "написал один раз — работает везде" в жизнь, причем без серьезных компромиссов.

Что это за зверь, Compose Multiplatform?

Если вы Android-разработчик, то наверняка слышали, а скорее всего, уже и работали с Jetpack Compose — современным декларативным UI-фреймворком от Google. Он позволяет описывать интерфейс на Kotlin, забыв про XML-верстку и findViewById.

Так вот, JetBrains взяли эту идею и вывели ее на новый уровень. Compose Multiplatform — это фреймворк, который использует тот же самый декларативный подход и API, что и Jetpack Compose, но позволяет собирать UI не только для Android, но и для:

  • iOS
  • Desktop (Windows, macOS, Linux)
  • Web (пока в Beta, но уже впечатляет)

В основе всего лежит Kotlin Multiplatform, что позволяет переиспользовать не только UI, но и бизнес-логику, работу с сетью и данными. По сути, вы пишете общее ядро на Kotlin, а затем общий UI на Compose, который компилируется под нужную платформу.

Пример интерфейса на разных платформах

Почему на это стоит обратить внимание?

Давайте копнем глубже и посмотрим, какие практические преимущества это дает нам, разработчикам.

1. Единая кодовая база UI

Это главная фишка. Вы описываете кнопки, списки, экраны один раз, а они работают и на iPhone, и на Android-смартфоне, и на большом экране ноутбука. Это колоссальная экономия времени и сил. Меньше кода — меньше багов. Проще вносить изменения и поддерживать консистентность дизайна на всех платформах.

2. Низкий порог входа для Android-разработчиков

Если вы уже пишете на Jetpack Compose, считайте, что вы уже знаете 90% Compose Multiplatform. Вам не нужно учить Swift и SwiftUI, чтобы сделать iOS-приложение. Вы остаетесь в привычной экосистеме Kotlin и IntelliJ IDEA/Android Studio. Это, пожалуй, самый простой способ для Android-команды начать осваивать мир iOS.

3. Это не "веб-вью в обертке"

Один из главных страхов при работе с кроссплатформенными фреймворками — это производительность и доступ к нативным возможностям. Compose Multiplatform здесь приятно удивляет.

  • На Android — это тот же Jetpack Compose.
  • На Desktop и iOS — рендеринг происходит через быструю графическую библиотеку Skia (ее же используют Google Chrome, Flutter, и сам Android). Интерфейс рисуется на нативной канве, что обеспечивает высокую производительность.
  • Доступ к нативному API — поскольку в основе лежит Kotlin Multiplatform, вы без проблем можете вызывать специфичный для платформы код. Хотите использовать MKMapView на iOS или Camera API? Пожалуйста. Фреймворк не запирает вас в песочнице.

4. Полноценные десктопные приложения

Compose Multiplatform — это не просто "мобилка на большом экране". Фреймворк предоставляет специальные API для работы с десктопом:

  • Создание меню (в том числе в трее)
  • Обработка горячих клавиш
  • Управление окнами (размер, положение, иконка)
  • Системные уведомления

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

5. Заглядываем в будущее с WebAssembly

Поддержка Web пока находится в стадии Beta, но уже сейчас выглядит многообещающе. Вместо компиляции в JavaScript, JetBrains сделали ставку на Kotlin/Wasm (WebAssembly). Это дает практически нативную производительность в браузере. Представьте: вы можете взять часть своего мобильного или десктопного UI и встроить ее в веб-сайт. Например, сложный калькулятор или интерактивную диаграмму.

Как это работает под капотом?

Не вдаваясь в излишние дебри, архитектура выглядит так:

  1. Общий код (commonMain): Здесь живет ваша бизнес-логика, модели данных и, самое главное, общий UI, написанный на Compose.
  2. Платформенный код (androidMain, iosMain, desktopMain): Здесь вы пишете код, специфичный для каждой платформы. Например, инициализируете базу данных, работаете с геолокацией или встраиваете нативный компонент.
  3. Слой совместимости: Фреймворк берет на себя всю "магию" по адаптации вашего общего UI-кода под конкретную платформу: для Android он превращается в привычные composables, для iOS и Desktop рисуется через Skia, а для Web компилируется в Wasm.

Кому это подойдет?

Я вижу несколько сценариев, где Compose Multiplatform будет особенно полезен:

  • Стартапам и небольшим командам. Позволяет быстро выйти на все ключевые платформы с минимальными ресурсами.
  • Android-командам, которые хотят делать приложения под iOS. Это самый безболезненный путь в мобильную кроссплатформу, не требующий изучения нового языка и стека.
  • Разработчикам внутренних инструментов. Нужно быстро набросать утилиту для команды, которая будет работать и на Windows, и на Mac? Идеальный кандидат.
  • Для pet-проектов. Отличная возможность изучить современный стек и создать проект, которым можно будет пользоваться на всех своих устройствах.

Что в итоге?

Compose Multiplatform — это уже не экспериментальная технология, а зрелый и стабильный фреймворк, за которым стоит такая компания, как JetBrains. Он предлагает прагматичный подход к кроссплатформенной разработке, делая ставку на знакомые инструменты (Kotlin, Jetpack Compose) и высокую производительность.

Конечно, это не серебряная пуля. Если вам нужно приложение, до предела использующее специфические возможности iOS или macOS, нативный подход все еще может быть предпочтительнее. Но для огромного класса приложений, где важна скорость разработки и единый пользовательский опыт на разных платформах, Compose Multiplatform выглядит как один из самых сильных игроков на рынке.

Если вы пишете на Kotlin, обязательно загляните в репозиторий проекта и попробуйте собрать "Hello, World!" под свою любимую платформу. Уверен, вы будете приятно удивлены.