Flutter, React Native ve Kotlin Multiplatform aynı hedefe farklı mimarilerle yaklaşır: Android ve iOS için iki tamamen bağımsız ürün geliştirmek yerine kodun anlamlı bir bölümünü paylaşmak. Ancak paylaşımın hangi katmanda gerçekleştiği, kullanıcı arayüzünün nasıl çizildiği, native API'lere nasıl erişildiği ve ekibin hangi dilleri bilmesi gerektiği üç teknolojide aynı değildir.
Bu nedenle “hangisi daha iyi?” sorusunun tek bir cevabı yoktur. İki platformda aynı özel tasarım isteniyorsa Flutter avantajlı olabilir. React ve TypeScript ekibi mobil ürüne geçiyorsa React Native daha doğal bir başlangıç sunabilir. Native Android ve iOS deneyimini koruyup iş mantığını paylaşmak isteyen ekiplerde ise Kotlin Multiplatform daha uygun olabilir.
Üç teknoloji arasındaki temel fark nedir?
Flutter çoğunlukla UI ile business logic'i Dart üzerinden ortaklaştırır. React Native, JavaScript veya TypeScript ile yazılan React bileşenlerini native platform bileşenleri ve modülleriyle buluşturur. Kotlin Multiplatform ise önce domain ve data katmanını paylaşmaya, istenirse Compose Multiplatform ile UI paylaşımını artırmaya izin verir.
| Kriter | Flutter | React Native | Kotlin Multiplatform |
|---|---|---|---|
| Ana dil | Dart | JavaScript veya TypeScript | Kotlin; platform tarafında Swift/Kotlin gerekebilir |
| Paylaşım modeli | UI ve logic yüksek oranda ortak | React UI ve logic büyük ölçüde ortak | Logic'ten UI'a kadar ekip tarafından seçilir |
| UI yaklaşımı | Flutter widget ve rendering sistemi | React bileşenleri ile native component entegrasyonu | Native UI veya Compose Multiplatform |
| Native erişim | Plugin ve platform channel | Turbo Native Module ve Native Component | Platform source set, interface veya expect/actual |
| Doğal ekip profili | Dart öğrenmeye açık tek mobil ekip | React ve TypeScript deneyimli ekip | Kotlin/Android güçlü ve native iOS kalitesini koruyan ekip |
Flutter nasıl çalışır?
Flutter, Google'ın Dart diliyle kullanılan taşınabilir UI toolkit'idir. Resmî mimari dokümanı framework, engine ve platform embedder katmanlarını açıklar. Widget ağacı layout, painting ve interaction sürecine dönüştürülür; Flutter UI'ın büyük bölümünü kendi widget ve rendering sistemiyle yönetir Flutter Architectural Overview.
Bu model Android ve iOS'ta aynı tasarım sistemini yüksek oranda paylaşmayı kolaylaştırır. Ekip native widget'ları birebir kullanmak yerine Flutter'ın Material, Cupertino ve özel widget'larını kullanır.
Flutter'ın güçlü olduğu durumlar
- İki platformda yüksek UI paylaşımı istenmesi
- Markaya özgü ve tutarlı tasarım sistemi bulunması
- Animasyon, grafik ve özel çizim ağırlıklı deneyimler
- Tek mobil ekibin iki platformu birlikte sahiplenmesi
Flutter'da dikkat edilmesi gerekenler
- Dart mevcut ekip için yeni bir yetkinlik olabilir.
- Yeni platform özelliği için plugin veya native kod gerekebilir.
- Plugin kalitesi ve bakım durumu uzun vadeli mimariyi etkiler.
- Uygulama boyutu ve performans release build üzerinde ölçülmelidir.
Flutter'ın resmî FAQ sayfası toolkit'in mobile, web ve desktop için natively compiled uygulamalar oluşturduğunu belirtir Flutter FAQ.
React Native nasıl çalışır?
React Native, React yaklaşımını Android ve iOS için native uygulama geliştirmeye taşır. Uygulama mantığı genellikle JavaScript veya TypeScript ile yazılır; platform UI ve native özellikleri component ve module katmanları üzerinden kullanılır React Native Official Site.
Modern React Native projeleri New Architecture üzerinde çalışır. Fabric, Turbo Native Modules, Codegen ve JSI JavaScript ile native katman arasındaki iletişimi modernleştirir. React Native 0.82, framework'ün tamamen New Architecture üzerinde çalışan ilk sürümü olarak yayımlandı React Native 0.82.
React Native'in güçlü olduğu durumlar
- React ve TypeScript bilen web ekibinin mobil ürüne geçmesi
- Native bileşenlerle ortak React UI geliştirilmesi
- JavaScript ekosisteminden ve mevcut ekip bilgisinden yararlanılması
- Expo veya React Native araç zincirinin ürüne uyması
React Native'de dikkat edilmesi gerekenler
- Her npm paketi React Native ve New Architecture ile uyumlu değildir.
- Özel native modüllerde Kotlin/Java ve Swift/Objective-C bilgisi gerekir.
- Framework ve bağımlılık yükseltmeleri düzenli bakım ister.
- Web React kodunun tamamı mobile doğrudan taşınamaz.
Hazır modül bulunmadığında Turbo Native Module geliştirilebilir. React Native Codegen, TypeScript veya Flow spesifikasyonundan platform bağlantı kodları üretir Turbo Native Modules.
Kotlin Multiplatform nasıl çalışır?
Kotlin Multiplatform paylaşılacak katmanı ekibin seçmesine izin verir. En yaygın model domain, network ve data katmanlarını Kotlin ile ortaklaştırıp Android UI'ını Jetpack Compose, iOS UI'ını SwiftUI ile native tutmaktır. Compose Multiplatform tercih edilirse UI da paylaşılabilir.
Android Developers, KMP'nin Android ve iOS arasında business logic paylaşımı için Google tarafından resmî olarak desteklendiğini ve production-ready olduğunu belirtir Android Developers – Kotlin Multiplatform.
KMP'nin güçlü olduğu durumlar
- Android tarafında güçlü Kotlin birikimi bulunması
- Business logic ortaklaşırken native UI'ın korunması
- Mevcut native uygulamaya aşamalı geçiş yapılması
- Platform API'lerine doğrudan erişimin kritik olması
- Paylaşım oranının zamanla artırılmak istenmesi
KMP'de dikkat edilmesi gerekenler
- Native UI modelinde ekranlar ayrı geliştirilir.
- Swift, Xcode ve Apple release süreçleri devam eder.
- Kotlin–Swift API sınırı dikkatli tasarlanmalıdır.
- Kritik kütüphanelerin common ve iOS desteği doğrulanmalıdır.
Kotlin'in resmî dokümantasyonu KMP'nin native development avantajlarını korurken platformlar arasında kod paylaşımı sunduğunu açıklar Kotlin Multiplatform Overview.
UI paylaşımı açısından hangisi daha iyi?
Paylaşım oranı en önemli karar noktalarından biridir. Daha fazla ortak kod her zaman daha iyi değildir; Android ve iOS'un navigation, accessibility, typography ve interaction beklentileri devam eder.
| UI hedefi | Doğal aday | Gerekçe |
|---|---|---|
| İki platformda aynı özel tasarım | Flutter | Widget ve rendering katmanı ortak |
| React bilgisiyle ortak mobil UI | React Native | React component modeli native mobile taşınır |
| Tam native Android ve iOS deneyimi | KMP + native UI | Logic ortak, SwiftUI ve Compose ekranları ayrı |
| Önce logic, sonra gerekirse UI paylaşımı | KMP | Paylaşım sınırı kademeli genişletilebilir |
UI paylaşım yüzdesi bir başarı metriği değildir. Doğru metrik, iki platformda ürün davranışının tutarlı ve bakımının sürdürülebilir olmasıdır.
Native API erişiminde hangisi avantajlı?
Üç teknoloji de kamera, konum, bildirim, biyometri, ödeme ve dosya sistemi gibi native özelliklere erişebilir. Fark erişimin nasıl uygulandığıdır.
| Teknoloji | Hazır entegrasyon | Özel entegrasyon |
|---|---|---|
| Flutter | Package veya plugin | Platform channel ya da native plugin |
| React Native | React Native/Expo modülü | Turbo Native Module veya Native Component |
| KMP | Multiplatform library veya adapter | androidMain, iosMain, interface ya da expect/actual |
Ürün özel donanım veya kapalı platform SDK'sına dayanıyorsa teknoloji seçmeden önce küçük bir native entegrasyon pilotu yapılmalıdır.
Performans açısından hangisi daha iyi?
Tek bir framework sıralaması güvenilir değildir. Scroll, animasyon, başlangıç süresi, bellek, ağ ve platform sınırı kullanımı farklı darboğazlara sahiptir. Aynı teknolojiyle iyi veya kötü mimari kurulabilir.
- Flutter: Kendi rendering sistemi özel grafik ve animasyonda kontrol sağlar; gereksiz rebuild ve pahalı çizimler yine sorun yaratır.
- React Native: New Architecture iletişim ve rendering modelini geliştirmiştir; fazla JavaScript işi ve uyumsuz modüller performansı etkileyebilir.
- KMP: Ortak Kotlin kodu hedef platform için derlenir; native UI kullanıldığında ekran platform toolkit'ine dayanır. Swift/Kotlin sınırı ve veri akışı dikkat ister.
Ekip yetkinliği seçimi nasıl değiştirir?
| Ekip profili | Daha doğal başlangıç | Neden? |
|---|---|---|
| React ve TypeScript ağırlıklı web ekibi | React Native | Dil ve component yaklaşımı tanıdıktır. |
| Android/Kotlin ağırlıklı mobil ekip | KMP | Kotlin ve domain bilgisi ortak katmana taşınabilir. |
| Yeni kurulacak tek cross-platform ekip | Flutter veya React Native | UI ve logic tek ekip tarafından sahiplenilebilir. |
| Ayrı Android ve iOS ekipleri | KMP | Platform sahipliği korunurken logic paylaşılır. |
| Özel animasyon ve tasarım odaklı ürün | Flutter | Ortak rendering yüksek görsel kontrol sağlar. |
Uzun vadeli bakım farkları nelerdir?
Bakım maliyeti yalnız ortak kod yüzdesiyle ölçülmez. Framework, paketler, native SDK'lar, işletim sistemi ve mağaza gereksinimleri düzenli güncellenir.
- Flutter: Dart, Flutter ve plugin sürümleri birlikte yönetilir.
- React Native: React, native dependencies ve npm paketleri birlikte yükseltilir.
- KMP: Kotlin, Gradle, Xcode ve Swift interop koordine edilir.
- Üçünde de: Android ve iOS release pipeline'ları ayrı doğrulanır.
Sağlıklı cross-platform mobil uygulama geliştirme süreci dependency politikası ve düzenli sürüm yükseltmeyi baştan planlar.
Mevcut native uygulamaya hangisi daha kolay eklenir?
- Flutter: Add-to-app ile belirli ekran veya akış eklenebilir.
- React Native: Brownfield entegrasyonla React Native ekranları mevcut uygulamaya dahil edilebilir.
- KMP: UI değiştirilmeden ortak domain veya data modülü eklenebilir.
Mevcut UI korunacaksa KMP logic-first pilot için doğal olabilir. Yeni özellik ortak UI ile geliştirilecekse Flutter veya React Native modülü değerlendirilebilir.
Proje türüne göre seçim matrisi
| Proje | Öne çıkan aday | Gerekçe |
|---|---|---|
| İki platformda aynı görünen yeni tüketici uygulaması | Flutter | Yüksek UI paylaşımı |
| React web ürününün yanında mobil uygulama | React Native | React/TypeScript ekip uyumu |
| Mevcut native uygulamada tekrar eden logic | KMP | UI değişmeden ortak modül eklenebilir. |
| Native platform davranışı kritik kurumsal uygulama | KMP + native UI | Platform toolkit'leri korunur. |
| Yoğun özel animasyon ve grafik | Flutter | Ortak rendering kontrolü |
| JavaScript ekosisteminde hızlı MVP | React Native | Mevcut ekip bilgisinden yararlanma |
Teknoloji seçmeden önce pilotta ne test edilmeli?
- Ürünün en zor üç özelliğini belirleyin.
- Gerçek bir native SDK entegrasyonu yapın.
- Karmaşık tasarım ekranını geliştirin.
- Liste ve animasyonu release build'de ölçün.
- Offline database senaryosunu test edin.
- Push notification, deep link ve permission akışını ekleyin.
- CI/CD üzerinden iki platformun release çıktısını üretin.
- Framework ve kritik dependency yükseltmesini prova edin.
Framework seçimini ana sayfa prototipine göre değil, ürünün en zor native entegrasyonuna ve sonraki sürüm yükseltmesine göre yapın.
Flutter ne zaman seçilmeli?
- Ortak ve güçlü UI tasarım sistemi öncelikliyse
- İki platformun ekranlarını tek ekip geliştirecekse
- Dart ve Flutter bakımına yatırım yapılabiliyorsa
- Özel çizim ve animasyon önemliyse
React Native ne zaman seçilmeli?
- Ekip React ve TypeScript konusunda güçlüyse
- Web ile mobil ekipler arasında ortak yaklaşım isteniyorsa
- Expo veya React Native ekosistemi ihtiyaçları karşılıyorsa
- Native modülleri yönetecek platform bilgisi varsa
Kotlin Multiplatform ne zaman seçilmeli?
- İş mantığı paylaşılırken UI native tutulacaksa
- Mevcut Android ve iOS uygulamasına aşamalı geçilecekse
- Kotlin bilgisi güçlü ve native ekipler korunacaksa
- Paylaşım oranı zamanla artırılacaksa
Son karar kontrol listesi
- UI aynı mı yoksa platforma özgü mü olmalı?
- Ekip Dart, TypeScript, Kotlin ve Swift'in hangilerinde güçlü?
- Kritik native SDK'lar destekleniyor mu?
- Uygulama yeni mi, mevcut native ürüne mi eklenecek?
- Gerçek cihaz performans pilotu yapıldı mı?
- Kritik paketlerin bakım durumu incelendi mi?
- CI/CD iki mağaza çıktısını üretebiliyor mu?
- En az üç yıllık mobil uygulama geliştirme ve bakım maliyeti değerlendirildi mi?
Sonuç: En iyi teknoloji ürün ve ekip uyumuna göre değişir
Flutter, React Native ve Kotlin Multiplatform aynı mimarinin farklı isimleri değildir. Flutter ortak UI ve rendering sistemiyle, React Native React/TypeScript ile native component modeliyle, KMP ise paylaşım sınırını logic ile UI arasında seçebilme esnekliğiyle ayrılır.
Flutter yüksek UI tutarlılığında; React Native React ekosisteminde; Kotlin Multiplatform native UI ile ortak business logic modelinde öne çıkar. Performans ve bakım sonucunu framework etiketi değil, mimari, dependency kalitesi, ekip yetkinliği ve gerçek cihaz testleri belirler.
Sıkça Sorulan Sorular
Flutter mı React Native mi daha hızlıdır?
Bütün uygulamalar için geçerli tek bir sıralama yoktur. Flutter kendi rendering sistemini kullanır; React Native New Architecture üzerinden JavaScript ile native bileşenleri birleştirir. Sonuç liste yapısı, animasyon, native modül, cihaz ve build moduna bağlıdır. Karar gerçek release build'de düşük ve orta segment cihazlarda açılış, frame süresi, bellek ve kritik kullanıcı akışları ölçülerek verilmelidir.
Kotlin Multiplatform Flutter ve React Native gibi UI paylaşır mı?
UI paylaşmak zorunlu değildir. Ekip yalnız domain, network ve data katmanlarını paylaşarak Android UI'ını Jetpack Compose, iOS UI'ını SwiftUI ile native geliştirebilir. Compose Multiplatform tercih edilirse ekranların önemli bölümü de ortaklaştırılabilir. Bu esneklik KMP'nin temel farkıdır.
React bilen ekip için React Native her zaman en iyi seçim midir?
React ve TypeScript bilgisi başlangıcı kolaylaştırabilir; ancak tek başına yeterli değildir. Native SDK'lar, animasyon, offline data, desteklenen paketler ve upgrade planı ayrıca incelenmelidir. React Native projesinde de Android ve iOS build, signing ve native module konuları bulunur.
Flutter uygulaması native sayılır mı?
Flutter Android ve iOS için natively compiled çıktılar üretir ve platform API'lerine erişebilir. Ancak UI'ın büyük bölümü Android veya iOS standart widget'larıyla değil Flutter'ın kendi widget ve rendering sistemiyle oluşturulur. Bu, özel ve tutarlı tasarım için avantaj sağlayabilir.
Mevcut native uygulamaya hangi teknoloji daha kolay eklenir?
UI korunacak ve business logic paylaşılacaksa KMP ortak modülü doğal bir başlangıç olabilir. Yeni bir ekran ortak UI ile geliştirilecekse Flutter add-to-app veya React Native brownfield entegrasyonu değerlendirilebilir. Gerçek uygulamada sınırlı pilot en güvenilir kararı verir.
Uzun vadeli bakım için hangisi daha iyidir?
Bakım sonucu framework adından çok dependency politikası ve ekip sahipliğine bağlıdır. Flutter'da Dart ve plugin'ler; React Native'de React, native bağımlılıklar ve npm paketleri; KMP'de Kotlin, Gradle, Xcode ve Swift interop birlikte yönetilir. Üçü de düzenli upgrade ve platform testi gerektirir.