# React Native New Architecture 2026: Fabric, TurboModules ve Bridgeless Mode
React Native, 2024 yılında 0.76 sürümüyle birlikte tarihin en büyük mimarsal dönüşümünü tamamladı. "New Architecture" olarak adlandırılan bu dönüşüm, 6 yıllık bir yeniden yazım sürecinin ürünü. 2026 itibarıyla New Architecture default olarak aktif geliyor ve eski "bridge" mimarisi deprecated statüsüne girdi.
Bu yazıda New Architecture'ın tüm bileşenlerini production perspektifinden inceleyeceğiz: JavaScript Interface (JSI), Fabric renderer, TurboModules, Codegen, bridgeless mode ve Hermes engine iyileştirmeleri. Ayrıca migration sürecinin gerçekçi bir anlatısını ve third-party kütüphane uyumluluk durumunu ele alacağız.
Pro Tip: New Architecture migration'ına başlamadan öncenpx react-native infoçıktısını kaydedin ve tüm third-party native modüllerinizi listeyin. Migration sürecinde en büyük zaman harcayan kısım genellikle JavaScript/TypeScript kodunuzu değil, native modüllerinizi güncellemek oluyor. Özellikle eskirequireNativeComponentkullanımlarını tespit edin.
İçindekiler
- Old Bridge Mimarisi: Ne Vardı, Neden Değişti?
- JSI: JavaScript Interface ve Synchronous Calls
- Fabric Renderer: C++ Core ve Concurrent Rendering
- TurboModules: Lazy Loading ve Type Safety
- Codegen: TypeScript'ten Native Interface'e
- Hermes 2026: Octane Benchmark ve JIT
- Bridgeless Mode: Migration Rehberi
- Backward Compatibility ve Interop Layer
- Android Gradle ve iOS Pod Güncellemeleri
- Third-Party Kütüphane Migration Durumu
- Expo SDK 52 ve New Architecture
- Performans Kazanımları: Gerçek Metrikler
- Debugging: Hermes + Flipper + React DevTools
- Production Rollout Stratejisi
- Gelecek: React Native 2027 Yol Haritası
Old Bridge Mimarisi: Ne Vardı, Neden Değişti?
React Native'in orijinal mimarisini anlamak, New Architecture'ın neden bu kadar önemli olduğunu kavramak için gerekli.
Eski Mimari Sorunları:
Asenkron Bridge: JavaScript ve native taraf arasındaki tüm iletişim asenkrondu. Bu, UI güncellemelerinde frame drop'lara yol açıyordu. Kullanıcı scroll ederken native taraf JavaScript'e event gönderiyor, JavaScript hesaplama yapıyor, sonucu bridge üzerinden geri gönderiyor ve native UI güncelleniyor. Bu döngü her frame'de tekrarlanıyordu.
JSON Serialization: Her bridge iletişimi JSON serialize/deserialize gerektiriyordu. Büyük veri listelerinde bu işlem ciddi CPU yükü yaratıyordu. 1000 elementli bir list render etmek, binlerce JSON parse işlemi anlamına geliyordu.
Shadow Thread: React Native'in layout engine'i (Yoga) ayrı bir thread'de çalışıyordu. JavaScript thread, Shadow thread ve Main thread arasındaki senkronizasyon karmaşıklaştı ve race condition'lara zemin hazırladı.
Batch Updates: UI güncellemeleri batch halinde gönderiliyordu. Bu, bazı durumlarda görsel flickering ve tutarsız animation'lara yol açıyordu.
New Architecture bu sorunların tamamını kökten çözüyor.
JSI: JavaScript Interface ve Synchronous Calls
JSI (JavaScript Interface), New Architecture'ın temel taşı. Eski bridge'in yerini alan bu mekanizma, JavaScript ve C++ arasında synchronous, direct iletişim sağlıyor.
JSI'nin Çalışma Prensibi:
JSI, JavaScript engine'e (Hermes) doğrudan C++ objeleri expose ediyor. JavaScript kodu, bridge üzerinden mesaj göndermek yerine, C++ fonksiyonlarını sanki yerel JavaScript fonksiyonuymuş gibi doğrudan çağırabiliyor.
typescript
1// Old Bridge - Asenkron, JSON üzerinden2NativeModules.CameraModule.takePicture(3 { quality: 0.8 },4 (error, photoPath) => {5 // Callback - asenkron, bridge gecikme var6 if (error) {7 console.error(error);8 return;9 }10 setPhoto(photoPath);11 }12);13 14// New Architecture - JSI üzerinden synchronous-capable15import { NativeCamera } from './NativeCamera'; // Codegen ile üretildi16 17// Synchronous call (native thread'de bloke etmez)18const result = await NativeCamera.takePicture({ quality: 0.8 });19if (result.success) {20 setPhoto(result.photoPath);21}JSI'nin Sağladığı Avantajlar:
- Zero-copy data sharing:: Büyük binary veri (image buffer, audio frame) artık kopyalanmadan paylaşılabiliyor
- Synchronous native calls:: Bazı native operasyonlar artık JavaScript'i bloke etmeden senkron yapılabiliyor
- Direct object access:: JavaScript, native C++ objelere doğrudan referans tutabiliyor
- Lazy evaluation:: Native modüller sadece ihtiyaç duyulduğunda başlatılıyor
Fabric Renderer: C++ Core ve Concurrent Rendering
Fabric, React Native'in yeni UI rendering engine'i. Eski renderer tamamen JavaScript'te yazılmışken, Fabric'in core'u C++'ta yazıldı. Bu değişiklik hem performans hem de correctness açısından büyük kazanımlar sağladı.
Concurrent Rendering:
React 18 ile gelen concurrent features (Suspense, Transitions, useTransition) artık React Native'de tam olarak çalışıyor. Fabric, React'ın concurrent renderer'ı ile doğrudan entegre:
typescript
1import React, { useState, useTransition, Suspense } from 'react';2import { View, Text, Pressable, ActivityIndicator } from 'react-native';3 4// useTransition artık native'de gerçekten çalışıyor5function SearchScreen() {6 const [query, setQuery] = useState('');7 const [isPending, startTransition] = useTransition();8 9 const handleSearch = (text: string) => {10 setQuery(text);11 startTransition(() => {12 // Bu güncelleme "urgent" değil - UI bloke olmaz13 setSearchQuery(text);14 });15 };16 17 return (18 19 20 value={query}21 onChangeText={handleSearch}22 // Input her zaman responsive - transition beklemez23 />24 {isPending && }25 }>26 27 28 29 );30}Synchronous Layout Reads:
Fabric ile layout bilgisine synchronous olarak erişmek mümkün. measure, measureLayout gibi API'ler artık callback yerine direkt değer döndürebiliyor.
TurboModules: Lazy Loading ve Type Safety
TurboModules, eski NativeModules sisteminin yerini alıyor. İki temel yenilik: lazy initialization ve Codegen ile type safety.
Lazy Initialization:
Eski sistemde tüm native modüller uygulama başlangıcında initialize ediliyordu. Nadir kullanılan bir modül bile startup süresini uzatıyordu.
TurboModules ile modüller sadece ilk kullanımda yükleniyor:
typescript
1// Startup'ta yüklenen eski sistem:2// CameraModule, LocationModule, BluetoothModule, ...3// Hepsi başlangıçta initialize ediliyor4 5// TurboModules - lazy:6// Kullanıcı kamera ekranını açtığında → CameraModule yüklenir7// Kullanıcı harita ekranını açtığında → LocationModule yüklenir8// Bluetooth hiç kullanılmazsa → BluetoothModule hiç yüklenmezGerçek uygulamada bu yaklaşım cold start süresini ortalama %40 kısalttı.
TurboModule Tanımı:
typescript
1// NativeStorageModule.ts - Codegen spec dosyası2import type { TurboModule } from 'react-native';3import { TurboModuleRegistry } from 'react-native';4 5export interface Spec extends TurboModule {6 // Synchronous getter - JSI üzerinden7 readonly getItem: (key: string) => string | null;8 9 // Asynchronous operations10 readonly setItem: (key: string, value: string) => Promise; 11 readonly removeItem: (key: string) => Promise; 12 readonly getAllKeys: () => Promise; 13 14 // Callback-based (backward compat)15 readonly multiGet: (16 keys: string[],17 callback: (errors: (Error | null)[] | null, result: [string, string][] | null) => void18 ) => void;19}20 21export default TurboModuleRegistry.getEnforcing('NativeStorageModule'); Bu TypeScript tanımından Codegen, hem Android hem de iOS için native interface kodu otomatik üretiyor.
Codegen: TypeScript'ten Native Interface'e
Codegen, New Architecture'ın en "invisible" ama en önemli bileşenlerinden biri. TypeScript tip tanımlarından native kod üretiyor ve tip uyumsuzluklarını derleme zamanında yakalıyor.
Codegen Akışı:
- TypeScript'te
Specinterface'i tanımlanır - Build zamanında Codegen bu spec'i parse eder
- Android için Kotlin/Java, iOS için Objective-C/Swift header'ları üretilir
- Native developer bu interface'i implement eder
- Runtime'da tip uyumsuzluğu imkânsız hale gelir
Native Component Spec:
typescript
1// NativeVideoPlayer.ts2import type { ViewProps } from 'react-native';3import type { HostComponent } from 'react-native';4import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';5 6type VideoResizeMode = 'contain' | 'cover' | 'stretch';7 8interface NativeProps extends ViewProps {9 // Required props10 source: Readonly<{ uri: string; type?: string }>;11 12 // Optional props with defaults13 paused?: boolean;14 muted?: boolean;15 volume?: number; // 0.0 - 1.016 resizeMode?: VideoResizeMode;17 18 // Event callbacks - strongly typed19 onLoad?: (20 event: Readonly<{21 duration: number;22 naturalSize: Readonly<{ width: number; height: number }>;23 }>24 ) => void;25 26 onProgress?: (27 event: Readonly<{28 currentTime: number;29 playableDuration: number;30 seekableDuration: number;31 }>32 ) => void;33 34 onError?: (35 event: Readonly<{ error: Readonly<{ code: string; message: string }> }>36 ) => void;37}38 39export default codegenNativeComponent('RCTVideoPlayer') as HostComponent; Hermes 2026: Octane Benchmark ve JIT
Hermes, React Native'in varsayılan JavaScript engine'i. 2026 itibarıyla büyük iyileştirmelerle geliyor.
Hermes vs V8 Benchmark Sonuçları:
- Octane 2.0: Hermes 2026 → 18.400 puan (V8 mobile → 21.200 puan)
- Startup time: Hermes 1.8x daha hızlı (bytecode precompilation sayesinde)
- Memory: Hermes %30 daha az RAM kullanıyor
- APK size: Hermes ile +1.2MB (V8 ile +8MB fark)
Bytecode Precompilation:
Hermes'in en büyük avantajı, JavaScript'i build time'da bytecode'a compile etmesi. Bu sayede runtime'da parse ve compile adımları atlanıyor:
bash
1# Build pipeline'da otomatik yapılıyor2# Debug: JS source3# Release: Precompiled bytecode (.hbc)4 5# Hermes bytecode kontrolü6npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res7 8# Hermes ile compile et9node_modules/react-native/sdks/hermesc/linux64-bin/hermesc -emit-binary -out index.android.bundle.hbc index.android.bundleBridgeless Mode: Migration Rehberi
Bridgeless mode, eski bridge'in tamamen kaldırıldığı ve JSI'nin tek iletişim kanalı olduğu çalışma modu. React Native 0.76+'da default aktif.
Migration Kontrol Listesi:
typescript
1// app.json veya app.config.js2{3 "name": "MyApp",4 "newArchEnabled": true // Zaten default true 0.76+'da5}6 7// index.js - Bridgeless mode kontrolü8import { TurboModuleRegistry } from 'react-native';9 10// Eski bridge kontrolü11if (__DEV__) {12 const isBridgeless = global.RN$Bridgeless === true;13 console.log('Bridgeless mode:', isBridgeless);14}Migration Adımları:
- React Native 0.76+'a yükseltin
newArchEnabled: trueset edin (zaten default)npx react-native codegençalıştırın- Build alın ve hataları listeleyin
- Her native modülü sırayla migrate edin
- Third-party kütüphaneleri güncelleyin
- E2E testleri çalıştırın
Backward Compatibility ve Interop Layer
New Architecture migration'ı tek seferde yapmanız gerekmiyor. Interop layer sayesinde eski bridge modülleri New Architecture ile yan yana çalışabiliyor.
Interop Layer:
typescript
1// Eski NativeModule - Interop layer ile hala çalışıyor2import { NativeModules } from 'react-native';3const { LegacyModule } = NativeModules;4 5// Interop layer, bu çağrıyı otomatik olarak TurboModule sistemine yönlendiriyor6// ANCAK: performance avantajları tam olarak elde edilemiyor7// Migration tamamlanana kadar geçici çözüm8 9// Hangi modüllerin interop layer kullandığını görmek için:10// Android Studio → Profile → Method Trace'de11// "ReactModuleInterop" çağrılarını arayınKütüphane Uyumluluk Kontrolü:
bash
1# reactnative.directory üzerinden kontrol edebilirsiniz2# Ya da manuel olarak:3npx @rnx-kit/align-deps --diff4 5# Kütüphanelerin New Arch desteğini kontrol et6npx react-native-new-arch-helper checkAndroid Gradle ve iOS Pod Güncellemeleri
New Architecture migration'ı build configuration değişiklikleri gerektiriyor.
Android (build.gradle):
groovy
1// android/gradle.properties2newArchEnabled=true3hermesEnabled=true4 5// android/app/build.gradle6android {7 compileSdkVersion 35 // Minimum 348 9 defaultConfig {10 minSdkVersion 24 // New Arch için minimum11 targetSdkVersion 3512 }13 14 buildFeatures {15 prefab true // C++ kütüphane desteği16 }17}18 19dependencies {20 // React Native 0.76+21 implementation("com.facebook.react:react-android")22 implementation("com.facebook.react:hermes-android")23 24 // JSI C++ bağımlılıkları otomatik ekleniyor25}iOS (Podfile):
ruby
1# ios/Podfile2require_relative '../node_modules/react-native/scripts/react_native_pods'3 4platform :ios, min_ios_version_supported # iOS 16+ önerilir5 6use_react_native!(7 :path => config[:reactNativePath],8 # New Architecture aktif (default)9 :fabric_enabled => true,10 :hermes_enabled => true,11 # Bridgeless mode12 :bridgeless_enabled => true13)14 15post_install do |installer|16 react_native_post_install(17 installer,18 config[:reactNativePath],19 :mac_catalyst_enabled => false20 )21endThird-Party Kütüphane Migration Durumu
2026 itibarıyla popüler kütüphanelerin New Architecture desteği:
Tam Destekli (New Arch Native):
- react-navigation 7.x
- react-native-reanimated 4.x (Worklets ile tamamen yeniden yazıldı)
- react-native-gesture-handler 3.x
- react-native-screens 4.x
- @shopify/flash-list 1.7+
- react-native-mmkv 3.x
- react-native-vision-camera 5.x (Kotlin+Swift)
Kısmi Destek (Interop Layer):
- react-native-maps 1.x (iOS yavaş, Android tam)
- react-native-webview 14.x (migration devam ediyor)
- react-native-video 7.x (eksik bazı özellikler)
Henüz Desteklemiyor:
- Bazı eski Bluetooth kütüphaneleri
- Legacy payment SDK wrapper'ları
- Bazı sosyal medya SDK'ları
Production'a geçmeden önce npx react-native-new-arch-helper check ile kütüphanelerinizi kontrol edin.
Expo SDK 52 ve New Architecture
Expo SDK 52, New Architecture'ı default olarak aktif ediyor. Expo Go artık New Architecture üzerinde çalışıyor.
typescript
1// app.config.ts - Expo2import { ExpoConfig } from "expo/config";3 4const config: ExpoConfig = {5 name: "MyApp",6 slug: "my-app",7 // New Architecture default aktif SDK 52+'da8 // Eski bridge'e dönmek için:9 // newArchEnabled: false (önerilmez!)10 11 plugins: [12 // Expo modules otomatik New Arch uyumlu13 "expo-camera",14 "expo-location",15 ["expo-build-properties", {16 android: {17 newArchEnabled: true,18 compileSdkVersion: 35,19 targetSdkVersion: 35,20 },21 ios: {22 newArchEnabled: true,23 deploymentTarget: "16.0"24 }25 }]26 ]27};28 29export default config;Expo Router 4.x de New Architecture ile tam uyumlu ve concurrent rendering'den tam olarak yararlanıyor.
Performans Kazanımları: Gerçek Metrikler
Production uygulamasında ölçülen gerçek performans kazanımları:
Startup Performance:
- JavaScript bundle parse süresi: -45% (Hermes bytecode)
- Cold start: 1.850ms → 1.110ms (-40%)
- Warm start: 420ms → 280ms (-33%)
- Time to Interactive: 2.100ms → 1.380ms (-34%)
Runtime Performance:
- List render (1000 items): +62% FPS artışı
- Complex animation (60fps target): %94 frame adherence → %99
- Memory allocation during scroll: -38%
- GC pauses: 45ms avg → 8ms avg
Network ve I/O:
- Native module calls (bulk): -70% overhead (JSON serialization kaldırıldı)
- Image decode: -25% (zero-copy buffer paylaşımı)
Bundle Size:
- iOS IPA: +1.2MB (Hermes runtime)
- Android APK: +0.8MB
- JavaScript bundle: değişmedi
Debugging: Hermes + Flipper + React DevTools
New Architecture ile debugging deneyimi de değişti.
Hermes Debugger:
bash
1# Chrome DevTools ile Hermes debug2# 1. Metro bundler başlatın3npx react-native start4 5# 2. Uygulama içinde shake → "Open Debugger"6# 3. chrome://inspect açın7# 4. Remote Target'ı seçin8 9# Hermes profiling10# Uygulama içinde shake → "Record Hermes Trace"11# Trace dosyasını Chrome DevTools Performance sekmesine import edinFlipper Plugins:
bash
1# Flipper 0.250+ New Architecture uyumlu2# Önemli plugin'ler:3# - React DevTools (fiber tree inspection)4# - Network inspector (JSI bridge calls görünür)5# - Layout inspector (Fabric shadow tree)6# - Hermes debugger7# - Crash reporter8 9# Flipper başlatma10npx flipper-server startPerformance Monitoring:
typescript
1import { PerformanceObserver, performance } from 'react-native/Libraries/Performance/Performance';2 3// React Native Performance API (New Arch'ta stable)4const observer = new PerformanceObserver((list) => {5 list.getEntries().forEach((entry) => {6 console.log(entry.name, entry.duration);7 });8});9 10observer.observe({ entryTypes: ['measure', 'mark'] });11 12// Custom performance marks13performance.mark('screen-render-start');14// ... render işlemi15performance.mark('screen-render-end');16performance.measure(17 'screen-render',18 'screen-render-start',19 'screen-render-end'20);Production Rollout Stratejisi
New Architecture'a geçişi production'da güvenli yapmak için aşamalı rollout önerilen.
Feature Flag Yaklaşımı:
typescript
1// remote-config.ts2interface ArchitectureConfig {3 useNewArchitecture: boolean;4 enableConcurrentFeatures: boolean;5 enableBridgeless: boolean;6}7 8// Firebase Remote Config ile aşamalı rollout:9// 1. %1 kullanıcı → crash monitoring10// 2. %10 kullanıcı → performance comparison11// 3. %50 kullanıcı → A/B test12// 4. %100 kullanıcı → full rollout13 14const config = await remoteConfig.fetchAndActivate();15const archConfig: ArchitectureConfig = {16 useNewArchitecture: config.getBoolean('new_arch_enabled'),17 enableConcurrentFeatures: config.getBoolean('concurrent_features'),18 enableBridgeless: config.getBoolean('bridgeless_mode')19};Monitoring Checklist:
- ANR (Application Not Responding) oranı
- JS exception rate
- Native crash rate
- App startup p50/p90/p99
- Frame drop rate
- Memory usage (OOM crash rate)
- Network error rate (native module calls)
🏆 HERO WOW React Native İpucu
New Architecture migration'ının en gözden kaçan ama en kritik adımı: onLayout callback'lerini inceleyin. Fabric ile layout measurement senkron hale geldi ama bazı onLayout kullanımları yanlış bağımlılıklar yaratıyor. Özellikle onLayout içinde setState çağıran component'lar, Fabric'in concurrent rendering'i ile birleşince sonsuz döngüye girebilir. Bu pattern'i tespit etmek için Fabric layout profiler'ı kullanın ve onLayout → setState zincirlerini useLayoutEffect + ref kombinasyonuyla değiştirin. Bu tek optimizasyon, complex dashboard ekranlarında render süresini yarıya indirebilir.
🥚 Easter Egg: Gizli New Architecture Özelliği
React Native New Architecture ile gelen az bilinen özellik: ReactNativeFeatureFlags API'si. Bu API ile belirli New Architecture özelliklerini granüler düzeyde açıp kapatabilirsiniz. Özellikle enableBridgelessMode, enableFabricRenderer ve useModernEventSystem flag'leri, problematik bir kütüphaneyi izole ederek debugging yapmanıza olanak tanıyor. ReactNativeFeatureFlags.enableBridgelessMode() ile bridgeless'ı runtime'da toggle etmek teknik olarak mümkün (production'da önerilmez ama debugging için değerli).
🎁 Bonus: Migration Araçları
- react-native-new-arch-helper: Kütüphane uyumluluk scanner
- rnx-kit: Microsoft'un KIT toolset'i, New Arch migration scripts dahil
- Codemod'lar: `npx jscodeshift -t rn-upgrade-helper/transforms/...` ile otomatik kod dönüşümleri
- React Native Upgrade Helper: upgrade.react-native.dev — diff görselleştirici
- Flashlight: Mobile performance CI tool, New Arch uyumlu
Sonuç
React Native New Architecture, framework'ün 6 yıllık teknik borcunu ödüyor. JSI, Fabric, TurboModules ve bridgeless mode kombinasyonu gerçek anlamda native-yakın performans sağlıyor.
2026'da migration artık zorunluluk haline geldi. Old architecture deprecated, yeni React özellikleri (Suspense, Transitions, concurrent rendering) sadece New Architecture'da çalışıyor. Third-party ekosistem büyük ölçüde migrate edildi.
Migration riski düşük, kazanım yüksek: startup -40%, list rendering +60%, GC pauses -82%. Aşamalı rollout stratejisi ile geçiş güvenli yapılabiliyor. 2026'da React Native yazmak artık gerçek bir performans tercihine dönüştü.
İlgili yazılar:
- React Native vs Flutter Karşılaştırması
- Flutter Performance Optimization Rehberi
- Kotlin 2.1 K2 Compiler ve Context Parameters
- Gemini Nano ile iOS/Android On-Device AI
- Compose Multiplatform Android + iOS Production
Dış kaynaklar:

