Conversation
…49443) # Why <!-- Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests. --> Fix ENG-26228 ENG-26235 # How <!-- How did you build this feature or fix this bug and why? --> Add /api and /developers redirects for agent discovery paths. # Test Plan <!-- Please describe how you tested this change and how a reviewer could reproduce your test, especially if this PR does not include automated tests! If possible, please also provide terminal output and/or screenshots demonstrating your test/reproduction. --> `pnpm test:worker` should pass. # Checklist <!-- Please check the appropriate items below if they apply to your diff. --> - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
# Why In preparation for React Native 0.87.0, we should bump our repo to use the latest react-native RC. This does not bump Expo Go, that is done in another PR in this stack -> #48771 # How - update package versions - `react-native 0.86.0-> 0.87.0-rc.4` - `@react-native/normalize-colors 0.86.0 -> 0.87.0-rc.4` - `@react-native/babel-preset 0.86.0 -> 0.87.0-rc.4` - `@react-native/dev-middleware 0.86.0-> 0.87.0-rc.4` - Update Expo router TS and drop InteractionManager usage # Test Plan bare-expo ios / android minimal-tester ios / android # Checklist <!-- Please check the appropriate items below if they apply to your diff. --> - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --------- Co-authored-by: expo-tuft[bot] <288127324+expo-tuft[bot]@users.noreply.github.com> Co-authored-by: gabrieldonadel <11707729+gabrieldonadel@users.noreply.github.com>
# Why Part of the React Native 0.87 upgrade stack: #48769 (version bumps) → this PR (library fixes) → #48771 (Expo Go). # How - Fix Asset registry migration and JS/TS fixes: Metro's `assetRegistryPath`, expo-asset, expo-image, expo-video, jest-expo, and the TS declarations now point at `react-native/asset-registry`, so Metro-registered assets and React Native's own `<Image>` share one registry instance on native. Web keeps the virtual registry, and imports of the removed package are redirected for backwards compatibility. Also fixes `expo-ui` Host color scheme types against the stricter 0.87 API, supports 0.87's native `backgroundImage` style in html-elements, and removes an import of the deleted `RCTRootContentView.h`. - Bump gradle plugins to Kotlin 2.2.21: explicitly enables `buildFeatures.buildConfig` where required, fixes the brownfield fused-mode template for the new `minSdk` DSL, declares the fused-mode AGP version as a minimum constraint instead of forcing it, and keeps Room's generated database constructor under R8. - Third-party library patches: - `@shopify/react-native-skia` (uses iOS bridge APIs removed upstream), - `react-native-screens` (retargeted at 4.26.0 with its 0.87 iOS fixes), - `react-native-safe-area-context` (retargeted at 5.7.0 with its Kotlin fix), - `react-native-reanimated`/`react-native-worklets` (declare 0.87 in `compatibility.json`, and configure the Kotlin `jvmTarget` reflectively so their Gradle scripts compile on any host classpath). # Test Plan - CI on this PR: package unit tests (`et check-packages`), the Android and iOS build workflows, brownfield testers, and the updates E2E suite. - Locally: clean iOS builds of `apps/minimal-tester` (including `use_frameworks! :linkage => :static`) and `apps/bare-expo` against 0.87 with the precompiled React-Core. bare-expo currently stops at a known `react-native-skia` 2.6.2 incompatibility with 0.87 that is tracked separately and not introduced by this PR. - The Expo Go Android and iOS builds in #48771 run on top of this branch.
# Why `expo-modules-autolinking` is not a direct dependency of `expo-widgets`, but it is to `expo`. In some setups it may cause issues. # How Resolve `expo-modules-autolinking` relative to `expo` like we do in other packages/template. # Test Plan `expo-widgets` should link properly. # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin).
… platforms (#49444) # Why Part of the React Native 0.87 upgrade stack, split out of #48770 per review feedback (#48770 (comment)). The Expo CLI resolver intercepts imports of `@react-native/assets-registry/registry` and serves a small virtual registry module. Before 0.87 this worked on every platform because React Native's own code imported the same standalone package, so the intercept caught both sides and Metro-registered assets and React Native's `<Image>` shared one registry instance. React Native 0.87 removed the standalone `@react-native/assets-registry` package. React Native core now bundles its own registry and imports it internally, where the resolver intercept cannot see it. With the always-virtual behavior, native builds end up with two registry instances: Metro's asset modules register into the virtual registry while `<Image>` reads React Native's internal one, so assets fail to resolve at runtime. # How - Resolve both `react-native/asset-registry` (the new 0.87 subpath) and the legacy `@react-native/assets-registry/registry` specifier through one intercept. - On native platforms, resolve to `react-native/asset-registry` so Metro's asset modules and React Native core share the single registry instance inside `react-native`. - On web, keep serving the virtual registry module, since `react-native` is not bundled there. # Test Plan - Added resolver unit tests covering both module specifiers: native resolves to `react-native/asset-registry`, web resolves to the virtual `\0polyfill:assets-registry` module. - Exercised end to end by the rest of the 0.87 stack: Expo Go and bare-expo builds on the branches above load Metro-registered assets through React Native's `<Image>` on device.
# Why Part 3 of the React Native 0.87 upgrade for SDK 58 PRs. This part moves Expo Go itself to React Native 0.87: the react-native-lab fork, the Android build system (AGP 9, Gradle 9.4), and the client version bump. # How - Pointed `react-native-lab` at the sdk-58 fork built on react-native 0.87.0 and regenerated the Expo Go lockfiles and Podfile.lock. Aligned Expo Go, eas-expo-go, and the fork pointer, and bumped Expo Go to 0.87.0. - Moved Expo Go Android to AGP 9 and Gradle 9.4 with both template opt-outs in `gradle.properties`. `android.newDsl=false` is also required because EAS Build injects a script that reads `android.applicationVariants`, which the new DSL removes. `:app` and `:expoview` apply the Kotlin Gradle plugin explicitly again. - Expo Go builds React Native from source, and upstream only ever builds ReactAndroid and popup-menu-android with built-in Kotlin. AGP ignores a per-project `android.builtInKotlin=true` override, so the fork applies the Kotlin Gradle plugin explicitly in both build scripts. `BaseViewManager.java` inlines the `ViewProps.*` strings in its `@ReactProp` annotations because K2 under plain KGP crashes on Java annotations that reference Kotlin `const val`s from the same module. - Pinned Kotlin to 2.3.0, the exact compiler AGP 9.2's built-in Kotlin embeds, so the same sources keep compiling with the same compiler. Replaced DBFlow with Room + KSP in expoview (kapt has no future under AGP 9 and DBFlow has no KSP processor). The legacy databases are caches, so Room's destructive fallback recreates them. Room 2.8 is required for KSP2. - Adapted expoview sources to the 0.87 API: `ReactNativeHost` is now a Kotlin class, so synthetic property access on its getters no longer resolves; `AppTask.taskInfo` is now nullable; the Room entity's `is`-prefixed nullable Booleans are not supported by KSP2. Migrated `:app` off AGP 8-only APIs (`applicationVariants`, the legacy `LibraryExtension` lookup) so it works under both DSLs. - Kept only the functional 0.87 fixes in the library patches (keyboard-controller Kotlin fix, reanimated/worklets podspec and compatibility ranges, safe-area legacy-architecture relayout removal) and updated the Expo Go proguard file. # Test Plan - `./gradlew :app:compileMobileDebugKotlin` and `:app:compileMobileDebugJavaWithJavac` in `apps/expo-go/android` pass. This compiles ReactAndroid and popup-menu-android from the fork, expoview (Room/KSP, Compose, kotlinx-serialization), all expo modules, and every now-unpatched third-party library under both opt-outs. - `grep -r builtInKotlin patches/` returns nothing; no library carries build-mode guards anymore. - CI runs the full Expo Go Android and iOS client builds, including the release variants not exercised locally.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )