Skip to content

[pull] main from expo:main#843

Merged
pull[bot] merged 18 commits intocode:mainfrom
expo:main
May 7, 2026
Merged

[pull] main from expo:main#843
pull[bot] merged 18 commits intocode:mainfrom
expo:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented May 7, 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 : )

kitten and others added 18 commits May 7, 2026 17:09
…ove symlink following (#44280)

# Why

`readdir`/`readdirSync` don't have a flag to turn off symlink-following.
This makes the calls potentially dangerous, since they can enter
uncontrolled directory traversals and infinite loops. While this
shouldn't be an issue for the directory we're scanning here, it's just a
few lines of code to replace this behaviour, so probably worth it.

Discovered as part of #44279

# How

- Replace `readdirSync(..., { recursive: true })` with manual directory
traversal

# Test Plan

- See #44279 for tests first

# 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)
…#45446)

# Why

The current data structure accumulates duplicates over time and doesn't
merge well, which can cause excessive GC runs and an unbounded increase
in memory over time.

# How

- Restructure data structure to shed `Set` and replace `{ request, path
}` structure
  - **NOTE:** This had nothing to merge on before
- Reduce cost of `customResolverOptions` serialisation for keying
- Add memoisation for previous map structure as a micro-opt

# Test Plan

- Existing tests (with changes to adjust the data structure) should pass
as-is

# 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

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

Fix ENG-20848

# How

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

- Update the CodePush migration conceptual differences section to
account for Channel Surfing
- Replace outdated wording that said release builds could not switch
update streams
- Link to the Channel Surfing docs for production-build runtime channel
switching

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

Proofread.

# 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: Kadi Kraman <hellokadi@gmail.com>
# Why

We're enabling prebuilds on iOS by default starting from SDK 56

# How

Update the default template to enable `EXPO_USE_PRECOMPILED_MODULES` var
by default

# Test Plan

run `pod install` inside BareExpo 

# 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

Another version - `4.25.0-beta.3` - of `react-native-screens` was
released, with breaking change to native tabs state management. This
should be the final version and if everything works correctly will be
upgraded to `4.25.0` tomorrow.

**Note**: Code bundled for our current beta version, will not align with
the `4.25.0-beta.3` - react-native-screens needs to be aligned with
router version

# How

# Test Plan

1. Bare expo
2. Router e2e
3. Expo go

# 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: Expo Bot <34669131+expo-bot@users.noreply.github.com>
…custom Babel transformers (#45495)

# Why

The `getCacheKey` function on Babel transformers is new, and is probably
missing from a lot of wrappers that use our transformer. We should fall
back to ours when it's missing, since the alternative is that no cache
key gets generated for a user's Babel config.

# How

- Check if we have a Babel config and fall back to our Babel
transformer's `getCacheKey` if the transform is missing one

> [!NOTE]
> We should aim to also move reanimated/worklets version to
`babel-preset-expo`'s `getCacheKey`. It's currently lacking one and we
should somehow embed it, and check what the right approach is. Getting
these versions out of the Metro config (which is then sourced into its
`getCacheKey` seems better

# Test Plan

- Manually verified with custom transformer

# 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)
@expo/ui@56.0.3
expo-symbols@56.0.5
expo-router@56.1.0
expo-modules-core@56.0.4
expo-linear-gradient@56.0.4
expo-calendar@56.0.4
expo-brownfield@56.0.4
expo-app-metrics@56.0.4
expo@56.0.0-preview.6
create-expo@3.7.3
@expo/metro-config@56.0.4
@expo/cli@56.0.6
expo-template-default@56.0.6
expo-template-tabs@56.0.6
expo-template-blank@56.0.6
expo-template-blank-typescript@56.0.6
expo-template-bare-minimum@56.0.6
@expo/log-box@56.0.5
expo-asset@56.0.5
expo-constants@56.0.5
expo-task-manager@56.0.4
expo-build-properties@56.0.4
expo-dev-menu@56.0.4
expo-dev-launcher@56.0.4
expo-widgets@56.0.4
patch-project@56.0.6
expo-background-task@56.0.4
expo-background-fetch@56.0.4
expo-sharing@56.0.4
expo-processing@56.0.4
expo-observe@56.0.4
expo-notifications@56.0.4
expo-location@56.0.4
expo-insights@56.0.4
expo-image-picker@56.0.4
expo-image-manipulator@56.0.4
expo-dev-client@56.0.4
expo-updates@56.0.5
# Why

For enrichment of the updates dashboard in EAS, it would be helpful to have channel and runtime version headers in all asset requests for updates.

# How

Inspection of the code indicates that the channel is already included in the headers for asset requests, but runtime version was only added for the full update requests. The runtime version headers are now added for assets in both iOS and Android versions of the FileDownloader class.

# Test Plan

Tests for the presence of the correct headers are added to the Updates E2E (enabled) CI.
# Why

- The Metro loading bar will show up multiple times in CI and
non-interactive terminals. This change removes any progress updates
until the bundling is complete. When observed in agents this appears to
make it clearer that a fix has been applied and the dev server does not
need to reset.
- I also fixed the `--port 0` issue and changed the behavior so it finds
the first available port instead of a random port.

# Test Plan

- Reproduced first with unit tests, then developed against the tests.
- Tested manually in a project.

---------

Co-authored-by: Expo Bot <34669131+expo-bot@users.noreply.github.com>
@pull pull Bot locked and limited conversation to collaborators May 7, 2026
@pull pull Bot added the ⤵️ pull label May 7, 2026
@pull pull Bot merged commit adb8e41 into code:main May 7, 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.

10 participants