Skip to content

Conversation

@pull
Copy link

@pull pull bot commented Jan 26, 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 : )

behenate and others added 15 commits January 26, 2026 16:51
…rvices (#42548)

# Why

Expo Go uses the QR scanner which requires PlayServices. This means that
Expo Go can't scan on devices such as Meta Quest.

# How

Add a basic fallback scanner activity that can be used on devices
without Play Services.

<img height="300" alt="fallback_scanner"
src="https://github.com/user-attachments/assets/5e7b3cff-a4a9-4160-b6a7-f48cbb778cda"
/>


# Test Plan

Tested in Expo Go on a quest and a device with Play Services.

# 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 Bot <34669131+expo-bot@users.noreply.github.com>
Co-authored-by: Jakub Grzywacz <kontakt@jakubgrzywacz.pl>
…Jest (#42527)

# Why

Our Playwright E2E test suite is getting really slow (upwards of 20
minutes) due to E2E tests that could be using Jest instead.

# How

- Converted middleware matcher tests from Playwright to Jest
- Modified the multi-runtime E2E test helper to allow overriding
environment variables for `expo serve`

# Test Plan

- CI

# Checklist

- [ ] 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).
- [ ] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
# Why

<!--
Please describe the motivation for this PR, and link to relevant GitHub
issues, forums posts, or feature requests.
-->

# How

<!--
How did you build this feature or fix this bug and why?
-->

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

# 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

Follow-up/Fix for #42478

I missed that this was also doing a port-scan, since I misunderstood
what the range was for (it's for finding a contiguous range of ports
rather than the max attempts at finding a free port). When reading the
check using `port === defaultPort`, I assumed that the next available
one is counted up in our own logic.

# How

- Add differentiation between `testPortAsync` and (new) `freePortAsync`
to make difference clear and readd port scanning

# Test Plan

# 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)
…` path (#42516)

# Why

npm installs dependencies slightly differently compared to Bun/pnpm;
when using npm, the `@expo/router-server` package would get installed
under `node_modules/@expo/cli/node_modules` rather than being hoisted to
the top-level `node_modules/`.

Because we were using `resolve-from` to resolve the package from the
project root, it wasn't able to find the package, hence causing the
error.

Fixes #42505.

# How

Replace usages of `resolve-from` with `require.resolve` when trying to
resolve `@expo/router-server`.

# Test Plan

1. Built `expo-router` with the changes in this PR and packed them with
`npm pack`
2. Created new projects with:
    - `npx create-expo-app@latest --template default@next`
    - `bunx create-expo-app@latest --template default@next`
    - `pnpx create-expo-app@latest --template default@next`
3. Installed the tarball from Step 1 into each of the newly-created
projects and ran the `web` package script

# 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).
- [ ] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
# Why

<!--
Please describe the motivation for this PR, and link to relevant GitHub
issues, forums posts, or feature requests.
-->

# How

<!--
How did you build this feature or fix this bug and why?
-->

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

# 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: Hassan Khan <hassan@expo.dev>
# Why

Add a reference for restoring and saving ccache under
https://docs.expo.dev/build-reference/caching/ This will detail how to
use it for builds, workflows, and the behavior of user scoped and
default branch caches

<!--
Please describe the motivation for this PR, and link to relevant GitHub
issues, forums posts, or feature requests.
-->

# Checklist

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

- [x] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)

---------

Co-authored-by: Stanisław Chmiela <sjchmiela@users.noreply.github.com>
See: https://github.com/facebook/react/releases/tag/v19.2.4

This patch release follows on from:
https://expo.dev/changelog/mitigating-critical-security-vulnerability-in-react-server-components

We're bumping the permitted peer dependency ranges for
`react-server-dom-webpack` and updating the `expo install` automated
version recommendations.

Updates will be needed if:
- You have experimental React Server Functions or Server Components
support enabled in your Expo app
- You have another server-side app in your repository that relies on
`react-server-dom-webpack`
# Why

Currently `expo-dev-client` isn't supported in isolated brownfield setup
(using `expo-brownfield`) and only `expo-dev-menu` is (dev-client would
crash in UIKit with any view controller different than
`UINavigationController` and in all Android apps). We should be warning
the user about this if we detect that they're using dev client

# How

Extended the config plugin to check and (once per prebuild) display
warning that `expo-dev-client` is being used along with
`expo-brownfield`, using the plugins configuration from `app.json` or
information from `package.json`.

# Test Plan

Tested using `minimal-tester`:

1. With `dev-menu` instead of `dev-client` as dependency specified in
`package.json`:

``` bash
> npx expo prebuild --clean / npx expo prebuild -p ios --clean / npx expo prebuild -p android --clean
✔ Cleared android, ios code
✔ Created native directories
› Using symlinked expo instead of recommended expo@~55.0.0-preview.6.
✔ Updated package.json | no changes
» android: userInterfaceStyle: Install expo-system-ui in your project to enable this feature.
✔ Finished prebuild
✔ Installed CocoaPods
```


2. With `dev-client` as dependency specified in `package.json` (or also
in `app.json`):

``` bash
> npx expo prebuild --clean / npx expo prebuild -p ios --clean / npx expo prebuild -p android --clean
⚠ It seems that you're using `expo-dev-client` with `expo-brownfield`
`expo-dev-client` isn't currently supported in the isolated brownfield setup
Please use `expo-dev-menu` instead
✔ Cleared android, ios code
✔ Created native directories
› Using symlinked expo instead of recommended expo@~55.0.0-preview.6.
✔ Updated package.json | no changes
» android: userInterfaceStyle: Install expo-system-ui in your project to enable this feature.
✔ Finished prebuild
✔ Installed CocoaPods
```

# 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).
…2565)

# Why

The log-box would extend the size of the `<body>` tag on web when you
weren't using the scroll view style reset.

# How

Moved global CSS variables from global.css to Overlay.module.css and
removed the global.css file. Updated imports in Overlay.tsx and
ErrorToast.tsx to use the module CSS. Enhanced renderInShadowRoot to
inject reset styles directly into the Shadow DOM for better isolation
and to avoid layout impact.

# Test Plan

- Built on web and iOS.
- Checked the router-e2e tests to ensure no extra layout.

---------

Co-authored-by: Expo Bot <34669131+expo-bot@users.noreply.github.com>
# Why
Adds a delegate method so you can choose to disable the "Open React Native dev menu" option.

# How
Add method to `DevMenuHostDelegate`

# Test Plan
Expo go. Option is disabled.
# Why
Implement new `DevMenuHostDelegate` method to disable "Open React Native dev menu" option in dev menu

# Test Plan
Expo go
@pull pull bot locked and limited conversation to collaborators Jan 26, 2026
@pull pull bot added the ⤵️ pull label Jan 26, 2026
@pull pull bot merged commit 0a0dcd3 into code:main Jan 26, 2026
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.