Skip to content

expo/expo-brownfield-examples

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

brownfield-experiments

A collection of Expo brownfield apps

Android

  • AntennaPod: Integrated project using monorepo approach
  • BlankAndroid: Integrated project using monorepo approach
  • NewPipe: Isolated approach using AAR (SDK 56 canary) — Kotlin/Java media client, first user of expo-brownfield build:android --fused (PR #45878) which bundles every autolinked Expo module + heavy transitives into a single AAR (recording)

iOS

UIKit

  • wikipedia-ios: Isolated approach using XCFramework
  • simplenote-react-native: Integrated project using monorepo approach
  • NetNewsWire: Integrated project using monorepo approach
  • BlankIOS: Integrated project using monorepo approach
  • ish: Isolated approach using local Swift Package — Objective-C host with a C/asm core (recording)
  • KeePassium: Isolated approach using local Swift Package — UIKit password manager with bidirectional shared state (useSharedStateBrownfieldState) + native↔RN messaging (recording)
  • OsmAnd-iOS: Isolated approach using local Swift Package (SDK 57 canary) — ObjC++ map app with bidirectional shared map state (recording)
  • firefox-ios: Isolated approach using local Swift Package (SDK 56 canary) — UIKit browser with a Bookmarks Inspector RN screen wired through Firefox's custom Fennec build configurations + Swift 6 strict concurrency (recording)
  • Signal-iOS: Isolated approach using local Swift Package (SDK 56 canary) — UIKit messenger demonstrating the Navigation API (popToNative() from JS + setNativeBackEnabled) with a Safety Center RN screen + expo-image avatars via hostProvidedFrameworks (SDWebImage shared with the host's CocoaPods runtime) (recording)
  • Nextcloud-iOS: Isolated approach using local Swift Package (SDK 56 canary) — UIKit cloud-files client with a Files Quick Look RN screen (storage quota bar + shared-file indicators), Navigation API + DCO-signed commits (recording)
  • pocket-casts-ios: Isolated approach using local Swift Package (SDK 56 canary) — UIKit podcast app demonstrating the ExpoAppDelegateSubscriberManager lifecycle pipeline (host AppDelegate forwards every UIApplicationDelegate event into an ExpoAppDelegateSubscriber that records to BrownfieldState; live event feed rendered in the RN Lifecycle Trace screen) (recording)

SwiftUI

  • IceCubesApp: Integrated project using monorepo approach
  • yattee: Isolated approach using local Swift Package — SwiftUI YouTube player (recording)
  • wallabag-ios: Isolated approach using local Swift Package (SDK 56 canary with the expo-image SPM-deps fix) — SwiftUI read-it-later app with a bidirectional reading-list inspector (recording)
  • element-x-ios: Isolated approach using local Swift Package (SDK 56 canary) — SwiftUI Matrix client built on Element X's AppCoordinator / WindowGroup architecture, with a React Native Safety Dashboard presented on a dedicated UIWindow overlay (.alert + 1) so it floats over the SwiftUI scene without fighting the host's view-swap flow; bidirectional shared state (encrypted-sessions, verified-devices, recent-rooms feed), BrownfieldMessaging (OPEN_ROOM / VERIFY_KEYS), Navigation API (popToNative()), and expo-image avatars (recording)

Integration steps

Check commits inside each repo for detailed steps, full instructions can be found in the expo-brownfield documentation.

Integrated

Monorepo

  1. Set up a yarn monorepo: Create a package.json file in the root directory, then add the following to it:

    {
      "private": true,
      "workspaces": ["exp"]
    }
  2. Create the Expo app: Run npx create-expo-app exp to set up a new Expo app.

  3. Install dependencies: Add expo to you Podfile and run pod install

  4. Add React Native view: Create a new Swift file in the NetNewsWire-iOS target, for example ReactNativeView.swift, and implement a basic React Native view.

Isolated

  1. Create the Expo app: Run npx create-expo-app exp to set up a new Expo app.

  2. Install expo-brownfield: Add expo-brownfield to your project npx expo install expo-brownfield and generate a XCFramework.

  3. Add React Native view: Integrate the Expo app XCFramework into the existing iOS app.

About

A collection of Expo brownfield apps

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors