Bridgeless = bỏ hoàn toàn Bridge legacy. Mọi native interop chuyển sang JSI/Fabric/TurboModules.
Trước Bridgeless (RN 0.68–0.73, dù đã có New Arch):
- Bridge vẫn chạy song song để hỗ trợ legacy modules.
- JS thread vẫn share queue cũ với native.
- Vẫn có overhead dù nhiều phần đã chạy JSI.
Bridgeless (giới thiệu RN 0.74, default từ RN 0.76+):
- Không còn RCTBridge instance.
- App khởi động qua RCTHost (iOS) / ReactHost (Android) — manages JSI runtime, TurboModule registry, Fabric Surface.
- Mọi legacy NativeModule không TurboModule-compat sẽ không hoạt động → buộc migrate hoặc tìm replacement.
- Startup nhanh hơn 20–30% trên Android low-end.
- Memory footprint giảm vì không còn 2 bộ infrastructure song song.
Code thay đổi:
// AppDelegate.mm — iOS new-style
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.moduleName = @"MyApp";
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}App template Expo/RN CLI mới đã setup sẵn.
Pitfall: lib chưa migrate sẽ crash hoặc throw "TurboModuleRegistry: 'MyOldModule' could not be found." Lúc đó:
1. Update lib lên version mới nhất.
2. Nếu lib không còn maintain, fork và migrate sang TurboModule spec.
3. Tạm thời unstable_enableSyncTurboModule workaround (deprecated, sẽ remove).