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.

İlgili Blog Yazıları

Tüm Yazıları Gör

İlgili Projeler

Tüm Projeleri Gör

İlgili İçerik