Skip to content

[pull] main from expo:main#839

Merged
pull[bot] merged 23 commits intocode:mainfrom
expo:main
May 6, 2026
Merged

[pull] main from expo:main#839
pull[bot] merged 23 commits intocode:mainfrom
expo:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented May 6, 2026

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 : )

alanjhughes and others added 23 commits May 6, 2026 17:28
uri-scheme@2.0.21
unimodules-app-loader@56.0.1
pod-install@1.0.17
patch-project@56.0.3
install-expo-modules@0.14.20
@expo/html-elements@56.0.1
expo-web-browser@56.0.2
expo-video-thumbnails@56.0.1
expo-updates-interface@56.0.2
@expo/ui@56.0.2
expo-video@56.0.1
expo-tracking-transparency@56.0.1
expo-updates@56.0.2
expo-test-runner@0.3.14
expo-widgets@56.0.2
expo-task-manager@56.0.1
expo-symbols@56.0.2
expo-store-review@56.0.1
expo-standard-web-crypto@56.0.1
expo-system-ui@56.0.2
expo-status-bar@56.0.2
expo-splash-screen@56.0.2
expo-speech@56.0.1
expo-sharing@56.0.1
expo-sqlite@56.0.1
expo-sms@56.0.1
expo-sensors@56.0.1
expo-secure-store@56.0.1
expo-screen-capture@56.0.1
expo-screen-orientation@56.0.1
expo-processing@56.0.1
expo-print@56.0.1
expo-router@56.0.2
expo-notifications@56.0.1
expo-network-addons@56.0.1
expo-network@56.0.1
expo-navigation-bar@56.0.1
expo-server@56.0.1
expo-observe@56.0.1
expo-modules-core@56.0.1
expo-modules-autolinking@56.0.1
expo-module-template@56.0.1
expo-maps@56.0.1
expo-media-library@56.0.1
expo-manifests@56.0.2
expo-mesh-gradient@56.0.1
expo-location@56.0.1
expo-mail-composer@56.0.1
expo-localization@56.0.1
expo-local-authentication@56.0.1
expo-keep-awake@56.0.2
expo-live-photo@56.0.1
expo-linear-gradient@56.0.1
expo-linking@56.0.1
expo-image-picker@56.0.1
expo-intent-launcher@56.0.1
expo-image-manipulator@56.0.1
expo-insights@56.0.1
expo-image-loader@56.0.1
expo-haptics@56.0.1
expo-gl@56.0.1
expo-image@56.0.2
expo-glass-effect@56.0.2
expo-file-system@56.0.2
expo-font@56.0.2
expo-env-info@2.0.14
expo-eas-client@56.0.1
expo-document-picker@56.0.1
expo-device@56.0.2
expo-doctor@1.19.3
expo-dev-menu-interface@56.0.1
expo-dev-menu@56.0.1
expo-dev-client@56.0.1
expo-crypto@56.0.1
expo-dev-launcher@56.0.1
expo-codemod@56.0.1
expo-contacts@56.0.1
expo-clipboard@56.0.1
expo-checkbox@56.0.1
expo-constants@56.0.2
expo-calendar@56.0.1
expo-camera@56.0.1
expo-cellular@56.0.1
expo-brightness@56.0.1
expo-build-properties@56.0.1
expo-blur@56.0.1
expo-blob@56.0.1
expo-battery@56.0.1
expo-background-task@56.0.1
expo-brownfield@56.0.1
expo-background-fetch@56.0.1
expo-auth-session@56.0.1
expo-audio@56.0.1
expo-app-metrics@56.0.1
expo-apple-authentication@56.0.1
expo-asset@56.0.2
expo-application@56.0.1
@expo/app-integrity@56.0.1
expo@56.0.0-preview.3
eslint-plugin-expo@1.0.2
eslint-config-expo@56.0.1
create-expo-nightly@0.4.1
create-expo-module@56.0.1
create-expo@3.7.1
babel-preset-expo@56.0.2
expo-age-range@56.0.1
@expo/schemer@2.2.1
@expo/schema-utils@56.0.1
@expo/prebuild-config@56.0.1
@expo/plist@0.6.1
@expo/pkcs12@0.5.1
@expo/require-utils@56.0.1
@expo/router-server@56.0.2
@expo/package-manager@1.11.1
@expo/osascript@2.5.1
@expo/metro-runtime@56.0.2
@expo/metro-config@56.0.2
@expo/metro-file-map@56.0.0-1
@expo/json-file@10.1.1
@expo/image-utils@0.9.1
@expo/fingerprint@0.17.2
@expo/local-build-cache-provider@56.0.1
@expo/log-box@56.0.2
@expo/inline-modules@0.0.3
@expo/env@2.2.1
@expo/devtools@56.0.1
@expo/dom-webview@56.0.2
@expo/config-types@56.0.1
@expo/cli@56.0.3
@expo/config-plugins@56.0.1
@expo/config@56.0.1
expo-module-scripts@56.0.1
expo-template-default@56.0.3
expo-template-tabs@56.0.3
expo-template-bare-minimum@56.0.3
expo-template-blank@56.0.3
expo-template-blank-typescript@56.0.3
# Why

`NativeTabs.Trigger` exposes `unstable_nativeProps` option to pass props
directly to RNS implementation, however this is missing from the
`NativeTabs` themselves

# How

Add `unstable_nativeProps` to `NativeTabs`

# Test Plan

1. CI
2. Router e2e

# Checklist

<!--
Please check the appropriate items below if they apply to your diff.
-->

- [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)
- [ ] 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

Accessibility props are not exposed from android toolbar.

# How

Map `accessibilityLabel` prop to `contentDescription`

# Test Plan

CI

I added a follow-up ticket for auditing the iOS and Android toolbars -
https://linear.app/expo/issue/ENG-21055/test-accessibility-of-android-and-ios-toolbar

# 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

While installing dependencies with pnpm I noticed a warning coming from
`expo-progress` dependency. Upon inspection, it was revealed that we
don't use this dependency anymore and it can be safely removed

# How

Remove `expo-progress` dependency from NCL

# Test Plan

N / A 

# 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)
@expo/metro-config@56.0.3
@expo/config@56.0.2
@expo/config-plugins@56.0.2
babel-preset-expo@56.0.3
expo-constants@56.0.3
@expo/devtools@56.0.2
@expo/fingerprint@0.17.3
@expo/local-build-cache-provider@56.0.2
expo-asset@56.0.3
expo-file-system@56.0.3
expo-font@56.0.3
expo-keep-awake@56.0.3
expo-modules-autolinking@56.0.2
expo-modules-core@56.0.2
@expo/dom-webview@56.0.3
expo@56.0.0-preview.4
@expo/log-box@56.0.3
expo-router@56.0.3
@expo/cli@56.0.4
expo-splash-screen@56.0.3
expo-updates@56.0.3
expo-dev-client@56.0.2
expo-dev-launcher@56.0.2
expo-dev-menu@56.0.2
@expo/metro-runtime@56.0.3
@expo/inline-modules@0.0.4
@expo/prebuild-config@56.0.2
@expo/router-server@56.0.3
expo-glass-effect@56.0.3
expo-image@56.0.3
expo-symbols@56.0.3
expo-device@56.0.3
expo-linking@56.0.2
expo-status-bar@56.0.3
expo-system-ui@56.0.3
expo-web-browser@56.0.3
expo-application@56.0.2
expo-crypto@56.0.2
expo-task-manager@56.0.2
expo-gl@56.0.2
expo-app-metrics@56.0.2
expo-image-loader@56.0.2
expo-build-properties@56.0.2
create-expo@3.7.2
patch-project@56.0.4
expo-template-default@56.0.4
expo-template-tabs@56.0.4
expo-auth-session@56.0.2
expo-video-thumbnails@56.0.2
expo-video@56.0.2
expo-tracking-transparency@56.0.2
expo-background-task@56.0.2
expo-background-fetch@56.0.2
expo-store-review@56.0.2
expo-template-blank-typescript@56.0.4
expo-template-blank@56.0.4
expo-template-bare-minimum@56.0.4
expo-sqlite@56.0.2
expo-speech@56.0.2
expo-sms@56.0.2
expo-sharing@56.0.2
expo-sensors@56.0.2
expo-secure-store@56.0.2
expo-screen-orientation@56.0.2
expo-screen-capture@56.0.2
expo-processing@56.0.2
expo-print@56.0.2
expo-observe@56.0.2
expo-notifications@56.0.2
expo-network-addons@56.0.2
expo-network@56.0.2
expo-navigation-bar@56.0.2
expo-mesh-gradient@56.0.2
expo-media-library@56.0.2
expo-maps@56.0.2
expo-mail-composer@56.0.2
expo-location@56.0.2
expo-localization@56.0.2
expo-local-authentication@56.0.2
expo-live-photo@56.0.2
expo-linear-gradient@56.0.2
expo-intent-launcher@56.0.2
expo-insights@56.0.2
expo-image-picker@56.0.2
expo-image-manipulator@56.0.2
expo-haptics@56.0.2
expo-document-picker@56.0.2
expo-doctor@1.19.4
expo-contacts@56.0.2
expo-clipboard@56.0.2
expo-cellular@56.0.2
expo-camera@56.0.2
expo-calendar@56.0.2
expo-brownfield@56.0.2
expo-brightness@56.0.2
expo-blur@56.0.2
expo-blob@56.0.2
expo-battery@56.0.2
expo-audio@56.0.2
expo-apple-authentication@56.0.2
@expo/app-integrity@56.0.2
expo-age-range@56.0.2
uri-scheme@2.0.22
install-expo-modules@0.14.21
# Why

There's a subtle issue with `#cloneTree`'s changes in #45391 — it's
unable to include relative roots, since it's trying to apply the
`#rootPattern` to partial root folders.

# How

Instead, we should re-traverse all `roots` and rebuild the tree starting
from these roots, knowing that they'll be included in `watchFolders`
that way.

This PR also removes the full clone of the tree, since it's not
necessary and just increases memory pressure.

# Test Plan

- Unit test added

# Checklist

<!--
Please check the appropriate items below if they apply to your diff.
-->

- [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)
- [ ] 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)
…ut of scope (#45460)

# Why

Currently, we enable `scopeFallback` out of an abundance of caution,
which disallows the on-demand filesystem from leaving the defined server
root. This has to be explicitly disabled in some cases, for example for
package manager global stores (supported by
[pnpm](https://pnpm.io/11.x/global-virtual-store) and
[bun](https://bun.com/docs/pm/global-store)).

Global stores for package managers with isolated installations are
pretty ideal for worktrees, and as such, we'd like to support them by
default, which the on-demand filesystem allowed, provided
`scopeFallback: false` was passed.

Instead, we can allow the on-demand filesystem to automatically follow
symlinks out of the server root, trusting that symlinks in the server
root are intended and safe. That assumption is usually safe and already
made by different frameworks/bundlers that don't have a "server root"
concept.

# How

- Mark directories discovered by on-demand filesystem with `VISITED |
CRAWLED` flag, and mark all directories at least as `VISITED` if the
crawler found them
- Pass on a symlink flag to the on-demand filesystem calls, and allow
directories if they've either been reached by a symlink, or if they've
been discovered by the on-demand filesystem

This effectively allows a symlink to first escape the server root, and
then subsequent sub-directories are allowed to be discovered by Metro.

# Test Plan

- Unit tests added
- Tested in a fresh `expo/expo` worktree with `enableGlobalVirtualStore`
enabled

# Checklist

<!--
Please check the appropriate items below if they apply to your diff.
-->

- [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)
- [ ] 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

Fixes #41833

Currently, calling `exitFullscreen()` on Android throws a
`MethodUnsupportedException`. This PR implements the functionality to
programmatically exit fullscreen mode.

# How

- Implemented `exitFullscreen` in `VideoModule` by calling
`VideoManager.finishFullscreenPlayer`.
- Added `finishFullscreenPlayer` to `VideoManager` to finish the
activity.
- Updated `VideoManager.unregisterFullscreenPlayerActivity` to verify
the activity instance to prevent race conditions.
- Updated `FullscreenPlayerActivity` to correctly attach the player back
to the VideoView on finish and handle cleanup in `onDestroy`.
- Added a try-catch block in `FullscreenPlayerActivity.finish()` to
handle cases where the original VideoView might have been destroyed.

# Test Plan

- Tested in a local reproduction app.
- Verified that calling `exitFullscreen()` closes the fullscreen player.
- Verified that the player is correctly re-attached to the inline view.
- Verified that no crash occurs if the inline view is destroyed while in
fullscreen.

<!--
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.
-->

# Checklist

<!--
Please check the appropriate items below if they apply to your diff.
-->

- [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)
- [ ] 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: Wojciech Dróżdż <31368152+behenate@users.noreply.github.com>
…oration after process death (#45426)

# Why

Fixes #45234

The default generated Expo MainActivity uses super.onCreate(null), which
masks this issue by discarding Activity saved state. Apps that preserve
Activity state restoration can hit the crash.

# How

Add a no-arg constructor (required for fragment restoration), and
self-removethe restored zombie fragment in onCreate when no listener is
attached.


# Test Plan

Tested in the provided repro app, by running the following commands:

```
adb shell input keyevent KEYCODE_HOME
adb shell dumpsys activity activities | grep -E "dev.expo.videopiprestoreissue/.MainActivity|mHaveState|mIcicle|state=STOPPED"
adb shell am kill dev.expo.videopiprestoreissue
adb shell am start -n dev.expo.videopiprestoreissue/.MainActivity -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
```

Co-authored-by: dive <artyom.loenko@mac.com>
# Why

Follow up of #44954

# How

- update package versions
  - `react-native  0.85.2-> 0.85.3`  
  - `@react-native/normalize-colors 0.85.2 ->  0.85.3` 
  - `@react-native/babel-preset 0.85.2 ->  0.85.3` 
  - `@react-native/dev-middleware 0.85.2 ->  0.85.3`    

# Test Plan
 
bare-expo ios / android
minimal-tester ios / android
ci passed


# 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)
…packages (#45461)

# Why

Getting errors when precompiling Expo Widgets:

```
[2026-05-06T15:55:59.083Z] :x: [expo-widgets/ExpoWidgets] Generate sources failed: Could not find xcframework for external dependency @expo/ui/ExpoUI at expected path: /Users/expo/workingdir/build/packages/precompile/.build/@expo/ui/output/debug/xcframeworks/ExpoUI.xcframework
```

`@expo/ui` lives at `packages/expo-ui/`, a slug that differs from the
npm name

# How

`tools/src/Packages.ts`: for scoped names, `pathToLocalPackageJson` now
uses `require.resolve('@scope/name/package.json', { paths:
[PACKAGES_DIR] })`.

Workspace symlinks point at the real on-disk location regardless of the
slug, so this works for both standard layouts (`@expo/cli`) and
slug-mismatched ones (`@expo/ui`). The non-scoped fast path is
untouched.

# Test-plan

✅ run `et prebuild expo-widgets` to verify.
# Why

This regular expression is very expensive and slows down per-file checks
to >3ms, which adds up very quickly. We can now replace it with a
project-root relative check.

# 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)
expo-widgets@56.0.3
expo-video@56.1.0
expo-updates@56.0.4
expo-system-ui@56.0.4
expo-standard-web-crypto@56.0.2
expo-modules-jsi@56.0.1
expo-module-template@56.0.2
expo-dev-menu@56.0.3
expo-constants@56.0.4
expo@56.0.0-preview.5
eslint-config-expo@56.0.2
babel-preset-expo@56.0.4
@expo/prebuild-config@56.0.3
@expo/metro-file-map@56.0.0-2
@expo/log-box@56.0.4
@expo/cli@56.0.5
expo-template-blank-typescript@56.0.5
expo-template-blank@56.0.5
expo-template-bare-minimum@56.0.5
expo-module-scripts@56.0.2
expo-dev-client@56.0.3
expo-dev-launcher@56.0.3
expo-asset@56.0.4
expo-modules-core@56.0.3
@expo/metro-runtime@56.0.4
@expo/dom-webview@56.0.4
@expo/router-server@56.0.4
expo-router@56.0.4
expo-glass-effect@56.0.4
expo-image@56.0.4
expo-symbols@56.0.4
expo-linking@56.0.3
expo-status-bar@56.0.4
expo-web-browser@56.0.4
expo-device@56.0.4
expo-application@56.0.3
expo-crypto@56.0.3
expo-task-manager@56.0.3
expo-gl@56.0.3
expo-app-metrics@56.0.3
expo-image-loader@56.0.3
expo-build-properties@56.0.3
patch-project@56.0.5
expo-template-tabs@56.0.5
expo-template-default@56.0.5
expo-auth-session@56.0.3
expo-video-thumbnails@56.0.3
expo-tracking-transparency@56.0.3
expo-background-task@56.0.3
expo-background-fetch@56.0.3
expo-store-review@56.0.3
expo-sqlite@56.0.3
expo-sms@56.0.3
expo-sharing@56.0.3
expo-speech@56.0.3
expo-sensors@56.0.3
expo-secure-store@56.0.3
expo-screen-orientation@56.0.3
expo-screen-capture@56.0.3
expo-processing@56.0.3
expo-print@56.0.3
expo-observe@56.0.3
expo-notifications@56.0.3
expo-network-addons@56.0.3
expo-network@56.0.3
expo-navigation-bar@56.0.3
expo-mesh-gradient@56.0.3
expo-media-library@56.0.3
expo-maps@56.0.3
expo-mail-composer@56.0.3
expo-location@56.0.3
expo-localization@56.0.3
expo-local-authentication@56.0.3
expo-live-photo@56.0.3
expo-linear-gradient@56.0.3
expo-intent-launcher@56.0.3
expo-insights@56.0.3
expo-image-picker@56.0.3
expo-image-manipulator@56.0.3
expo-haptics@56.0.3
expo-document-picker@56.0.3
expo-doctor@1.19.5
expo-contacts@56.0.3
expo-clipboard@56.0.3
expo-cellular@56.0.3
expo-camera@56.0.3
expo-calendar@56.0.3
expo-brownfield@56.0.3
expo-brightness@56.0.3
expo-blur@56.0.3
expo-blob@56.0.3
expo-battery@56.0.3
expo-audio@56.0.3
expo-apple-authentication@56.0.3
@expo/app-integrity@56.0.3
expo-age-range@56.0.3
@pull pull Bot locked and limited conversation to collaborators May 6, 2026
@pull pull Bot added the ⤵️ pull label May 6, 2026
@pull pull Bot merged commit 307ab43 into code:main May 6, 2026
1 check failed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants