Skip to content

Conversation

@pull
Copy link

@pull pull bot commented Jan 20, 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 15 commits January 20, 2026 10:55
# Why

Initial implementation of Expo Widgets, will need a few follow ups and
improvements before alpha.

# How

Updating widget snapshot serializes `@expo/ui` views tree to JSON and
then recreates it in widget/live-activity using SwiftUI.

# Test Plan

Manual testing in #42094
# Why

When using `withAnchor` to navigate to deeply nested routes (e.g.,
`/second/third/target`), the anchor route was only being loaded for the
root level of the navigation stack. This meant that when navigating back
from a deeply nested screen, users would not see the expected anchor
screen at intermediate navigation levels.

Fixes #40230

**Before**



https://github.com/user-attachments/assets/ef97423e-3174-44bd-873a-776ea1387bf9



**After**


https://github.com/user-attachments/assets/546563b4-e573-4bb7-8503-49a7f1602db7



# How

The fix propagates the `initial` parameter through all nested `params`
objects in the navigation payload, not just the root level. Previously,
only `rootPayload.params.initial` was set, but nested navigators also
need this flag to properly load their anchor routes.

The change replaces:
```ts
rootPayload.params.initial = !withAnchor;
```

With a loop that traverses all nested params:
```ts
let currentParams = rootPayload.params;
while (currentParams) {
  currentParams.initial = !withAnchor;
  currentParams = currentParams.params;
}
```

Additionally, the condition `withAnchor !== undefined` was simplified to
just `withAnchor` since the only meaningful case is when `withAnchor` is
truthy.

# Test Plan

1. Unit tests
2. Manual testing

# 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

Actions that revolve around the symlink (e.g. `npm pack` or just
directly running `yarn prepack`) end in an error wven though the file
exists:

```bash
> expo-brownfield@0.0.1 prepack
> cp -L plugin/templates/ios/ExpoAppDelegate.swift plugin/templates/ios/ExpoAppDelegate.swift.tmp \
  && mv plugin/templates/ios/ExpoAppDelegate.swift.tmp plugin/templates/ios/ExpoAppDelegate.swift

cp: plugin/templates/ios/ExpoAppDelegate.swift: No such file or directory
```

That's because symlink seems to be an absolute path instead of a
relative one:

```bash
> ls -al plugin/templates/ios

total 64
drwxr-xr-x  11 patrykmleczek  staff   352 Jan 20 10:56 .
drwxr-xr-x   5 patrykmleczek  staff   160 Jan 20 10:30 ..
lrwxr-xr-x   1 patrykmleczek  staff    87 Jan 20 10:56 ExpoAppDelegate.swift -> /Users/gabriel/Workspace/expo/expo/packages/expo/ios/AppDelegates/ExpoAppDelegate.swift
-rw-r--r--   1 patrykmleczek  staff   516 Jan  9 08:13 Info.plist
```

# How

Changed symlink to be a relative path to the original
`ExpoAppDelegate.swift`

# Test Plan

Tested using `npx expo prebuild` and `npx expo-brownfield build-ios` in
`apps/minimal-tester`

# Checklist

- [X] This diff will work correctly for `npx expo prebuild` & EAS Build
(eg: updated a module plugin).
# Why

Interactive widgets are cool.

# How

Set the update function and invoke it in JSC when interaction is made.
# Why

`expo-widgets` should not be available in Expo Go

# How

Exclude package from autolinking

# Test Plan

`pod install` in `expo-go`
Co-authored-by: Kadi Kraman <kadi@expo.io>
# Why

`expo-router` was missing from modules in expo-go on Android

# 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)
@pull pull bot locked and limited conversation to collaborators Jan 20, 2026
@pull pull bot added the ⤵️ pull label Jan 20, 2026
@pull pull bot merged commit 514d9b1 into code:main Jan 20, 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.

6 participants