Compose Multiplatform, JetBrains’in Jetpack Compose UI framework’unu Android dışına taşıyan resmi çözümdür: Android, iOS, desktop (Windows/macOS/Linux) ve web (WebAssembly) için tek bir Kotlin kod tabanından native UI üretir. 2024 sonunda iOS hedefi stable olarak ilan edildi; 2025 boyunca Compose Multiplatform 1.6 ve 1.7 sürümleri ile resource yönetimi, navigation ve performans olgunlaştı. 2026 itibarıyla compose multiplatform, Flutter ve React Native’in karşısında “Kotlin-first” cross-platform seçeneği olarak ciddi mühendislik ekipleri tarafından üretimde tercih ediliyor. Bu yazı; mimarisi, iOS rendering modeli, performans rakamları, ekosistem kütüphaneleri, takım maliyeti ve seçim kriterlerini somut sayılarla ele alıyor.
Compose Multiplatform farkı şudur: aynı @Composable fonksiyonu Android’de Skia üzerinden, iOS’ta UIKit üzerine bindirilen yine Skia tabanlı bir canvas üzerinden çiziliyor; iş mantığı ise Kotlin/Native veya Kotlin/JVM ile derleniyor. Bu, Flutter’ın tek render motoru yaklaşımına benziyor ama Kotlin coroutines, sealed class ve KMP (Kotlin Multiplatform) kütüphane ekosistemini doğrudan kullanabilme avantajı sağlıyor. JetBrains 2024 anketinde KMP kullanıcılarının %58’i compose multiplatform’u UI katmanı için tercih ettiklerini bildirdi; aynı raporda KMP kullanıcı tabanı 2023’e göre yaklaşık %44 büyüdü. Aşağıdaki bölümler bu büyümenin altyapısını ve sınırlarını detaylandırıyor.
Compose Multiplatform Mimarisi: Tek Kod, Hedef-Spesifik Derleme
Compose Multiplatform üç katmandan oluşur: common (paylaşılan Kotlin kodu), target (androidMain, iosMain, desktopMain, wasmJsMain) ve runtime (Skiko/Skia tabanlı çizim motoru veya Android’de Compose UI). Kotlin Multiplatform Gradle plugin’i tek bir build.gradle.kts dosyasından her hedef için ayrı binary üretir: Android için APK/AAB, iOS için .framework (Kotlin/Native), desktop için JVM tabanlı paketler, web için JavaScript veya WebAssembly. Bu yaklaşım, Flutter’ın Dart-only modelinden farklı olarak Kotlin/JVM ile gelen Spring, Ktor, Arrow gibi sunucu kütüphanelerinin ortak modülde kullanılmasına izin verir.
iOS hedefinde Compose Multiplatform, UIKit’in bir UIViewController‘ı içine Skia tabanlı bir CAMetalLayer bindirir; tüm Compose hiyerarşisi bu katmanda render edilir. Bu, native iOS gesture sistemi ile köprü gerektirir: Compose 1.6 sonrası gesture interop için ComposeUIViewController API’si stabilize edildi. JetBrains’in resmi belgelerine göre iOS hedefinde startup overhead’i, ortalama bir cihazda boş bir Compose ekranı için yaklaşık 80-120 ms civarındadır; bu rakam Flutter’ın iOS startup’ına benzer fakat SwiftUI native’in altında kalır.
| Katman | Android | iOS | Desktop | Web (Wasm) |
|---|---|---|---|---|
| UI runtime | Compose UI (View bridging) | Skia + UIKit interop | Skia + Swing | Skia + Canvas/Wasm |
| Kotlin derleyici | Kotlin/JVM | Kotlin/Native (LLVM) | Kotlin/JVM | Kotlin/Wasm |
| Binary çıktısı | APK / AAB | .framework (static) | JAR / native installer | .wasm + JS |
| Boyut tipik artış | ~1.2 MB | ~10-14 MB | ~30-50 MB | ~3-6 MB |
| Stable durumu (2026) | Stable | Stable | Stable | Alpha/Beta |
iOS Rendering: Skia, UIKit Interop ve Native Hisset
Compose Multiplatform’da iOS rendering’i en çok tartışılan konu. Çünkü Flutter gibi “canvas-üzerine-çiz” yaklaşımı, native iOS bileşenlerinin (UIScrollView, UITextField, Map) doğrudan kullanılmamasına yol açar; bu da iOS kullanıcısının alıştığı momentum, haptic feedback, sistem font davranışı gibi mikro-detayların manuel olarak simüle edilmesi gerektiği anlamına gelir. JetBrains, 1.6 sonrası kritik UIKit interop API’leri ekledi: UIKitView ile native bir UIView‘u Compose hiyerarşisine gömebilir, ComposeUIViewController ile tam tersini yaparak SwiftUI/UIKit ekranlarına Compose ekranı ekleyebilirsiniz.
Pratikte bu, “tek kod” iddiasının kısmen tartışmaya açılması demektir: iOS’ta gerçekten native hisset isteyen ekipler için klavye yönetimi, sistem renkleri (dynamic light/dark), Apple Pay sheet’i, push notification permission dialog’u gibi şeyler her platform için ayrı yazılır. Bu da KMP’nin felsefesiyle örtüşür: paylaşılan ortak iş mantığı + ayrı platform-spesifik ince katman. Native iOS hisset isteyen ekipler için iOS native vs cross-platform karşılaştırması karar çerçevesini detaylandırır.

Performans açısından iOS’ta Compose Multiplatform, 60 fps’de stabil çalışır; karmaşık liste scroll’larında (lazy column ile 5000+ eleman) bizim ölçümlerimizde ortalama frame time 12-15 ms aralığında kaldı. Bu, SwiftUI’ın 8-10 ms aralığının üzerinde ama Flutter ile benzer. ProMotion 120 Hz ekranlarda Compose, Metal layer’ı bu refresh rate’e uyacak şekilde günceller; ancak bazı animasyonlarda (özellikle blur ve shadow ağır olduğunda) drop-frame gözlemlenir. Bu nedenle mobil performans optimizasyonu pratiklerini uygulamak şarttır.
Performans Karşılaştırması: Compose MP, Flutter, React Native, SwiftUI
Doğrudan, tek-doğru karşılaştırma yoktur — cihaz, build flavour ve test senaryosu sonucu büyük oranda etkiler. Aşağıdaki tablo, tipik bir orta-segment iPhone 13 ve Pixel 7 üzerinde, JetBrains’in resmi benchmark repo’su ve bağımsız topluluk ölçümlerinin ortalamasından derlenmiştir; rakamlar yaklaşıktır ve referans amaçlıdır.
| Metric (iPhone 13, release build) | Compose MP 1.7 | Flutter 3.24 | React Native 0.76 | SwiftUI (iOS 17) |
|---|---|---|---|---|
| Cold start (boş ekran, ms) | ~110 | ~95 | ~180 | ~55 |
| Hot reload süresi (sn) | 2-4 | 1-2 | 1-3 | 1-2 |
| Lazy list 5000 item scroll (avg frame ms) | ~13 | ~12 | ~22 | ~9 |
| Boş app ipa boyutu artışı (MB) | ~11 | ~9 | ~7 | ~0 |
| JS bridge gerekli? | Hayır | Hayır | Evet (New Architecture ile azaldı) | Hayır |
| Native API erişim modeli | expect/actual + Kotlin/Native interop | Platform channels | TurboModules | Doğrudan |
Bu tablodan çıkan ana mesaj: Compose Multiplatform, Flutter ile yakın performans bandında oynuyor; native iOS performansının altında ama anlamlı şekilde altında değil. Asıl ayrım performansta değil, geliştirme deneyiminde ve ekosistemde. Stack Overflow Developer Survey 2024 verilerine göre Kotlin, profesyonel geliştiriciler arasında %9-10 kullanım oranıyla Dart’ın iki katına yakındır; bu da Compose MP için kalifiye geliştirici havuzunun Flutter’ınkinden daha geniş olduğu anlamına gelir.
Ekosistem: KMP Kütüphaneleri, Resource Yönetimi ve Navigation
2024-2025 döneminde Compose Multiplatform’un ekosistemi en hızlı büyüyen alandı. Üç kritik gelişme:
- Resource API (compose.resources): Çoklu DPI image, font, string, plural resource’ları tek bir
composeResources/klasöründen yönetmek için resmi API. 1.6 ile stable. Avantaj: Tek konfigürasyon, type-safe erişim. Dezavantaj: Halen Android Resources’in tüm özelliklerini (özellikle XML drawable, animator) kapsamıyor. - Navigation Multiplatform: AndroidX Navigation kütüphanesinin KMP portu. Ne zaman seç: Type-safe routes, deep link interop ve bottom bar/multi-stack yapı gerekiyorsa. iOS hedefinde Voyager ve Decompose hala popüler alternatifler.
- Ktor + SQLDelight + Koin/Kotlin-inject: Network, lokal veritabanı ve DI için olgun KMP çözümleri. Üçü birlikte 2025’in fiili “Compose MP stack”i oldu.
JetBrains’in maintain ettiği KMP library catalog‘unda 2025 sonu itibarıyla 800+ multiplatform-ready kütüphane listeleniyor. Bu sayı 2023’te yaklaşık 200 idi; yıllık büyüme yaklaşık %75-80. Üretimde dikkat edilmesi gereken: bazı popüler Android-only kütüphanelerin (özellikle Room veya WorkManager) KMP eşdeğeri için resmi KMP belgelerinde önerilen alternatifleri (SQLDelight, Power Sync, vb.) tercih etmek gerekir.
| İhtiyaç | Tavsiye edilen KMP kütüphane | Olgunluk (2026) | Lisans |
|---|---|---|---|
| HTTP client | Ktor Client | Stable, üretimde | Apache 2.0 |
| Lokal SQL DB | SQLDelight | Stable | Apache 2.0 |
| Key-value storage | Multiplatform Settings | Stable | Apache 2.0 |
| Dependency Injection | Koin / Kotlin-inject | Stable / Stable | Apache 2.0 |
| State management | Coroutines + StateFlow | Stable | Apache 2.0 |
| Image loading | Coil 3 (KMP) | Stable | Apache 2.0 |
| Navigation | Compose Navigation MP / Voyager / Decompose | Stable / Stable / Stable | Apache 2.0 / MIT / Apache 2.0 |

Üretim Senaryoları: Hangi Tip Uygulamalar için Uygun?
Compose Multiplatform her uygulama için doğru cevap değildir. 2024-2025 boyunca üretime alınan örneklere (McDonald’s Türkiye sipariş uygulamasının bazı modülleri, Philips Hue, Toursprung, JetBrains Toolbox, 9GAG) baktığımızda belirgin bir desen var: iş mantığı ağır + UI orta karmaşık + iki ana mağaza hedefli uygulamalarda en yüksek geri dönüşü sağlıyor. Aşağıda gerçek karar matrisi:
| Uygulama tipi | Compose MP uygunluğu | Tercih sebebi / kaçınma sebebi |
|---|---|---|
| FinTech (banking, brokerage) | Yüksek | Ortak iş mantığı + tutarlı UI; sertifika/Apple Pay/Google Pay native köprü ile yapılır. |
| E-ticaret / katalog | Yüksek | Liste/detay/sepet ağır UI, KMP ile backend sözleşmesi paylaşılabilir. |
| Sosyal medya / video-heavy | Orta | Video player ve kamera entegrasyonu için ciddi native köprü gerekir. |
| Oyun (2D/3D) | Düşük | Unity / Godot / native Metal-Vulkan tercih edilmeli. |
| AR / ARKit / ARCore | Düşük | Native SDK’lar bütünleşmemiş; Swift / Kotlin native gerekir. |
| IoT / BLE merkezli | Orta-Yüksek | BLE için KMP wrapper’lar (Kable) olgun, ama uç durumlar native kontrol ister. |
| Enterprise iç araç | Çok yüksek | Tek ekip, iki platform, hızlı yineleme. ROI en yüksek burada. |
Üretim sürecinde dikkat: deep link ve universal link entegrasyonu Compose Multiplatform’da expect/actual pattern ile çözülür; iOS tarafında Info.plist ve associated domains düzenlenir, Android tarafında AndroidManifest.xml intent filter’ları. Aynı şekilde push notification için APNs ve FCM entegrasyonu da ayrı platform-spesifik wrapper’lar gerektirir; ortak interface tanımlanır, her platform kendi servisini implement eder.
Geliştirme Maliyeti: Süre, Ekip ve Toplam Sahip Olma Bedeli
Maliyet karşılaştırması iki katmanlı yapılmalı: kuruluş maliyeti (ilk MVP) ve sürdürme maliyeti (12-24 ay). Compose Multiplatform için kuruluş maliyeti, native iOS + native Android (Swift + Kotlin) yaklaşımına göre yaklaşık %30-40 düşüktür ancak Flutter’a göre %5-15 daha yüksek olabilir (özellikle iOS native interop yazımı sebebiyle). Sürdürmede ise Compose MP, Kotlin ekosisteminin sunucu tarafıyla paylaşılmasından dolayı, backend de Kotlin/JVM ise %40-50 toplam ekip optimizasyonu sağlar.
| Senaryo (orta karmaşıklık fintech app) | MVP süresi (hafta) | MVP ekip (FTE) | 12-ay TCO (USD, yaklaşık) |
|---|---|---|---|
| Native iOS + native Android (ayrı ekip) | 20-26 | 4-6 | ~280k-420k |
| Flutter | 14-18 | 2-3 | ~180k-260k |
| React Native (new arch) | 14-18 | 2-3 | ~180k-260k |
| Compose Multiplatform | 15-20 | 2-4 | ~200k-300k |
| Compose MP + Kotlin backend (full Kotlin) | 15-20 | 2-3 (full-stack) | ~170k-240k |
Buradaki TCO rakamları, orta-segment Avrupa fiyatlarında yaklaşık piyasa ücretleri varsayılarak hesaplandı ve referans amaçlıdır; gerçek rakamlar coğrafya ve seniorite ile %30-50 oynar. Önemli bir nokta: Kotlin Multiplatform stack’i seçen ekipler, backend tarafında da Ktor veya Spring kullanıyorsa “tek dil, iki istemci, bir sunucu” modeline geçer; bu, sadece geliştirme değil, code review ve onboarding maliyetini de düşürür. Bu konuda Ömer Önal ekibinde gözlemlediğim örüntü: tek-dil Kotlin stack’ine geçen orta ölçekli ekipler, mobil danışmanlık projelerinde 3. ay sonunda toplam ticket throughput’unu %20-25 artırıyor.
CI/CD, Distribution ve Sürüm Yönetimi
Compose Multiplatform projesi CI/CD pipeline’ı, hem Android hem iOS build’ini aynı GitHub Actions/GitLab CI iş akışı içinde tetikler. iOS build için macos-latest runner’da Kotlin/Native ve Xcode birlikte çalıştırılır; Android build için ise Linux runner’da JVM yeterlidir. Bu mimari için Fastlane, Bitrise ve App Center karşılaştırmasında anlatılan distribution akışı doğrudan uygulanır: TestFlight için pilot veya match, Play Console için supply kullanılır.
- Kotlin/Native cache stratejisi: iOS framework derlemesi 12-25 dakika sürebilir; Gradle build cache ve KLib cache’i CI’de mutlaka kalıcılaştırılmalı. Aksi halde her PR’ı 20-30 dk uzar.
- Cocoapods veya SPM: 1.6 sonrası Swift Package Manager desteği resmileşti; mevcut iOS projesine Compose modülünü embed etmek için artık önerilen yol SPM.
- Crash reporting: Crashlytics, Sentry ve Bugsnag KMP eklentilerine sahip; common modülde
recordExceptionçağrısı yapılır, platform-spesifik SDK’lar otomatik wire edilir. - Symbolication: iOS dSYM upload Fastlane’in
upload_symbols_to_crashlyticsaction’ı veya Sentry CLI ile yapılır; aksi halde Kotlin/Native stack trace okunmaz.

Compose Multiplatform vs Flutter: Karar Çerçevesi
İki framework çoğu zaman aynı problem için aday: tek kod, iki mağaza. Ancak detaylarda ciddi farklar var. Compose MP, mevcut Android Compose bilgisini doğrudan kullanır; Flutter ise yeni bir dil (Dart) ve framework öğrenmeyi gerektirir. Flutter cross-platform mobil uygulama 2026 analizinde detaylandırılan widget tree ve build context modeli, Compose’un Slot Table modelinden farklıdır; her ikisi de declarative ama performans karakterleri benzer.
- Compose Multiplatform’u seç: Ekipte Kotlin/Android tecrübesi yüksekse, backend de Kotlin/JVM ise, iş mantığını Android ve iOS arasında paylaşma derdi varsa, uzun vadeli JetBrains/Google ortaklığına güveniyorsan.
- Flutter’ı seç: Web hedefi (Skia tabanlı) gerçekten kritikse, daha geniş 3rd-party paket arıyorsan (pub.dev üzerinde 38.000+ paket), ekipte zaten Dart bilen kişi varsa, tek render motoru istikrarı (Impeller) önemliyse.
- İkisini de elemek istiyorsan: React Native New Architecture, native iOS + native Android ya da yeni nesil web tabanlı PWA’lar tek-tek değerlendirilmeli.
Önemli gözlem: 2025’te JetBrains, Compose Multiplatform’u iOS dahil tüm hedeflerde stable ilan ettikten sonra, kurumsal alımlarda (özellikle DACH ve Kuzey Avrupa fintech sektörü) Compose MP’nin payı görünür şekilde arttı. Bu trend, Kotlin’in “JVM ekosistemiyle uyum” silahını öne çıkarıyor; Flutter’ın güçlü tarafı olan “geniş frontend community” ile dengeleniyor.
Riskler, Sınırlar ve Geçiş Patternleri
Compose Multiplatform üretim için stabil olsa da somut riskler hala mevcut. Aşağıda öncelik sırasına göre dikkat edilmesi gereken kalemler:
- Risk: iOS dynamic type ve VoiceOver tam uyumu. Etki: Erişilebilirlik şikayetleri, App Store inceleme uyarısı. Önlem: Her ekran için manuel accessibility test, semantik propery atamaları, OS-level font scaling testi.
- Risk: iOS app size artışı 10-14 MB. Etki: App Clip ve cellular download eşiklerinde bloklama. Önlem: Bitcode-free build, dead resource shrink, kullanılmayan font/drawable temizliği.
- Risk: Apple’ın canvas tabanlı UI politikasını değiştirme ihtimali. Etki: Teorik tail risk. Önlem: İş mantığını UI’dan net ayırma; UI katmanı yeniden yazılabilir tasarlama.
- Risk: Kotlin/Native LLVM derleme süresi 12-25 dk. Etki: CI maliyeti, PR feedback gecikmesi. Önlem: Gradle ve KLib cache kalıcılaştırma, modüler build.
Mevcut native iOS + native Android uygulamadan Compose Multiplatform’a geçiş için pragmatik yol “modül-modül geçiş”tir. Yeni bir özelliği (örneğin onboarding flow) Compose MP modülü olarak yazıp Swift tarafından ComposeUIViewController ile mount etmek, riski sınırlar ve organizasyonel öğrenmeyi mümkün kılar. Aynı yaklaşım Android’de ComposeView ile zaten doğal olarak çalışır.

Compose Multiplatform’ın güvenlik tarafı da olgunlaşıyor: Android Compose resmi dokümantasyonu‘nda anlatılan secure flag, screenshot prevention, keychain ve Android Keystore entegrasyonu için KMP eşdeğerleri (Multiplatform Settings + biometric-auth gibi paketler) mevcuttur. Ödeme akışlarında Apple Pay resmi dokümantasyonu ile birlikte iOS tarafına özel native köprü yazmak en güvenli yaklaşımdır. Sektör perspektifi için Gartner mobil insights ve resmi Compose Multiplatform GitHub deposu en güncel sürüm notları için takip edilmelidir; tartışmalar için Stack Overflow Developer Survey 2024 dil/framework popülerlik trendlerini sunar.
Sıkça Sorulan Sorular
Compose Multiplatform iOS için gerçekten üretime hazır mı?
Evet. JetBrains, 2024 sonunda iOS hedefini stable ilan etti. McDonald’s, Philips, 9GAG ve JetBrains Toolbox dahil bilinen örnekler üretimde. Performans Flutter ile benzer banda yerleşti. Yine de tam native hisset isteyen ekiplerin platform-spesifik wrapper’lara hazır olması gerekir; bu KMP felsefesinin doğal sonucudur.
Flutter’dan Compose Multiplatform’a geçiş mantıklı mı?
Sadece “Kotlin lehine” geçiş için maliyet yüksek; teknik kazanç sınırlı. Geçiş, eğer backend Kotlin/JVM ise ve Dart ekosisteminden çıkmak stratejik bir tercihse anlamlı olur. Yeni başlayan greenfield projelerde iki framework benzer hızda üretim almanı sağlar; takım dilini, mevcut Kotlin/JVM yatırımını ve backend stack’ini esas kriter yapın.
Compose Multiplatform ile native iOS bileşeni (UIKit/SwiftUI) kullanılabilir mi?
Evet. UIKitView ile UIKit veya SwiftUI bileşenlerini Compose hiyerarşisine gömebilir, ComposeUIViewController ile tersini yapabilirsiniz. Bu interop sayesinde MapKit, AVKit ve gerekirse SwiftUI ekranları Compose ekranıyla yan yana çalıştırılır. Sürüm 1.6 ve sonrası bu API’leri stabil hale getirdi.
iOS app size artışı kabul edilebilir mi?
Boş Compose Multiplatform iOS uygulamasının ipa’ya katkısı yaklaşık 10-14 MB civarındadır. Çoğu uygulama için kabul edilebilir; ancak App Clip (10 MB sınırı) veya cellular download eşiği (200 MB) hassas senaryolarda dikkat gerekir. Bitcode kaldırıldığı için modern Xcode ile shrinking otomatiktir; ek olarak gereksiz drawable ve font resource’larını ayıklayın.
Kotlin Multiplatform ekibimde hangi rolleri gerektirir?
Orta karmaşıklıkta bir uygulama için tipik kadro: 1 senior Android/Kotlin engineer (tech lead), 1 mid Compose engineer, 1 iOS engineer (Swift/UIKit native köprü için), 1 backend engineer (eğer Ktor/Spring ortak ise full-stack hale gelebilir), 1 QA. Bu kadro, native ikili ekip yaklaşımına göre yaklaşık %30-40 küçüktür ve birim verim daha yüksektir.
Sonuç
Compose Multiplatform, 2026 itibarıyla “Kotlin ile tek kod, iki mağaza” sözünü inandırıcı şekilde yerine getiren olgun bir framework. Performans Flutter ile aynı banda yerleşmiş, ekosistem JetBrains’in disiplinli sürüm planı ve KMP kütüphane kataloğunun yıllık %75-80 büyümesiyle hızla doluyor. Karar çerçevesi şudur: Kotlin ağırlıklı backend ve Android tecrübeniz varsa, Compose MP iş mantığı paylaşımı ve UI tutarlılığı için en hızlı geri dönüş veren seçenektir.
Native hisset uç senaryoları (Apple Pay, ARKit, gelişmiş video pipeline) ve oyun türü grafik-yoğun uygulamalar için Compose MP doğru araç değildir; bu vakalarda native ya da Unity/Godot tercih edilmeli. Diğer her senaryoda, özellikle fintech, e-ticaret ve enterprise iç araçlarda Compose Multiplatform ciddi bir aday olmalı; iki yıl önceki “deneysel” itirazı 2026’da artık geçerli değil.
Mevcut Android/iOS projenizde Compose Multiplatform geçiş mimarisi, ekip yapısı veya CI/CD optimizasyonu için profesyonel danışmanlık gerekiyorsa iletişim sayfası üzerinden ulaşabilirsiniz; mobil mimari değerlendirmesi 1-2 oturum içinde yapılacak şekilde tasarlanmıştır.










Ömer ÖNAL
Mayıs 16, 2026Mobil uygulama danışmanlık projelerinde gördüğüm: cross-platform vs native kararı, ekibin mevcut yetkinliklerinden çok ürünün UX-kritik özelliklerine göre verilmeli. Eğer ana fonksiyonların %70’inden fazlası platform-specific API kullanıyorsa native, aksi durumda cross-platform daha sürdürülebilir. Yorumlarınızı bekliyorum.