Skip to content

Conversation

@pull
Copy link

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

aleqsio and others added 16 commits January 19, 2026 07:50
Co-authored-by: Łukasz Kosmaty <kosmatylukasz@gmail.com>
# Why

Adds a config plugin for expo-widgets 

# How

This config plugin consists of the following components:
* withPodsLinking - Adds an entry to the Podfile that links pods from
the main app to the target.
* withWidgetSourceFiles - A `withDangerousMod` that generates the
required swift files based on the `app.json` config.
* withLiveActivity - Sets the `NSSupportsLiveActivities` flag in the
`Info.plist`, which is required to run Live Activities.
* withPushNotification - Enables push notifications - these may be
necessary for some use cases, for example frequent refreshing.
* withAppGroupEntitlements - Connects the target and the app by
`groupIdentifier` specified in the config.
* withTargetXcodeProject - Configures the Xcode project, registers
generated files from withWidgetSourceFiles, and sets the
`IS_EXPO_WIDGET` build property.

# Test Plan
Tested using `npx create-expo-app@latest projectname --template blank`

---------

Co-authored-by: Jakub Grzywacz <jakub.grzywacz@swmansion.com>
# Why

In order to reduce the amount of boilerplate in the brownfield template
and facilitate "reexporting" Expo classes into the final xcframework, we
should symlink ExpoAppDelegate to iOS template, so that way these files
will never get out of sync.

The only caveat is that we need to use `internal import` for
ExpoModuleCore and we keep the same class name otherwise the compiler
fails due to duplicated symbols. To circumvent that, when running
prebuild, we apply a patch to ExpoAppDelegate.


# How

- Symlink `ExpoAppDelegate` to iOS template and add a patch to
expo-brownfield
-  Simplify `withXcodeProjectPlugin` structure
-  Remove unnecessary imports from `ExpoAppDelegate`

# Test Plan

`npx expo-brownfield build-ios`

# 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

Search params were being stripped from client-side loader fetches,
causing inconsistent behavior between SSR and client-side navigation.
This also causes duplicate loader invocations when search params were
present.

# How

- In `getLoaderModulePath()`, we now preserve and append the search
string when constructing loader URLs
- In `renderStaticContent()`, we now create the `loadedData` cache key
using `location.pathname + location.search`

# Test Plan

- CI
- Manual testing

# 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

Small changes required for widgets
…ctions (#42051)

# Why

This allows users to return a `Response` object from a loader function,
which allows controlling characteristics (such as `Cache-Control`
headers) which we'll take advantage of in the `useLoaderData()` hook in
the future.

# How

Made changes to the dev/SSG loader pipeline in `MetroBundlerDevServer`
to enable returning a `Response` object or a regular JavaScript object
(for backwards compatibility). In SSG, we extract the body from Response
and serialize the result, stripping any custom headers since the output
is pre-rendered static files.

For SSR, expo-server also checks for a `Response` object and returns it
as-is, preserving any custom headers. As an example:

```typescript
export async function loader() {
  return Response.json({ foo: 'bar' }, {
    headers: {
      'Cache-Control': 'public, max-age=3600',
      'X-Custom-Header': 'test-value',
    },
  });
}
```

# Test Plan

- CI
- Manual testing

# 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

There was a breaking change in NativeTabs API and in order to stabilize
native-tabs in router we need to upgrade screens to 4.20.0

# How

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

# Test Plan

1. Test navigation in router-e2e
2. Test bare-expo
3. Test expo-go

# 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)
…s for all routes (#42271)

# Why

We currently don't document how to set user-defined headers for Expo
apps, support for which was added in
#40173.

# How

Created a new page in the documentation with examples of how to add
user-defined headers, along with its limitations.

# 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).
- [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: Aman Mittal <amandeepmittal@live.com>
Co-authored-by: Phil Pluckthun <phil@kitten.sh>
# Why
Migrates obj-c files to swift where possible

# Test Plan
Expo go
# Why
Removes unnecessary imports

# Test Plan
Expo go
# Why
Uses swift concurrency consistently instead of a mixture of it and combine

# Test Plan
Expo go
# Why
Removes more legacy code that's no longer needed from expo go

# Test Plan
Expo go
# Why

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

Fix ENG-18860

`@experimental` annotation only shows up in the header because
`APIBoxHeader` calls `getTagNamesList` to build its tags. In the methods
renderer, we weren't passing any comment into `APIBoxHeader`, so it
never sees the `@experimental` tag.

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

Tested it locally with Expo Sharing package by adding `@experimental`
annotation to a method.

<img width="1928" height="750" alt="CleanShot 2026-01-20 at 02 45 07@2x"
src="https://github.com/user-attachments/assets/34528186-1376-428a-8b57-0f20e36c6438"
/>

Result:

<img width="2500" height="1068" alt="CleanShot 2026-01-20 at 02 44
57@2x"
src="https://github.com/user-attachments/assets/6824fcd8-41b5-4521-b640-520a49531a02"
/>


# 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

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

Fix ENG-18803

The prerequisite mentions SDK 54. I think with the new SDK upcoming, the
second statement under Prerequisite section should mention using
`latest` tag to create an Expo project or the `expo` sdk version in a
project.

# How

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

* Clarified that an Expo project can be created with `npx
create-expo-app@latest` or by installing the latest `expo` package
version, instead of requiring Expo SDK 54 specifically.
* Added a note explaining that the `codex mcp add` command updates your
Codex configuration and prompts for Expo account authentication.
* Improved instructions for generating a personal access token by
providing a direct link to the Access Tokens settings page and breaking
down the steps for clarity.

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

Run the docs app locally, and visit: http://localhost:3002/eas/ai/mcp/

## Preview

<img width="870" height="234" alt="CleanShot 2026-01-19 at 16 56 51"
src="https://github.com/user-attachments/assets/fba3f2cb-26c9-4f7d-8875-e8ce4c634ed0"
/>

<img width="879" height="248" alt="CleanShot 2026-01-19 at 16 57 28"
src="https://github.com/user-attachments/assets/9b76aca0-6d95-4245-bb2a-9aa0dae92593"
/>


# 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).
- [x] 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 19, 2026
@pull pull bot added the ⤵️ pull label Jan 19, 2026
@pull pull bot merged commit f12eafe into code:main Jan 19, 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.

9 participants