İki framework, tek bir vaat: tek bir kod tabanından birden fazla platform için uygulama geliştirmek.
Flutter, 2018’den beri cross-platform alanının lideri. Her şeyi kendi render motoruyla çiziyor ve mobil, web ve masaüstünde çalışıyor.
Compose Multiplatform ise JetBrains’in cevabı: Jetpack Compose’u Android’in ötesine, iOS’a, masaüstüne ve web’e taşıyor. iOS için stabil sürümüne 2024’te ulaştı.
2026’da hangisini seçmelisiniz? Dürüstçe karşılaştıralım.
Hızlı Özet
| Kategori | Kazanan |
|---|---|
| UI performansı (mobil) | Berabere |
| iOS’ta doğal his | Compose Multiplatform |
| Platform kapsamı | Flutter |
| Web desteği | Flutter |
| Masaüstü desteği | Compose Multiplatform |
| Öğrenme eğrisi | Flutter |
| Ekosistem olgunluğu | Flutter |
| Dil kalitesi | Compose Multiplatform (Kotlin) |
| Android geliştirme | Compose Multiplatform |
| iOS geliştirme | Flutter (daha olgun) |
| Kod paylaşımı | Berabere |
| İş piyasası | Flutter |
Compose Multiplatform Nedir?
Compose Multiplatform, JetBrains tarafından geliştirilen deklaratif bir arayüz framework’ü. Google’ın Android’in yerel arayüz kütüphanesi olan Jetpack Compose’unu iOS, masaüstü (Windows, macOS, Linux) ve web’e taşıyor.
Kotlin Multiplatform (KMP) ile birlikte çalışıyor: KMP iş mantığını paylaşırken, Compose Multiplatform arayüzü paylaşıyor.
2026’da öne çıkan gerçekler:
- iOS desteği stabil: Compose Multiplatform 1.7’den (2024 sonu) beri
- Masaüstü desteği olgun: JetBrains kendi IDE’lerinde üretimde kullanıyor
- Web desteği (Wasm) beta aşamasında: performans hızla iyileşiyor
- Kotlin dili: null güvenliği, coroutine’ler, multiplatform standart kütüphane
- Android’de %100 native: Compose Multiplatform, Android’de doğrudan Jetpack Compose’un kendisi
Flutter Nedir?
Flutter, Google’ın açık kaynaklı arayüz framework’ü. Dart programlama dilini kullanıyor ve her şeyi kendi motoruyla (Skia, iOS’ta artık Impeller) render ediyor.
2026’da öne çıkan gerçekler:
- Flutter 3.x: olgun ve üretimde kanıtlanmış
- Impeller render motoru: iOS’ta Skia’nın yerini aldı, animasyonlar çok daha akıcı
- 3 milyondan fazla geliştirici dünya genelinde
- Web desteği stabil, ancak paket boyutları büyük
- Masaüstü desteği stabil: Windows, macOS ve Linux’ta
- Material 3 ve Cupertino widget’ları: platforma uygun tasarım için
Mimari Karşılaştırması
Mimariyi anlamak, aradaki farkı açıklamaya yardımcı oluyor:
Compose Multiplatform:
┌──────────────────────────────────┐
│ Paylaşılan Kotlin Kodu (KMP) │
│ ┌────────────────────────────┐ │
│ │ Paylaşılan UI (Compose) │ │
│ └────────────────────────────┘ │
│ ┌────────────────────────────┐ │
│ │ Paylaşılan Mantık (VM'ler) │ │
│ └────────────────────────────┘ │
├──────────┬──────────┬────────────┤
│ Android │ iOS │ Masaüstü │
│ (Native) │ (Skiko) │ (Skiko) │
└──────────┴──────────┴────────────┘
Flutter:
┌──────────────────────────────────┐
│ Dart Kodu │
│ ┌────────────────────────────┐ │
│ │ Flutter Widget'ları (UI) │ │
│ └────────────────────────────┘ │
│ ┌────────────────────────────┐ │
│ │ İş Mantığı │ │
│ └────────────────────────────┘ │
├──────────┬──────────┬────────────┤
│ Android │ iOS │ Web │
│(Impeller)│(Impeller)│ (CanvasKit)│
└──────────┴──────────┴────────────┘
Temel fark: Compose Multiplatform, Android’de native, yani doğrudan Jetpack Compose’un kendisi. Flutter ise Android dahil her platformda kendi render motorunu kullanıyor.
Performans Karşılaştırması
Mobil performans
| Metrik | Compose Multiplatform | Flutter |
|---|---|---|
| Android render | Native (Compose) | Impeller (özel motor) |
| iOS render | Skiko | Impeller |
| Başlangıç süresi (Android) | Hızlı (native) | İyi (~300ms ek yük) |
| Başlangıç süresi (iOS) | İyi | İyi |
| Animasyon akıcılığı | 60fps | 60fps (Impeller ile 120fps) |
| Uygulama boyutu (Android) | ~8-15 MB | ~12-20 MB |
| Uygulama boyutu (iOS) | ~15-25 MB | ~15-25 MB |
| Bellek kullanımı | Android’de daha düşük | Platformlar arası tutarlı |
Android’de Compose Multiplatform kazanıyor, çünkü native framework’ün ta kendisi. Aradaki köprü yok, özel bir motor yok, doğrudan Jetpack Compose çalışıyor. Flutter ise buna bir render motoru katmanı ekliyor.
iOS’ta Flutter daha olgun. Impeller iOS için optimize edilmiş ve mükemmel performans veriyor. Compose Multiplatform ise Skiko (Kotlin için Skia) kullanıyor: iyi ama daha yeni bir teknoloji.
Web performansı
| Metrik | Compose Multiplatform | Flutter |
|---|---|---|
| Teknoloji | Kotlin/Wasm (beta) | CanvasKit / HTML |
| Paket boyutu | ~5-10 MB (Wasm) | ~2-4 MB (CanvasKit) |
| SEO desteği | Sınırlı | Sınırlı |
| Olgunluk | Beta | Stabil |
| Performans | İyileşiyor | İyi |
Web’de Flutter kazanıyor. Web desteği daha uzun süredir stabil ve daha küçük paketler sunuyor. Compose Multiplatform’un web hedefi hâlâ beta aşamasında.
Masaüstü performansı
İkisi de masaüstünde iyi çalışıyor. Compose Multiplatform hafif önde, çünkü JetBrains onu kendi ürünlerinde (Fleet IDE) kullanıyor. Flutter’ın masaüstü desteği stabil ama daha az sınanmış durumda.
Dil Karşılaştırması: Kotlin ve Dart
Bu, çoğu kişinin sandığından daha önemli bir konu, çünkü bu dilde yıllarca kod yazacaksınız.
Kotlin’in avantajları
// Null güvenliği tip sistemine gömülü
val name: String = "Alex" // Asla null olamaz
val nickname: String? = null // Açıkça nullable
// Asenkron kod için coroutine'ler
suspend fun fetchUsers(): List<User> {
val users = api.getUsers() // Askıya alır, bloklamaz
return users.filter { it.isActive }
}
// Extension fonksiyonlar
fun String.isEmail(): Boolean =
this.contains("@") && this.contains(".")
// copy() ile data class'lar
data class User(val name: String, val age: Int)
val alex = User("Alex", 25)
val olderAlex = alex.copy(age = 26)
Dart’ın avantajları
// Null güvenliği (Dart 2.12'den beri)
String name = "Alex"; // Asla null olamaz
String? nickname = null; // Açıkça nullable
// Async/await
Future<List<User>> fetchUsers() async {
final users = await api.getUsers();
return users.where((u) => u.isActive).toList();
}
// Extension'lar
extension EmailValidator on String {
bool get isEmail => contains("@") && contains(".");
}
// Record'lar ve pattern'lar (Dart 3)
final alex = (name: "Alex", age: 25);
Dil karşılaştırma tablosu
| Özellik | Kotlin | Dart |
|---|---|---|
| Null güvenliği | Mükemmel | İyi (2.12’den beri) |
| Tip sistemi | Çok güçlü | Güçlü |
| Eşzamanlılık | Coroutine’ler (yapılandırılmış) | Future/Stream |
| Multiplatform | KMP (arayüz olmadan mantık paylaşımı) | Yalnızca Dart |
| Backend desteği | Ktor, Spring Boot | Dart Shelf (daha az olgun) |
| Topluluk büyüklüğü | Daha büyük | Daha küçük |
| Öğrenme kaynağı | Daha fazla (Java ekosistemi) | Daha az |
| Araç desteği | IntelliJ/AS (mükemmel) | VS Code/AS (iyi) |
Kotlin daha güçlü bir dil. Daha büyük bir topluluğa, daha fazla backend framework’üne ve daha güçlü tip özelliklerine sahip. Ama Dart da iyi tasarlanmış ve Flutter geliştirmesi için gayet yeterli.
Kotlin’in en büyük avantajı şu: Android için zaten Kotlin biliyorsanız, yeni bir dil öğrenmenize gerek yok.
Öğrenme Eğrisi
Flutter
- Başlaması daha kolay: mükemmel dokümantasyon, çok sayıda tutorial
- Widget sistemi sezgisel: her şey bir widget
- Hot reload hızlı ve güvenilir
- Dart öğrenmesi kolay: JavaScript, Java ya da Kotlin biliyorsanız
- İlk uygulamaya kadar geçen süre: 1-2 hafta
Compose Multiplatform
- Kurulumu daha zor: KMP proje yapılandırması daha karmaşık
- Jetpack Compose bilgisi devreye giriyor: Compose biliyorsanız işin %80’ini zaten biliyorsunuz
- Kotlin güçlü ama karmaşık: coroutine’ler, flow’lar, sealed class’lar
- Dokümantasyon iyileşiyor: ama Flutter’ın gerisinde kalıyor
- İlk uygulamaya kadar geçen süre: 2-4 hafta (Kotlin’e yeniyseniz daha uzun)
Her iki ekosisteme de yabancıysanız Flutter ile başlamak daha kolay. Zaten Kotlin ve Jetpack Compose bilen bir Android geliştiricisiyseniz Compose Multiplatform açık ara mantıklı seçim, çünkü işin çoğunu zaten biliyorsunuz.
Ekosistem ve Kütüphaneler
Flutter’ın ekosistemi
- pub.dev: 40.000’den fazla paket
- Firebase entegrasyonu: birinci sınıf destek
- State management: Provider, Riverpod, BLoC, GetX
- Navigasyon: go_router, auto_route
- Ağ istekleri: Dio, http
- Yerel depolama: Hive, Drift, SharedPreferences
- Test: yerleşik widget testi, entegrasyon testleri
Compose Multiplatform’un ekosistemi
- Kotlin Multiplatform kütüphaneleri: hızla büyüyor
- Ktor: ağ istekleri için
- SQLDelight: multiplatform veritabanı için
- DataStore: key-value depolama için
- Koin: bağımlılık enjeksiyonu için
- Navigasyon: Voyager, Decompose
- Tüm Android kütüphaneleri: Android tarafında native çalışıyor
Flutter’ın ekosistemi daha büyük, daha fazla paket sunuyor. Ama Compose Multiplatform, Android tarafında mevcut tüm Android kütüphanelerini kullanabiliyor ve KMP ekosistemi hızla büyüyor.
Native Platform Entegrasyonu
iOS entegrasyonu
Bu kritik bir soru: her framework iOS’a özgü özelliklerle ne kadar iyi çalışıyor?
| Özellik | Compose Multiplatform | Flutter |
|---|---|---|
| UIKit ile etkileşim | İyi (UIKitView) | İyi (PlatformView) |
| SwiftUI ile etkileşim | İyileşiyor | Sınırlı |
| iOS erişilebilirlik | İyi | İyi |
| iOS jestleri (gesture) | Bazı farklar var | İyi ayarlanmış |
| App Store uyumu | Sorun yok | Sorun yok |
| Push bildirimleri | Platform kanalı | Platform kanalı |
Flutter iOS’ta daha uzun süredir var ve birçok iOS’a özgü davranışı (scroll fiziği, geri kaydırma jesti, haptics) inceltmiş durumda. Compose Multiplatform yetişiyor ama iOS’ta hâlâ pürüzlü noktalar var.
Android entegrasyonu
| Özellik | Compose Multiplatform | Flutter |
|---|---|---|
| Native API’ler | Doğrudan erişim (zaten native) | Platform kanalları |
| Jetpack kütüphaneleri | Doğrudan kullanım | Wrapper gerekiyor |
| Android View’lar | AndroidView composable | AndroidView widget |
| Material 3 | Birinci sınıf | Uyarlanmış |
| Performans | Native | Native’e yakın |
Compose Multiplatform Android’de kazanıyor, çünkü native framework’ün kendisi. Köprü yok, wrapper yok, çeviri katmanı yok. Google yeni bir Android API’si yayınladığında hemen kullanabilirsiniz.
İş Piyasası ve Benimsenme (2026)
| Metrik | Compose Multiplatform | Flutter |
|---|---|---|
| İş ilanları (global) | ~15.000+ | ~60.000+ |
| Kullanan şirketler | JetBrains, Netflix, McDonald’s | Google, BMW, eBay, Alibaba |
| Stack Overflow soruları | Hızla artıyor | 150.000+ |
| GitHub yıldızı | Yüksek (KMP + Compose) | 165.000+ |
| Freelance talebi | Artıyor | Yerleşik |
Flutter’ın iş piyasası daha büyük, çünkü daha uzun süredir mevcut. Ama Compose Multiplatform talebi, özellikle Android tarafında zaten Kotlin kullanan şirketler arasında hızla büyüyor.
Maaş karşılaştırması
| Bölge | Compose Multiplatform | Flutter |
|---|---|---|
| ABD | $120.000-155.000 | $110.000-145.000 |
| Almanya | €55.000-80.000 | €50.000-75.000 |
| Birleşik Krallık | £50.000-75.000 | £45.000-70.000 |
Compose Multiplatform geliştiricileri biraz daha fazla kazanıyor, çünkü:
- Genelde native Android bilgisine de sahipler (daha yüksek değer)
- Arz hâlâ sınırlı
- Bunu benimseyen şirketler genelde iyi maaş ödüyor
Türkiye’den Bakınca: Hangi Framework’e Yatırım Yapmalı?
Türkiye’deki mobil geliştirme piyasasında tablo biraz farklı görünüyor. Bankacılık ve e-ticaret sektöründeki büyük yerli oyuncuların Android tarafı uzun yıllardır native Kotlin üzerine kurulu, bu da güçlü bir Kotlin ve Jetpack Compose yetenek havuzu yarattı. Bu ekipler için Compose Multiplatform’a geçiş doğal bir sonraki adım: yeni bir dil öğrenmeden iOS’u da kapsama almak, mevcut Android yatırımını büyütmenin ucuz bir yolu.
Flutter tarafında ise durum tersine dönüyor. Türkiye’deki ajanslar ve startup’lar için Flutter hâlâ “sıfırdan hızlı MVP” ihtiyacında birinci tercih: tek ekip, tek dil, iki mağazaya (App Store ve Google Play) aynı anda çıkış. Kariyer.net ve LinkedIn’deki Türkiye kaynaklı ilanlarda “Flutter” araması, “Compose Multiplatform” ya da “KMP” aramasından hâlâ çok daha fazla sonuç veriyor. Yukarıdaki global iş piyasası farkı (~60.000’e karşı ~15.000 ilan) Türkiye özelinde muhtemelen daha da açık, çünkü Compose Multiplatform’un yerel şirketlerde benimsenmesi henüz erken aşamada.
Pratik sonuç: kısa vadede iş bulmak ya da bir MVP’yi hızlıca piyasaya sürmek istiyorsanız Flutter, Türkiye’deki ilan havuzunun büyük kısmını kapsıyor. Zaten güçlü bir Android ve Kotlin geçmişiniz varsa ve buna iOS’u da eklemek istiyorsanız, Compose Multiplatform’a yatırım yapmak; ekibinizin bildiği dili koruyarak platform kapsamını genişletmenin daha ucuz yolu.
Kod Karşılaştırması: Liste Ekranı
Aynı ekranı iki framework’te de kuralım: arama çubuklu bir kullanıcı listesi.
Compose Multiplatform
@Composable
fun UserListScreen(viewModel: UserViewModel) {
var searchQuery by remember { mutableStateOf("") }
val users by viewModel.users.collectAsState()
Column(modifier = Modifier.fillMaxSize().padding(16.dp)) {
OutlinedTextField(
value = searchQuery,
onValueChange = { searchQuery = it },
label = { Text("Search users") },
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(16.dp))
LazyColumn {
items(
users.filter { it.name.contains(searchQuery, ignoreCase = true) }
) { user ->
UserCard(user)
}
}
}
}
@Composable
fun UserCard(user: User) {
Card(
modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp)
) {
Column(modifier = Modifier.padding(16.dp)) {
Text(user.name, style = MaterialTheme.typography.titleMedium)
Text(user.email, style = MaterialTheme.typography.bodyMedium)
}
}
}
Flutter
class UserListScreen extends StatefulWidget {
@override
State<UserListScreen> createState() => _UserListScreenState();
}
class _UserListScreenState extends State<UserListScreen> {
final searchController = TextEditingController();
String searchQuery = "";
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
TextField(
controller: searchController,
decoration: const InputDecoration(
labelText: "Search users",
border: OutlineInputBorder(),
),
onChanged: (value) => setState(() => searchQuery = value),
),
const SizedBox(height: 16),
Expanded(
child: Consumer<UserViewModel>(
builder: (context, viewModel, child) {
final filtered = viewModel.users
.where((u) => u.name.toLowerCase()
.contains(searchQuery.toLowerCase()))
.toList();
return ListView.builder(
itemCount: filtered.length,
itemBuilder: (context, index) =>
UserCard(user: filtered[index]),
);
},
),
),
],
),
);
}
}
class UserCard extends StatelessWidget {
final User user;
const UserCard({required this.user});
@override
Widget build(BuildContext context) {
return Card(
margin: const EdgeInsets.symmetric(vertical: 4),
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(user.name, style: Theme.of(context).textTheme.titleMedium),
Text(user.email, style: Theme.of(context).textTheme.bodyMedium),
],
),
),
);
}
}
İkisi de benzer bir sonuç üretiyor. Compose Multiplatform biraz daha derli toplu. Flutter’da widget ağacını daha açık şekilde yönetmeniz gerekiyor. Jetpack Compose biliyorsanız Compose Multiplatform kodu size hemen tanıdık gelecek.
Compose Multiplatform Ne Zaman Seçilmeli
- Android ve Kotlin geliştiricisiyseniz: mevcut becerilerinizi kullanın
- Android birincil platformunuzsa: native performans garanti
- Sadece arayüzü değil, mantığı da paylaşmanız gerekiyorsa: KMP, ViewModel’leri, ağ katmanını ve veritabanını paylaşmanıza izin veriyor
- Masaüstü önemliyse: JetBrains’in masaüstü desteği olgun
- Ekibiniz Kotlin biliyorsa: yeni bir dil öğrenmenize gerek yok
- Kademeli geçiş istiyorsanız: mevcut bir Android uygulamasında KMP’yi parça parça benimseyebilirsiniz
Flutter Ne Zaman Seçilmeli
- Sıfırdan başlıyorsanız: Flutter’ın öğrenme eğrisi daha yumuşak
- Web birincil hedefse: Flutter’ın web desteği daha olgun
- iOS birincil platformunuzsa: Flutter’da iOS deneyimi daha cilalı
- Maksimum topluluk istiyorsanız: daha fazla paket, daha fazla tutorial, daha fazla cevap
- Hızlı prototipleme önemliyse: widget kataloğu ve hot reload prototiplemeyi hızlandırıyor
- Ekibiniz Dart ya da JavaScript biliyorsa: tanıdık söz dizimi
Son Değerlendirme
Mevcut Android ekipleri için: Compose Multiplatform doğal bir evrim. Zaten Kotlin ve Compose biliyorsunuz. KMP ve Compose Multiplatform ile iOS eklemek, Flutter’a sıfırdan geçmekten daha az yıkıcı.
Yeni cross-platform projeler için: Flutter, 2026’da daha güvenli seçim. Daha büyük ekosistem, daha çok sınanmış, daha iyi dokümantasyon. Ama aradaki fark hızla kapanıyor.
Uzun vadeli bahis için: Compose Multiplatform’un momentumu güçlü. JetBrains (en iyi IDE’leri yapan şirket) tarafından destekleniyor ve Google’ın Kotlin öncelikli stratejisiyle uyumlu. Kotlin, Dart’tan daha güçlü bir dil ve native Android hikayesi rakipsiz.
Dürüst cevap: İkisi de 2026’da üretime hazır. Ekibinizin mevcut becerileri, framework benchmark’larından daha önemli. Ekibinizi üretken kılan neyse onu seçin.