Aller au contenu
useffect.sh
Planifier 30 min avec un senior
Architecture

Bridgeless

Le mode d’exécution de la New Architecture où le bridge n’est même plus instancié : tout passe par JSI, Turbo Modules et Fabric.

Définition

Bridgeless désigne le mode d’exécution de React Native dans lequel le bridge historique n’est plus instancié du tout. Dans la New Architecture des premières versions, Fabric et les Turbo Modules cohabitaient encore avec un bridge chargé en parallèle pour les modules et composants non migrés. En mode bridgeless, le runtime démarre avec un hôte (ReactHost sur Android, RCTHost sur iOS) qui crée directement le moteur JavaScript, le runtime JSI et le renderer ; les librairies restées sur l’ancienne API passent par une couche d’interop qui simule les anciennes interfaces. Bridgeless a été open-sourcé derrière un drapeau en React Native 0.73, est devenu le défaut dès que la New Architecture était activée en 0.74, et depuis la 0.82 c’est le seul mode possible. Le terme revient surtout dans les changelogs de librairies et dans le code natif d’intégration de l’app (AppDelegate ou SceneDelegate, MainApplication).

Dans une vraie app

Pour une app, le passage en bridgeless se voit surtout dans le code d’intégration natif. Sur iOS, l’AppDelegate moderne s’appuie sur RCTReactNativeFactory plutôt que sur RCTBridge ; sur Android, MainApplication expose un ReactHost via DefaultReactHost. Un projet dont l’AppDelegate.mm instancie encore RCTBridge à la main est un projet qui a sauté des étapes de l’upgrade helper, et ça finit par casser sur la version suivante.

Côté librairies, les symptômes de l’interop sont reconnaissables : un module qui appelle bridge.eventDispatcher ou RCTBridge.currentBridge reçoit un objet de compatibilité, et certains chemins (événements envoyés avant le chargement, UIManager custom) ne font plus rien. Les messages « Bridgeless mode is enabled » suivis d’un warning sur un module précis dans la console Metro sont la piste à suivre. Avec React Native 0.84 et suivants, une partie des classes du bridge est retirée du core à chaque release, donc une librairie non maintenue finit par ne plus compiler.

En audit, je cherche les imports de com.facebook.react.bridge.ReactContextBaseJavaModule sans équivalent Turbo, les RCT_EXPORT_MODULE sans spec associée, et je lis le changelog de chaque dépendance native pour la mention « bridgeless » ou « New Architecture ».

Sources

Les 35 termes du glossaire

Un de ces sujets bloque votre app ?

30 minutes avec un senior pour regarder le problème dans votre code. Gratuit.