expo-brownfield

Integrate Expo and React Native into existing native iOS and Android apps.

Updated Mar 27, 2026
One-click install
npx skills add https://github.com/gmackie/agent-skills --skill expo-brownfield-gmackie
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: expo-brownfield
Source: https://github.com/gmackie/agent-skills/tree/main/skills/expo-brownfield
Command: npx skills add https://github.com/gmackie/agent-skills --skill expo-brownfield-gmackie

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Adding React Native to an existing native iOS or Android app requires choosing between shipping a prebuilt AAR/XCFramework or wiring React Native directly into Gradle and CocoaPods, and each path involves intricate build configuration, versioning constraints, and platform-specific pitfalls. ## Core Features & Use Cases - Approach Selection: Decision rules and a comparison matrix for choosing between the isolated approach (prebuilt AAR/XCFramework via expo-brownfield) and the integrated approach (React Native sources added to the existing Gradle/CocoaPods build). - Step-by-Step Integration Guides: Detailed references covering Android Gradle setup, iOS Podfile and Xcode configuration, Swift Package output, fused AAR publishing, and embedding React Native screens via BrownfieldActivity, ReactNativeViewController, or ReactActivity. - Troubleshooting Reference: Solutions for Metro connection failures, XCFramework signing crashes, mavenLocal resolution issues, module name mismatches, and monorepo autolinking problems. - Use Case: An iOS team using Tuist wants to add a React Native onboarding flow without installing Node; the skill guides building an XCFramework with npx expo-brownfield build:ios --package and initializing it with one call in AppDelegate. ## Quick Start Ask the AI to help you add an Expo React Native screen to your existing native iOS or Android app and recommend whether to use the isolated or integrated brownfield approach.

Frequently Asked Questions about expo-brownfield

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add React Native to an existing native iOS or Android app?▼

Use Expo's brownfield support with two approaches: build React Native as a prebuilt AAR/XCFramework consumed like any library (isolated), or add React Native and Expo directly to the existing Gradle and CocoaPods build (integrated). Both require Expo SDK 55 or later.

Brownfield isolated vs integrated approach: which should I choose?▼

Choose isolated if the native team must avoid Node, Yarn, and React Native tooling, or if code lives in separate repos with independent release cadences. Choose integrated if one team owns everything and wants hot reload and a single unified build pipeline.

What Expo SDK version is required for brownfield integration?▼

Expo SDK 55 is the minimum supported version for brownfield integration. Earlier SDKs lack expo-brownfield and the required ExpoReactHostFactory and ExpoReactNativeFactory entry points. Pin the SDK explicitly when creating the project.

Why does my iOS brownfield app crash with Library not loaded?▼

This happens when not every produced XCFramework is set to Embed & Sign in the app target. On SDK 56+ there are five frameworks including hermesvm.xcframework. Using the Swift Package output from build:ios --package links all frameworks automatically.

Why does Gradle say it could not find my brownfield AAR in mavenLocal?▼

The mavenLocal() repository must be declared under dependencyResolutionManagement in settings.gradle.kts, not the deprecated allprojects block. Also verify the artifact exists in ~/.m2 and that group and libraryName match the plugin configuration.

Can the native team consume React Native without installing Node.js?▼

Yes, with the isolated approach the native app consumes a prebuilt AAR or XCFramework like any other dependency. Node.js and Yarn are only needed in the environment that builds the artifact, not in the consuming native app.