expo-brownfield

par expo

Framework (OSS). Intégrez Expo et React Native dans une application native iOS ou Android existante. Utilisez lorsque l'utilisateur mentionne brownfield, l'intégration de React Native dans un…

npx skills add https://github.com/expo/skills --skill expo-brownfield

Expo Brownfield

A brownfield app is an existing native iOS or Android app that adopts React Native incrementally, as opposed to a greenfield app that is React Native from day one.

Expo supports two distinct ways to add React Native to a brownfield project:

ApproachWhat ships to the native appWhen to choose
IsolatedPrebuilt AAR / XCFrameworkNative team doesn't need Node or RN tooling; RN code can live in a separate repo
IntegratedReact Native sources added to the existing Gradle / CocoaPods buildOne team owns everything; comfortable with RN tooling; wants a single build

For the full decision matrix, see ./references/comparison.md.

Pick an approach

Use these quick rules — fall through to comparison.md for anything ambiguous.

  • Choose isolated if the iOS/Android team must consume RN as a regular library dependency (AAR or XCFramework), without installing Node, Yarn, or the React Native build toolchain.
  • Choose isolated if RN code and native code live in separate repositories or release on independent cadences.
  • Choose integrated if a single team owns both the native and RN code and is willing to add React Native + Expo to the native project's Gradle and CocoaPods setup.
  • Choose integrated if you want hot reload and JS source maps to work seamlessly inside the existing native build process.

References

  • ./references/brownfield-isolated.md -- Build RN as AAR/XCFramework and consume from the native app (BrownfieldActivity, ReactNativeViewController, ReactNativeView)
  • ./references/brownfield-integrated.md -- Add RN and Expo directly to existing Gradle and CocoaPods builds (ReactActivity, RCTRootView, Podfile)
  • ./references/comparison.md -- Decision criteria, trade-offs, and scenario mapping for choosing an approach
  • ./references/troubleshooting.md -- Metro connection, build, signing, and module-resolution issues common to both approaches

More information available at https://docs.expo.dev/brownfield/overview/

Shared prerequisites

Both approaches require, in the environment that builds the React Native side:

  • Node.js (LTS) — runs the Expo CLI and JavaScript code.
  • Yarn — manages JavaScript dependencies.

The integrated approach additionally requires CocoaPods on iOS (sudo gem install cocoapods). The isolated approach does not require CocoaPods or any RN tooling in the consuming native app.

Versioning note

Expo SDK 55 is the minimum supported version for brownfield integration. Earlier SDKs lack expo-brownfield, the required ExpoReactHostFactory / ExpoReactNativeFactory entry points, and the current autolinking surface. When creating the Expo project, always pin the SDK explicitly:

npx create-expo-app@latest my-project --template default@sdk-55

Pin the same Expo SDK across both the RN project and any embedded dependencies.

Submitting Feedback

If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:

npx --yes submit-expo-feedback@latest --category skills --subject "expo-brownfield" "<actionable feedback>"

Only submit when you have something specific and actionable to report. Include as much relevant context as possible. If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.

Plus de skills de expo

expo-upgrade
expo
Framework (OSS). Directives pour la mise à jour des versions du SDK Expo et la résolution des problèmes de dépendances.
apidevelopmentofficial
expo-data-fetching
expo
Framework (OSS). Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).
official
android-e2e-testing
expo
Testez les fonctionnalités d'Expo Router sur des émulateurs Android à l'aide d'ADB. À utiliser après avoir implémenté des fonctionnalités Android natives ou lors de la vérification du comportement de l'interface utilisateur sur Android.
official
expo-dev-client
expo
Construisez des clients de développement Expo personnalisés pour tester du code natif sur des appareils physiques via EAS Build ou localement. Nécessaire uniquement lors de l'utilisation de modules natifs personnalisés, de cibles Apple (widgets, app clips) ou de code natif tiers non présent dans Expo Go ; essayez d'abord Expo Go avec npx expo start. Prend en charge les builds cloud avec soumission automatique à TestFlight ou les builds locales sur votre machine, produisant des fichiers .ipa (iOS) ou .apk/.aab (Android). Nécessite une configuration eas.json avec un profil de développement qui définit...
official
android-jetpack-compose
expo
Use when building Android UIs with Jetpack Compose, managing state with remember/mutableStateOf, or implementing declarative UI patterns.
official
swiftui-expert-skill
expo
Rédigez, révisez ou améliorez du code SwiftUI en suivant les meilleures pratiques en matière de gestion d’état, de composition des vues, de performances, d’API spécifiques à macOS et de Liquid Glass pour iOS 26 et versions ultérieures…
official
android-e2e-testing
expo
Test Expo Router features on Android emulators using ADB. Use after implementing native Android features or when verifying UI behavior on Android.
official
expo-api-docs
expo
Write TSDoc comments for Expo SDK APIs following official conventions. MUST USE when introducing new user-facing TypeScript APIs in expo-* packages - document…
official