Expo vs Bare React Native Karşılaştırması

Node.js LTS ile kurulan, CNG sayesinde geri dönülebilir yönetilen RN framework'ü

VS
Bare React Native

Native toolchain üzerinde tam kontrol veren çekirdek React Native kurulumu

16 dk okumaCross-Platform

Hızlı Karar

2026'da varsayılan cevap Expo + CNG: expo prebuild native klasörleri yeniden ürettiği için "eject" tek yönlü bir kapı olmaktan çıktı, config plugin sistemi native yapılandırmanın çoğunu karşılıyor ve EAS Build'in ücretsiz katmanı küçük-orta projeye yetiyor. Bare React Native'i haklı çıkaran nedenler dar ama gerçek: EAS'ın desteklemediği özel toolchain, on-prem CI zorunluluğu ya da çok nadir bir native SDK. Bu üçü yoksa Expo ile başla.

ExpoBare React Native
Tam sonucu oku

Puan Karşılaştırması

Grafik yükleniyor...

Detaylı Puanlama

Detaylı Puanlama: Expo ve Bare React Native — kategori bazında 10 üzerinden puanlar
KategoriExpoBare React Native
Performans
8/10
8/10
Öğrenme Kolaylığı
9/10
6/10
Ekosistem
8/10
8/10
Topluluk
8/10
8/10
İş Pazarı
7/10
8/10
Gelecek
8/10
7/10

Artıları & Eksileri

Expo

Artıları

  • Kurulum için yalnız Node.js LTS gerekir — Xcode/Android Studio olmadan Expo Go/Snack ile anında test
  • CNG (expo prebuild) ile native klasörler tekrar üretilebilir — 'eject' artık tek yönlü bir kapı değil
  • Config plugin sistemi native projeyi programatik ve tekrarlanabilir şekilde yapılandırır
  • EAS Update ile native katmandan ayrı, anında OTA JS güncellemesi
  • EAS Build Free plan ayda 15+15 build ve 1.000 MAU update içerir — küçük projeye maliyetsiz başlangıç
  • EAS Workflows ile GitHub event/cron tetikli, app config'ten otomatik native build
  • Sürüm yükseltme npm bağımlılığı güncelleme + prebuild --clean kadar basit
  • React Foundation kurucu üyesi olarak RN ekosistemiyle yakın uyum

Eksileri

  • Expo SDK'ları RN çekirdeğine bir sürüm geriden gelir (SDK 57 → RN 0.86, RN 0.87 değil) — en yeni RN özelliğine anında erişemezsin
  • Expo Go (iOS) 3 Eylül 2026'dan beri terminal + uygulamada login gerektiriyor
  • Çok nadir/özel native SDK'lar için config plugin yazmak ek efor gerektirebilir
  • EAS Free plan aşıldığında Starter ($19/ay) veya Production ($199/ay) ücretli katmana geçiş gerekir
  • EAS bulut-öncelikli tasarlandığı için kurumsal on-prem CI zorunluluğuyla uyum zayıf
  • Native klasörlere elle dokunup sonra prebuild çalıştırmak değişiklikleri sessizce siler (config plugin'e taşınmamışsa)

En Uygun

Yeni React Native projelerine hızlı başlamak isteyen ekiplerKüçük-orta ölçekli, EAS bulut CI/CD'sini kullanabilecek projelerMVP/prototip geliştirme ve hızlı iterasyonOTA update ihtiyacı yüksek, mağaza onayı beklemeden JS düzeltmesi göndermek isteyen uygulamalarNative ihtiyacı standart config plugin ekosistemiyle (kamera, bildirim, konum vb.) karşılanan projeler

Bare React Native

Artıları

  • Native projeye (Xcode/Gradle) doğrudan ve sınırsız erişim — hiçbir soyutlama katmanı yok
  • RN'nin her minör sürümünü (0.85, 0.86, 0.87...) hemen, Expo SDK döngüsünü beklemeden alabilirsin
  • EAS'a hiç bağımlı değilsin — istediğin herhangi bir CI/CD servisini veya on-prem pipeline'ı kurabilirsin
  • Config plugin ekosistemiyle sınırlı kalmadan, herhangi bir native SDK'yı doğrudan entegre edebilirsin
  • 126.507 GitHub yıldızı ve 25.238 fork ile geniş ve olgun topluluk desteği
  • MIT lisanslı, açık kaynak, vendor bağımlılığı yok

Eksileri

  • Kurulum için Xcode + CocoaPods, Android Studio + SDK + Gradle zorunlu — Expo'dan belirgin şekilde daha uzun ilk kurulum
  • Native ios/android klasörleri kalıcı; her sürüm yükseltmesi Upgrade Helper ile elle diff uygulamayı gerektirir
  • OTA update için hazır bir çözüm yok — expo-updates'i manuel entegre etmek veya alternatif kurmak gerekir
  • CI/CD'yi (EAS dahil) kullanmak istesen bile native build credentials'ı elle senkronize etmen gerekir
  • Native paketin ek yapılandırması (Info.plist izinleri, Manifest girdileri, Gradle ayarları) elle yapılır — config plugin'in tekrarlanabilirliği yok
  • Yeni katılan bir geliştirici için toolchain kurulumu, ilk build'e kadar geçen süreyi belirgin uzatır

En Uygun

EAS'ın desteklemediği özel toolchain veya build ortamı gerektiren projelerKurumsal on-prem/self-hosted CI zorunluluğu olan ekiplerConfig plugin ile kapsanamayan, çok nadir veya çok özel native SDK entegrasyonu gerektiren uygulamalarNative koda sürekli ve derin müdahale ihtiyacı olan büyük, karmaşık uygulamalarRN çekirdeğinin en güncel sürümünü SDK döngüsünü beklemeden kullanmak isteyen ekipler

Kod Karşılaştırması

Expo
// Expo — app.config.ts + yerel config plugin ile native izin ekleme (TypeScript)

// plugins/withCameraUsage.ts — Info.plist'e kamera izni ekleyen config plugin
import { ConfigPlugin, withInfoPlist } from "expo/config-plugins";

const withCameraUsage: ConfigPlugin = (config) =>
  withInfoPlist(config, (config) => {
    config.modResults.NSCameraUsageDescription =
      "Profil fotoğrafı çekmek için kameraya erişim gerekiyor";
    return config;
  });

export default withCameraUsage;

// app.config.ts — plugin dosya YOLUYLA referanslanır (npm i -D tsx gerekir)
import "tsx/cjs";
import { ExpoConfig, ConfigContext } from "expo/config";

export default ({ config }: ConfigContext): ExpoConfig => ({
  ...config,
  name: "MyApp",
  slug: "my-app",
  version: "1.0.0",
  plugins: [["./plugins/withCameraUsage.ts"], "expo-router", "expo-updates"],
  updates: { url: "https://u.expo.dev/your-project-id" },
  runtimeVersion: { policy: "appVersion" },
});

// Terminal: native klasörleri üret (CNG) ve uygula
// npx expo prebuild --clean

// EAS Build çalıştır ve OTA update yayınla
// eas build --platform all --profile production
// eas update --branch production --message "Bug fix: login crash"
Bare React Native
// Bare React Native — paket kurulumu + elle native yapılandırma (TypeScript)

// 1) Paketi kur: autolinking bağlar, pod'ları çek, yeniden derle
// $ npm install react-native-vision-camera react-native-nitro-modules react-native-nitro-image
// $ npx pod-install
// $ npm run ios     # Android: npm run android

// 2) İzinleri ELLE ekle — bu adım autolinking'e dahil değildir
// ios/MyApp/Info.plist:
// <key>NSCameraUsageDescription</key>
// <string>Profil fotoğrafı çekmek için kameraya erişim gerekiyor</string>
// android/app/src/main/AndroidManifest.xml:
// <uses-permission android:name="android.permission.CAMERA" />

// 3) JS tarafında kullanım (paylaşılan kod)
import React, { useEffect } from "react";
import { Camera, useCameraPermission } from "react-native-vision-camera";

function ProfileCamera() {
  const { hasPermission, requestPermission } = useCameraPermission();

  useEffect(() => {
    if (!hasPermission) requestPermission();
  }, [hasPermission, requestPermission]);

  return <Camera style={{ flex: 1 }} isActive={true} device="back" />;
}

export default ProfileCamera;

// 4) Sürüm yükseltme (0.86 -> 0.87): bunun bir CLI komutu YOKTUR
// Upgrade Helper (web): https://react-native-community.github.io/upgrade-helper/
// -> diff'i Podfile.lock, build.gradle, AppDelegate.swift üzerinde elle uygula

// 5) Kendi CI pipeline'ın (GitHub Actions, özet)
// - run: npx pod-install
// - run: xcodebuild -workspace ios/MyApp.xcworkspace -scheme MyApp -configuration Release

Sonuç

2026'da varsayılan cevap Expo + CNG: expo prebuild native klasörleri yeniden ürettiği için "eject" tek yönlü bir kapı olmaktan çıktı, config plugin sistemi native yapılandırmanın çoğunu karşılıyor ve EAS Build'in ücretsiz katmanı küçük-orta projeye yetiyor. Bare React Native'i haklı çıkaran nedenler dar ama gerçek: EAS'ın desteklemediği özel toolchain, on-prem CI zorunluluğu ya da çok nadir bir native SDK. Bu üçü yoksa Expo ile başla.

Ücretsiz Danışmanlık Al
SSS

Sıkça Sorulan Sorular

2026'da varsayılan cevap Expo + CNG'dir: config plugin sistemi çoğu native modülü kapsar, EAS Build'in ücretsiz katmanı (15+15 build/ay) küçük-orta projeye yeter ve expo prebuild sayesinde native koda inmek artık geri dönüşü olmayan bir karar değil. Bare RN'yi haklı çıkaran gerçek nedenler: EAS'ın desteklemediği özel toolchain, kurumsal on-prem CI zorunluluğu veya config plugin ile kapsanamayan çok nadir bir native SDK.

Giriş

React Native projesine başlarken ilk soru artık "hangi UI kütüphanesi" değil, "hangi kurulum modeli": Expo mu, bare (çıplak) React Native mi? React Native 0.87 (11 Ağustos 2026) Strict TypeScript API'yi varsayılan yaptı ve minimum toolchain'i (Node 22, AGP 9, Kotlin 2.0+) yükseltti — bare projede bu yükseltmeyi sen elle yaparsın. Expo tarafında SDK 57 (30 Haziran 2026) ve EAS Observe'un genel kullanıma açılması (20 Ağustos 2026) araç setini genişletti; 3 Eylül 2026'dan itibaren de Expo Go'nun iOS sürümünde zorunlu login geldi. Eskiden "managed" seçmek native koda erişimden vazgeçmek demekti; "eject" tek yönlü bir kapıydı. Bugün Continuous Native Generation (CNG) ve expo prebuild ile native ios/android klasörleri istendiğinde üretilip silinebiliyor. Bare React Native ise tam kontrolü ve EAS'a bağımlı olmamayı garanti ediyor — bedeli, native toolchain'i elle kurup yönetmek. Bu karşılaştırma RN blogu, Expo changelog/fiyatlandırma sayfaları ve GitHub API verilerine dayanıyor.

Karşılaştırma Matrisi

Karşılaştırma Matrisi: Expo / Bare React Native
ÖzellikExpoBare React Native
Native modül entegrasyonuAutolinking + config pluginAutolinking + elle Info.plist/Gradle
Native klasör yönetimiCNG (prebuild ile üretilir) (Öne çıkan)Kalıcı, elle bakım
Kurulum gereksinimiYalnız Node.js LTS (Öne çıkan)Xcode + Android Studio + Gradle
Sürüm yükseltme akışınpm update + prebuild --clean (Öne çıkan)Upgrade Helper ile elle diff
Güncel çekirdek sürümSDK 57 → RN 0.86RN 0.87.1 (npm) (Öne çıkan)
EAS Build ücretsiz katman15+15 build/ay, 1K MAU update (Öne çıkan)Kullanılabilir ama native senkronizasyon elle
OTA updateEAS Update varsayılan entegre (Öne çıkan)expo-updates manuel entegrasyon gerekir
CI/CD (EAS Workflows)App config'ten otomatik native build (Öne çıkan)Native credentials elle senkron ya da kendi pipeline
Hızlı önizleme (Expo Go)Var, iOS'ta 3 Eyl 2026'dan beri login şart (Öne çıkan)Yok
Vendor lock-in / çıkış maliyetiDüşük (prebuild geri dönülebilir)Yok (zaten bağımsız) (Öne çıkan)
Kurumsal on-prem CI zorunluluğuEAS bulut-öncelikli, zor uyumTam esnek, kendi CI'ını kurarsın (Öne çıkan)
Özel/nadir native SDK entegrasyonuConfig plugin yazımı gerekebilirDoğrudan native proje düzenlemesi (Öne çıkan)
İlk kuruluş yılı2015 (650 Industries)2015 (Meta, RN çekirdeği)
GitHub yıldızı52.060 (expo/expo)126.507 (react/react-native) (Öne çıkan)
LisansMITMIT

Derinlemesine İnceleme

Expo

Genel Bakış

Expo, 2015'te 650 Industries (Palo Alto) tarafından kurulan ve React Native üzerine inşa edilmiş bir framework + araç seti. React Foundation'ın kurucu üyelerinden biri olarak RN ekosistemiyle yakın çalışıyor. Tarihsel olarak 'managed workflow' native koda erişimi kısıtlıyordu ve 'eject' geri dönüşü zor bir işlemdi; expo prebuild ile bu model Continuous Native Generation'a (CNG) evrildi — resmi doküman 'eject etme' ve 'managed vs bare workflow' kavramlarını kullanımdan kalkmış sayıyor; native klasörler kaynak değil, app config'ten üretilen tekrarlanabilir çıktı. 2026'da güncel sürüm SDK 57 (30 Haziran 2026, RN 0.86 taşıyor); EAS Build, Update, Workflows ve yeni GA olan Observe (20 Ağustos 2026) ile uçtan uca bir bulut platformu sunuyor. Expo Go, native SDK kurulmadan anında test için hâlâ en hızlı yol, ama 3 Eylül 2026'dan itibaren iOS'ta login zorunlu (development build'ler muaf).

Ekosistem

Paket yöneticisi
npm / Yarn / pnpm (Expo CLI ile)
Geliştirme ortamı
VS Code + Expo ToolsAndroid Studio (native build)Xcode (native build)
Popüler kütüphaneler
expo-routerexpo-updatesexpo-notificationsexpo-cameraexpo-modules-core
GitHub yıldızı
52,060

Bare React Native

Genel Bakış

React Native, Meta (eski Facebook) tarafından 26 Nisan 2015'te yayınlandı ve 'bare' (çıplak) kurulum onun çekirdek, yönetilmemiş halidir — herhangi bir framework katmanı (Expo dahil) olmadan doğrudan native Xcode/Gradle projeleri üzerine kurulur. Repo react/react-native altında barındırılıyor, 126.507 GitHub yıldızı ve 25.238 fork ile geniş bir topluluğa sahip, MIT lisanslı. 2026'da güncel kararlı sürüm 0.87.1 (11 Ağustos 2026 duyurusu): Strict TypeScript API varsayılan oldu, minimum toolchain Node 22/AGP 9/Kotlin 2.0+'a yükseldi, deneysel Swift Package Manager desteği eklendi. New Architecture, RN 0.76 (23 Ekim 2024) ile varsayılan oldu ve aynı duyuruda production'a hazır ilan edildi. Bare kurulumda native klasörler projenin kalıcı parçasıdır — CNG gibi bir 'yeniden üretim' katmanı yok, her sürüm yükseltmesinin native diff'i Upgrade Helper'a bakılarak elle uygulanır.

Ekosistem

Paket yöneticisi
npm / Yarn / pnpm + CocoaPods (iOS) + Gradle (Android)
Geliştirme ortamı
VS CodeXcode (native build)Android Studio (native build)
Popüler kütüphaneler
react-navigationreact-native-reanimatedreact-native-gesture-handlerreact-native-vision-camera
GitHub yıldızı
126,507

Teknik Analiz

Native Modül Ekleme: Config Plugin vs Elle Native Yapılandırma

Expo'da native koda dokunma ihtiyacı iki yoldan çözülür: native kod içeren npm paketleri Expo Autolinking ile otomatik bağlanır; ek native yapılandırma (Info.plist izinleri, Android manifest girdileri, Gradle ayarları) gerektiren paketler için bir config plugin yazılır ya da paketin kendi plugin'i kullanılır. Resmi tanım net: bir config plugin, prebuild sürecinde oluşturulan native projeyi varsayılan app config props'larının ötesinde otomatik yapılandırmana izin verir — yani her prebuild çalıştığında aynı native proje yeniden üretilir. Bare React Native'de de native paketler autolinking ile bağlanır: resmi dokümantasyondaki akış npm install <paket> + npx pod-install + uygulamayı yeniden derlemekten ibarettir, elle Podfile ya da Gradle girdisi yazmazsın. Elle kalan şey yapılandırmadır: Info.plist izin anahtarları, AndroidManifest girdileri, Gradle ayarları. Bunlar native klasörlerin içinde yaşadığı için her RN sürüm yükseltmesinde elle korunmaları gerekir. Kısacası fark bağlamada değil, yapılandırmanın nerede durduğunda: Expo'da "bir kere config plugin yaz, her prebuild'de uygulanır"; bare RN'de "her native yapılandırmayı projede tut ve yükseltmelerde koru".

CNG/Prebuild: Native Klasörleri Sıfırdan Üretmek

Continuous Native Generation (CNG), Expo'nun native klasörleri "kaynak" değil "derlenmiş çıktı" olarak ele almasıdır. npx expo prebuild --clean çalıştırdığında android ve ios klasörleri app config'ine (app.json/app.config.js) ve yüklü config plugin'lere göre sıfırdan üretilir. Resmi dokümantasyon bunun pratik sonucunu şöyle özetliyor: RN sürüm yükseltme süreci artık yalnızca npm bağımlılıklarını ve app config'i güncelleyip prebuild --clean'i yeniden çalıştırmaktan ibaret. Native klasörler git'e commit'lenmeyebilir (.gitignore), CI her build'de onları yeniden üretir. Bare React Native'de android/ios klasörleri projenin kalıcı, elle bakımı yapılan bir parçasıdır. React Native'in web tabanlı "Upgrade Helper" aracının var olma sebebi tam olarak bu: her minör sürüm arasındaki native dosya farklarını (Podfile, build.gradle, AppDelegate) elle uygulaman gerekir. Bu, daha fazla şeffaflık sağlar (native projede tam olarak ne olduğunu her zaman görürsün) ama sürüm yükseltmelerini CNG'ye göre belirgin şekilde daha emek yoğun hale getirir — özellikle RN'nin kendisi her birkaç ayda bir minör sürüm çıkardığı için (0.85 Nisan, 0.86 Haziran, 0.87 Ağustos 2026).

EAS Build/Update Maliyeti ve Ücretsiz Katman

EAS'ın Free planı ayda 15 Android + 15 iOS build (toplam 30), 1.000 MAU'ya kadar OTA update gönderimi ve 100 GiB edge bandwidth içeriyor — düşük öncelikli build kuyruğuyla. Küçük-orta ölçekli, haftada birkaç kez build alan bir proje için bu genelde yeterli. Ekip büyüdüğünde veya sık CI tetiklendiğinde iki basamak var: Starter ($19/ay + $45 build kredisi, yüksek öncelikli kuyruk, 3.000 MAU) ve Production ($199/ay + $225 build kredisi, 2 eşzamanlı build, 50.000 MAU, SSO, öncelikli destek). Aşım ücretleri $0,10/GiB bandwidth ve $0,05/GiB depolama şeklinde. Önemli nüans: EAS Build ve EAS Update, Expo'ya özgü değil — resmi dokümantasyon EAS Workflows'u "React Native ve Expo uygulamaları için" bir CI/CD servisi olarak tanımlıyor. Yani bare RN projesi de EAS'ı kullanabilir. Ancak CNG olmadığı için native proje durumunu (build credentials, native yapılandırma) EAS'a manuel senkronize etmen gerekir; Expo projelerinde bu senkronizasyon app config üzerinden otomatik akar. Bare RN'de EAS kullanmayıp kendi CI'ını (Fastlane, Bitrise, GitHub Actions + Xcode/Gradle script'leri) sıfırdan kurmak da yaygın bir tercih — bunun maliyeti zaman ve bakım yüküdür, doğrudan bir abonelik ücreti değildir.

OTA Güncelleme ve Expo Go Login Değişikliği

EAS Update, bir build'i iki katmana ayırır: binary'ye gömülen native katman ve her ikisi arasında "değiştirilebilir" olan update katmanı — küçük bug fix'ler ve JS değişiklikleri kanal (channel) ve deployment mekanizmasıyla native sürüm yükseltmesi beklemeden kullanıcıya ulaşır. expo-updates kütüphanesi bare RN projesine de manuel entegre edilebilir (Expo modülleri bare RN'de de kullanılabilir), ama varsayılan/otomatik değildir — geliştirici kendi OTA çözümünü kurar. 3 Eylül 2026'dan itibaren Expo Go'nun iOS sürümünde önemli bir değişiklik geldi: proje çalıştırmak için hem terminaldeki Expo CLI'da hem Expo Go uygulamasında login zorunlu hale geldi. Bu ayrım kritik — resmi changelog açıkça development build'lerin bu gereksinimden muaf olduğunu ve şu an yalnızca iOS'taki en güncel Expo Go sürümünü etkilediğini belirtiyor. Yani EAS Build ile üretilmiş bir development veya production build'in çalışması login şartına bağlı değil; yalnızca hızlı prototipleme aracı olan Expo Go'da, sadece iOS'ta bu sürtünme var. Bare RN projelerinde böyle bir "hızlı önizleme uygulaması" katmanı hiç yok, dolayısıyla bu tartışma ona dokunmuyor.

New Architecture ve RN 0.87 Strict TypeScript Uyum Hızı

React Native 0.87 (11 Ağustos 2026), Strict TypeScript API'yi varsayılan JavaScript API'si yaptı ve minimum toolchain gereksinimlerini Node.js 22, Android Gradle Plugin 9 ve Kotlin 2.0+'a yükseltti; ayrıca deneysel Swift Package Manager desteği eklendi. New Architecture ise 0.68'de deneysel opt-in olarak başlamıştı; RN 0.76 (23 Ekim 2024) ile varsayılan hale getirildi ve aynı duyuruda production kullanımına hazır ilan edildi — yani 0.87'de her iki kurulum modeli de onu varsayılan alıyor. Burada önemli bir ayrım var: Expo SDK'ları belirli bir RN çekirdek sürümüne kilitli çıkar, yani SDK 57 (30 Haziran 2026) RN 0.87'yi değil RN 0.86'yı taşıyor. Bu, Expo projelerinin RN 0.87'nin Strict TS varsayılanını henüz almadığı, bir sonraki SDK sürümünü beklemesi gerektiği anlamına geliyor — resmi bir taahhüt tarihi yok. Expo projeleri bu tür yükseltmeleri SDK güncellemesiyle "paket halinde" alırken, bare RN projeleri her minör RN sürümünü (0.85→0.86→0.87) bağımsız ve anında yükseltebilir. Deep import kullanan üçüncü parti paketler Strict TS'e geçişte tip hatası verecek — bare RN'de bunu hemen, Expo'da SDK yükseltmesiyle birlikte deneyimlersin.

CI/CD: EAS Workflows vs Kendi Pipeline'ın

EAS Workflows; Android/iOS binary build, OTA update yayınlama, mağazalara gönderim, E2E test çalıştırma ve EAS Hosting'e web deploy gibi tekrarlanan işleri otomatikleştiren bir CI/CD servisi. Yönetilen bulut ortamlarında çalışır, GitHub olaylarından (push, PR) veya cron zamanlamalarından tetiklenebilir. Resmi dokümantasyon bunun hem React Native hem Expo projeleri için kullanılabildiğini belirtiyor — yani bare RN projesi de EAS Workflows'a bağlanabilir. Fark, "hazır paket" job'ların tasarımında ortaya çıkıyor: Expo/CNG projelerinde EAS, app config'i okuyarak native build sürecini uçtan uca yönetebilir. Bare RN projesinde native proje durumu (imzalama sertifikaları, provisioning profile, Gradle yapılandırması) EAS'a elle senkronize edilmeli — CNG'nin otomatik ürettiği bilgiyi burada sen sağlarsın. Alternatif olarak bare RN ekipleri sıklıkla Fastlane + Bitrise veya GitHub Actions + kendi Xcode/Gradle script'leriyle sıfırdan bir pipeline kurar; bu, EAS'ın sunduğu "pre-packaged" kolaylığı kaybettirir ama pipeline üzerinde tam kontrol ve kurumsal on-prem gereksinimlerine (ör. self-hosted runner zorunluluğu) uyum sağlar.

Vendor Lock-in ve Kurulumdan İlk Build'e Geçen Süre

"Eject" kavramını resmi doküman kullanımdan kalkmış sayıyor; tüm Expo projeleri artık Continuous Native Generation kullanıyor ve bu işin yerini expo prebuild aldı. Bu değişimin pratik anlamı: native klasörlere elle dokunmadığın sürece, prebuild her zaman aynı native projeyi yeniden üretebilir — yani "managed'dan çıkış" artık tek yönlü bir kapı değil, tekrarlanabilir bir işlem. Config plugin kaldırırsan native klasörler onsuz yeniden üretilir. Tersi yönde de esneklik var: expo-modules-core sayesinde Expo modülleri bare RN projelerine de sonradan eklenebiliyor — yani "bare'den Expo tooling'ine" geçiş de tek yönlü bir kapı değil. Kurulum eşiği farkı somut: Expo projesi için tek sistem gereksinimi Node.js LTS — npx create-expo-app sonrası Expo Go veya Snack üzerinden native SDK kurulu olmadan anında test edebilirsin. Bare RN'de resmi dokümantasyon seni "environment-setup" bölümüne yönlendiriyor: Xcode + CocoaPods, Android Studio + SDK + Gradle kurulumu ilk build'in ön koşuludur. Bu fark yalnız ilk günü değil, takıma yeni katılan bir geliştiricinin ve CI ortamı kuran kişinin her seferinde ödediği kurulum maliyetini de belirler.

Hangi Senaryoda Hangisi

Yeni bir React Native projesine sıfırdan başlıyorsun, özel toolchain veya on-prem CI zorunluluğu yok

Öneri: Expo + CNG

npx create-expo-app ile dakikalar içinde çalışır bir proje, EAS Free plan (15+15 build/ay) küçük-orta projeye yeterli, gerektiğinde prebuild ile native koda inebilirsin.

Kurumsal politika CI'ın self-hosted/on-prem çalışmasını zorunlu kılıyor

Öneri: Bare React Native

EAS bulut-öncelikli tasarlandığı için on-prem zorunluluğuyla doğrudan çelişir; kendi Fastlane/Jenkins pipeline'ını kurman gerekir.

Config plugin ile kapsanamayan, çok nadir bir native SDK'yı entegre etmen gerekiyor

Öneri: Bare React Native (veya Expo + custom dev client)

Expo Go bu SDK'yı çalıştıramaz; config plugin yazmak mümkün olmayabilir. Native projeye doğrudan erişim gerektiren entegrasyonlarda bare RN veya en azından EAS development build zorunlu.

Mevcut bir bare RN projesi var, native klasör bakımı yük haline geldi

Öneri: Expo modüllerini kademeli ekle, CNG'ye geçişi değerlendir

expo-modules-core sayesinde Expo'nun OTA update, bildirim gibi modülleri bare projeye eklenebilir; CNG'ye tam geçiş büyük refactor gerektirir, aceleye getirilmemeli.

Ekip küçük, hızlı MVP/prototip lazım, App Store'a çıkış öncelik değil

Öneri: Expo Go ile geliştir

Native toolchain kurulumu olmadan telefonda anında test; iOS'ta 3 Eylül 2026'dan beri login gerekiyor ama bu tek seferlik bir sürtünme, development build'e geçince ortadan kalkıyor.

RN 0.87 Strict TypeScript API'ye hemen geçmen gerekiyor

Öneri: Bare React Native'i değerlendir (ya da bir sonraki SDK'yı bekle)

Bare RN her minör sürümü bağımsız yükseltir; Expo SDK'ları RN çekirdeğine kilitli çıktığı için Strict TS varsayılanı ancak bir sonraki SDK sürümünde gelir (tarih taahhüdü yok). Sürüm kadansı senin için bloke edici değilse beklemek de geçerli bir seçenek.

Yaygın Tuzaklar

  • Native ios/android klasörlerini elle düzenleyip sonra expo prebuild --clean çalıştırmak — tüm elle yapılan değişiklikler silinir

    Expo

    Çözüm

    Native değişikliği kalıcı yapmak istiyorsan config plugin yaz; prebuild her çalıştığında bu plugin'i otomatik uygular, elle düzenleme kaybolmaz.

  • Expo Go'da (iOS) 3 Eylül 2026 sonrası login yapılmadığı için projenin çalışmadığını sanıp saatler harcamak

    Expo

    Çözüm

    Development build kullanıyorsan bu gereksinim yok; Expo Go ile test ediyorsan hem terminaldeki Expo CLI'da hem telefon uygulamasında giriş yap.

  • Expo SDK'sının hangi RN çekirdek sürümünü taşıdığını kontrol etmeden 'RN 0.87 özelliği Expo'da var' varsaymak

    Expo

    Çözüm

    Her SDK sürümünün changelog'unda taşıdığı RN sürümünü doğrula (ör. SDK 57 → RN 0.86, RN 0.87 değil); yeni RN özelliği bekliyorsan bir sonraki SDK'yı takip et.

  • Bare RN'de minör sürüm yükseltmelerini (0.85→0.86→0.87) erteleyip birikmiş, çok adımlı bir yükseltmeyle karşılaşmak

    Bare React Native

    Çözüm

    React Native Upgrade Helper'ı her minör sürümde kullan; birikmiş yükseltme native dosya çakışmalarını katlanarak artırır.

  • EAS'ı bare RN projesinde kullanırken native build credentials'ı ve yapılandırmayı manuel senkronize etmeyi unutmak

    Bare React Native

    Çözüm

    CNG olmadığı için EAS, native proje durumunu app config'ten okuyamaz; imzalama sertifikaları ve provisioning profile'ları EAS CLI ile elle yükleyip güncel tutmalısın.

Geçiş Kılavuzu

Bare React Native → Expo (CNG)

Tahmini süre: Küçük proje (5-10 native özelleştirme): 1-2 hafta. Orta ölçekli (çok sayıda 3. parti native modül): 3-6 hafta. Karmaşık/çok özel native entegrasyonlu büyük proje: 2-3 ay, bazı modüller CNG'ye taşınamayabilir.
  1. 11. Projeye expo paketini ve expo-modules-autolinking'i ekle, npx install-expo-modules@latest ile temel entegrasyonu kur
  2. 22. Mevcut native özelleştirmelerini (Info.plist izinleri, AndroidManifest girdileri, Gradle bağımlılıkları) envanterle — her biri için bir config plugin karşılığı olup olmadığını kontrol et
  3. 33. Karşılığı olmayan native değişiklikler için özel bir config plugin yaz (withInfoPlist, withAndroidManifest gibi mods API'leri ile)
  4. 44. app.json/app.config.js'i oluştur, plugin'leri plugins dizisine ekle
  5. 55. npx expo prebuild --clean çalıştır ve üretilen native projenin build alıp almadığını doğrula (Xcode + Android Studio'da)
  6. 66. CI pipeline'ını EAS Build'e taşı veya mevcut pipeline'ı app config'i okuyacak şekilde güncelle
  7. 77. OTA update ihtiyacın varsa expo-updates'i entegre et, EAS Update kanallarını yapılandır
  8. 88. Native klasörleri .gitignore'a ekle (artık üretilen çıktı), takıma prebuild akışını dokümante et

Gelecek Öngörüsü

Expo

Expo'nun yol haritası hızlanıyor: SDK 57 (30 Haziran 2026), EAS Observe'un genel kullanıma açılması (20 Ağustos 2026, performans/hata izleme için 100K-500K event/ay katmanları) ve config plugin ekosisteminin genişlemesi CNG'yi daha az istisnalı hale getiriyor. Bir sonraki SDK sürümünün RN 0.87'nin Strict TypeScript varsayılanını ne zaman taşıyacağı resmi olarak açıklanmadı — bu, Expo'nun 'RN çekirdeğine bir sürüm geriden' gelme deseninin sürebileceğini gösteriyor. Expo changelog'u, Expo Go'daki login zorunluluğunun ileride Android sürümüne de genişletileceğini söylüyor; bir tarih verilmedi.

Bare React Native

React Native çekirdeği bağımsız bir tempoda ilerliyor: 0.85 (Nisan 2026, yeni animasyon backend'i), 0.86 (Haziran 2026, edge-to-edge + DevTools), 0.87 (Ağustos 2026, Strict TS + deneysel SwiftPM) — yaklaşık iki ayda bir minör sürüm. New Architecture 0.76'dan (23 Ekim 2024) beri varsayılan olduğu için yol haritasının odağı mimari geçişten sürüm temposuna kaydı. Bare RN'nin trendi net: her sürümü hemen alma özgürlüğü, karşılığında her yükseltmeyi Upgrade Helper ile elle uygulama yükü.

Altın Bilgi

En değerli çıkarım şu: "Expo mu bare RN mi" sorusunu bir kere ve kalıcı olarak cevaplaman gerekmiyor. CNG sayesinde bu artık geri dönüşü olan bir karar. Expo ile başla, npx expo prebuild her zaman elinde durur — native koda inip config plugin yazabilirsin; bir sonraki prebuild --clean seni tekrar temiz bir native projeye döndürür (elle native dosyalara dokunmadığın sürece). Tersi yönde de kapı açık: expo-modules-core ile Expo'nun OTA update veya bildirim modüllerini bare bir projeye sonradan ekleyebilirsin. Asıl risk, "geri dönemem" korkusuyla baştan bare RN seçip Xcode/Gradle bakım yükünü gereksiz yere üstlenmek.

İlgili Blog Yazıları

Tüm Yazıları Gör

İlgili Projeler

Tüm Projeleri Gör
Tüm Karşılaştırmalar

İlgili İçerik