Bu yazıdaki bazı bağlantılar ortaklık (affiliate) bağlantısıdır. Komisyon alsak da sıralamalarımızı yalnızca test sonuçları belirler. Ayrıntılar için ortaklık açıklamamıza bakabilirsiniz.

İ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

KategoriKazanan
UI performansı (mobil)Berabere
iOS’ta doğal hisCompose Multiplatform
Platform kapsamıFlutter
Web desteğiFlutter
Masaüstü desteğiCompose Multiplatform
Öğrenme eğrisiFlutter
Ekosistem olgunluğuFlutter
Dil kalitesiCompose Multiplatform (Kotlin)
Android geliştirmeCompose Multiplatform
iOS geliştirmeFlutter (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

MetrikCompose MultiplatformFlutter
Android renderNative (Compose)Impeller (özel motor)
iOS renderSkikoImpeller
Başlangıç süresi (Android)Hızlı (native)İyi (~300ms ek yük)
Başlangıç süresi (iOS)İyiİyi
Animasyon akıcılığı60fps60fps (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üşükPlatformlar 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ı

MetrikCompose MultiplatformFlutter
TeknolojiKotlin/Wasm (beta)CanvasKit / HTML
Paket boyutu~5-10 MB (Wasm)~2-4 MB (CanvasKit)
SEO desteğiSınırlıSınırlı
OlgunlukBetaStabil
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

ÖzellikKotlinDart
Null güvenliğiMükemmelİyi (2.12’den beri)
Tip sistemiÇok güçlüGüçlü
EşzamanlılıkCoroutine’ler (yapılandırılmış)Future/Stream
MultiplatformKMP (arayüz olmadan mantık paylaşımı)Yalnızca Dart
Backend desteğiKtor, Spring BootDart Shelf (daha az olgun)
Topluluk büyüklüğüDaha büyükDaha küçük
Öğrenme kaynağıDaha fazla (Java ekosistemi)Daha az
Araç desteğiIntelliJ/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?

ÖzellikCompose MultiplatformFlutter
UIKit ile etkileşimİyi (UIKitView)İyi (PlatformView)
SwiftUI ile etkileşimİyileşiyorSınırlı
iOS erişilebilirlikİyiİyi
iOS jestleri (gesture)Bazı farklar varİyi ayarlanmış
App Store uyumuSorun yokSorun yok
Push bildirimleriPlatform 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

ÖzellikCompose MultiplatformFlutter
Native API’lerDoğrudan erişim (zaten native)Platform kanalları
Jetpack kütüphaneleriDoğrudan kullanımWrapper gerekiyor
Android View’larAndroidView composableAndroidView widget
Material 3Birinci sınıfUyarlanmış
PerformansNativeNative’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)

MetrikCompose MultiplatformFlutter
İş ilanları (global)~15.000+~60.000+
Kullanan şirketlerJetBrains, Netflix, McDonald’sGoogle, BMW, eBay, Alibaba
Stack Overflow sorularıHızla artıyor150.000+
GitHub yıldızıYüksek (KMP + Compose)165.000+
Freelance talebiArtıyorYerleş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ölgeCompose MultiplatformFlutter
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ü:

  1. Genelde native Android bilgisine de sahipler (daha yüksek değer)
  2. Arz hâlâ sınırlı
  3. 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

  1. Android ve Kotlin geliştiricisiyseniz: mevcut becerilerinizi kullanın
  2. Android birincil platformunuzsa: native performans garanti
  3. 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
  4. Masaüstü önemliyse: JetBrains’in masaüstü desteği olgun
  5. Ekibiniz Kotlin biliyorsa: yeni bir dil öğrenmenize gerek yok
  6. Kademeli geçiş istiyorsanız: mevcut bir Android uygulamasında KMP’yi parça parça benimseyebilirsiniz

Flutter Ne Zaman Seçilmeli

  1. Sıfırdan başlıyorsanız: Flutter’ın öğrenme eğrisi daha yumuşak
  2. Web birincil hedefse: Flutter’ın web desteği daha olgun
  3. iOS birincil platformunuzsa: Flutter’da iOS deneyimi daha cilalı
  4. Maksimum topluluk istiyorsanız: daha fazla paket, daha fazla tutorial, daha fazla cevap
  5. Hızlı prototipleme önemliyse: widget kataloğu ve hot reload prototiplemeyi hızlandırıyor
  6. 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.

İlgili Yazılar