Skip to content

[pull] main from expo:main#877

Merged
pull[bot] merged 10 commits into
code:mainfrom
expo:main
May 18, 2026
Merged

[pull] main from expo:main#877
pull[bot] merged 10 commits into
code:mainfrom
expo:main

Conversation

@pull

@pull pull Bot commented May 18, 2026

Copy link
Copy Markdown

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

vonovak and others added 10 commits May 18, 2026 19:13
# Why


[withAnimation](https://developer.apple.com/documentation/swiftui/withanimation(_:_:))
is useful to trigger native state based animation, by mutating state in
worklet callback swiftui animates the value changes.
<!--
Please describe the motivation for this PR, and link to relevant GitHub
issues, forums posts, or feature requests.
-->

# How

Adds JS API that matches the `withAnimation` Swift API.

### Usage

```js
const width = useNativeState(100);
const height = useNativeState(100);

withAnimation(Animation.spring({ response: 0.45, dampingFraction: 0.6 }), () => {
  "worklet";
  width.value = width.value === 100 ? 200 : 100;
  height.value = height.value === 100 ? 200 : 100;
});

```

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

# Test Plan

Tested locally. No examples/docs yet. It will be done in a separate PR.
This will be used internally in #45828
for now. We dont have too many modifiers supporting observable state so
it is not that useful currently (it is still useful if people extend
Expo UI)


https://github.com/user-attachments/assets/04b46b00-1d48-4cfc-afd3-3fb5b1d3e670


<!--
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: Aman Mittal <amandeepmittal@live.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…ll --fix` (#45816)

# Why

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

For TV projects that alias `react-native` to `react-native-tvos `(`"react-native": "npm:react-native-tvos@<version>"`), make the dependency validator detect the alias and derive the correct `react-native-tvos`install spec from the bundled `react-native` version, so that`expo install --check`/`--fix` warn and install with the correct TV variant instead of overwriting `react-native` with the upstream package.

# How

Detection reads `node_modules/react-native/package.json`'s `name` field (`"react-native-tvos"` for TV projects). The validator already loads that manifest for the version, and `name` is set authoritatively by the package — more reliable than the project's `pkg.dependencies` spec string, which can vary across package managers and lockfile rewrites.

The install spec is derived from the bundled `react-native` version because `react-native-tvos` ships per-minor dist-tags (`<major>.<minor>-stable`) and a `next` tag for pre-GA lines, so no separate `bundledNativeModules` entry for `react-native-tvos` is needed.

# Test Plan

- Tested in a new TV project. See https://github.com/douglowder/UpgradeTest for a project set up to manually test this change.
- New unit tests added to the CLI

<!--
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)
- [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)
…rallel folders sharing prefix [EXP-58] (#45882)

## Summary

The `tar.ts` extracting checks with `startsWith` had a typo that was
lacking a `+ path.sep` append to check that we're not writing to
parallel folders/files with the same prefix.

## 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)
…kage boundaries [EXP-17] (#45841)

## Summary

We shouldn't allow the `webpageRoot` to leave the package root for
devtools plugins. Practically, this isn't a huge concern, but makes sure
that malicious devtools plugins cannot chain this into something more
nefarious.

## Set of changes

- Apply fix to `expo-modules-autolinking` to sanitize `webpageRoot`
- Duplicate check to CLI just in case

# 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)
… [EXP-52] (#45877)

## Summary

Adds `expo login -p -` support to pass a password via stdin. This is
mostly for our own uses to isolate the password input away from shell
arguments, but is likely useful for users too.

## 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)
…-router routing and filter skip list [EXP-42] (#45900)

## Summary

This is a first pass at aligning the RSC server routing with expo-router
and expo-server, squashing the route conversion and path matching down
to take advantage of expo-router's data structures. This simplifies the
routing a lot and allows us to more easily add routing constraints to
RSC.

The "Component ID" minting has been centralized in the `expo-router`
codebase to create some more clarity around how they're created, and how
they ultimately match up on the server-side with the client-side.

The `skip` parameter feature has been constrained to properly disallow
skipping layouts, which was only loosely (and inaccurately) enforced
before via the Component IDs. This turned out to not be very effective,
but this wasn't clear since the conversion between our code and router
and the Waku-inherited code was too complicated to follow.

The new implementation now inherits server-side routing code from
`expo-router` instead.

This refactor doesn't touch the client-side router (yet) and hence
doesn't pass on the full `contextKey` to the server-side RSC router.
This means that overlapping layouts are still problematic, but this can
be fixed with another subsequent PR. Once the two are aligned, this
should unlock some more simplifications.

## 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)
@pull pull Bot locked and limited conversation to collaborators May 18, 2026
@pull pull Bot added the ⤵️ pull label May 18, 2026
@pull pull Bot merged commit c3b394d into code:main May 18, 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.

7 participants