Skip to content

[pull] main from expo:main#830

Merged
pull[bot] merged 20 commits intocode:mainfrom
expo:main
May 4, 2026
Merged

[pull] main from expo:main#830
pull[bot] merged 20 commits intocode:mainfrom
expo:main

Conversation

@pull
Copy link
Copy Markdown

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

Wenszel and others added 20 commits May 4, 2026 12:24
# Why
This is the first PR from the stack aiming to improve the limited-permissions flow in calendar@next.
This PR adds the `presentPicker()` function, which allows selecting a calendar without requiring full access permissions.

# How
Implements the `presentPicker` function on iOS using `EKCalendarChooser`

# Test Plan
Tested on BareExpo - added a button to NCL


https://github.com/user-attachments/assets/60966fee-047d-487c-b8b6-e535ec2712c9
…45263)

# Why

There's no need to update this to not be repeated per transform (or per
worker), since we'll assume Hermes v1 as the default on SDK 56.

This is a prerequisite PR for further refactors to update the Babel
preset as needed.

# How

- Remove Hermes v1 flag from `babel-preset-expo` and assume it's the
default
- Remove Hermes v1 detection code from Metro transform worker

# Test Plan

- n/a

# 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

We decided to publish the codemod for migrating expo-router under
`expo-codemod` package.

**After this PR is merged, the canaries will be published for
https://www.npmjs.com/package/expo-codemod package**

# How

1. Move codemod code to `packages/expo-codemod`
2. Remove `private: false` from `package.json`

# 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

We should document how to export SPM artifacts with expo-brownfield  

# How

Add SPM instructions to brownfield isolated guide

# Test Plan

N / A

# 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

After merging #44791, running ESLint
results in the following warning being displayed:

```
=============


WARNING: You are currently running a version of TypeScript which is not officially supported by @typescript-eslint/typescript-estree.


* @typescript-eslint/typescript-estree version: 8.57.1
* Supported TypeScript versions: >=4.8.4 <6.0.0
* Your TypeScript version: 6.0.2


Please only submit bug reports when using the officially supported version.


=============
```

# How

Bumped all `@typescript-eslint/*` packages to the latest available.

# 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)
…with `ServerDocument` for injecting metadata and assets (#44827)

# Why

The streaming SSR pipeline currently uses a
[`TransformStream`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream)
to post-process the HTML byte stream and inject metadata and assets.
This was a temporary approach while we landed changes to other parts of
the pipeline so we could support [React 19's hoisting
mechanisms](https://react.dev/blog/2024/12/05/react-19#support-for-metadata-tags)
instead.

# How

- Added a new `ServerDocument` context, which is populated with any
relevant metadata/assets and consumed by `+html.tsx` via a
`useServerDocumentContext()` hook
- `getStreamingContent()` has been split out into its own file, and
re-exported (temporarily) from `renderStaticContent.tsx`
- Renamed HTML helper functions for assets
- Added `serializeMetadataToReact()` that returns `ReactNode[]`
- Updated the `+html.tsx` template to use the new
`useServerDocumentContext()` hook

# Test Plan

- CI
- Run the E2E fixture with `pnpm --filter @expo/router-e2e run
export:server-rendering && pnpm --filter @expo/router-e2e exec expo
serve`

# 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

close ENG-20702

# How

- add Icon component that support ios (SFSymbols) and android (material symbols xml).
- the project may need `@expo/material-symbols` to have material symbols easier
- to support tree shaking between ios string and android xml asset, this pr introduces a babel-plugin and transform `Icon.select({ ios: 'star.fill', android: import('@expo/material-symbols/star.xml') })` to platform fit resource
- [babel-preset-expo] automatically add expo ui plugin if it's resolvable

usage:

```tsx
<Icon
  name={Icon.select({
    ios: 'gearshape.fill',
    android: import('@expo/material-symbols/settings.xml'),
  })}
  size={28}
/>
```
# Why

Android crashes when attempting to resolve an import from `expo-widgets`
because the module does not exist on that platform (yet 🫣).

# How

Add a stub module for Android to prevent the import error.

# Test Plan

Integrate expo-widgets and build the Android app to verify it no longer
crashes.

# 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)
- [ ] 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

This PR allows users to create events in calendar using the system modal, bypassing the need for calendar permissions

# How
Implements `calendar.addEventWithForm` using the existing `presentEventEditViewController` function

# Test Plan
Tested on BareExpo - Added a button to NCL

https://github.com/user-attachments/assets/edbf319c-c3c0-4a74-ad2b-d0f9a758452b
…oHtml` and `headTags` (#45315)

# Why

Since metadata is now injected into the document as React nodes, the
HTML string serialization path is now unused and therefore dead code.

# How

Removed `serializeMetadataToHtml()` and any code that either called it,
or that it called into. Additionally, refactored the metadata tests to
be more strictly scoped to the functions they test.

# 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

close ENG-17707

# How

add feature parity support from react-native-webview to `@expo/dom-webview`:
- allowsInlineMediaPlayback
- mediaPlaybackRequiresUserAction
- allowsPictureInPictureMediaPlayback
- allowsAirPlayForMediaPlayback
- onContentProcessDidTerminate
- onRenderProcessGone
- automaticallyAdjustContentInsets
- imperative `reload`

unlike ios react-native-webview's `injectedJavaScriptObject`, expo dom-webview will reload when the prop is changed. [smart action](https://github.com/expo/expo/blob/main/apps/router-e2e/__e2e__/05-use-dom/components/02-actions.tsx) will reload on ios when switching to expo dom-webview. this pr tries to keep the `initialProps` stable by useRef

# Test Plan

[05-use-dom](https://github.com/expo/expo/tree/main/apps/router-e2e/__e2e__/05-use-dom) test cases

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

close ENG-20883

# How

- opt-out the experimental "bridge"
- use `dom={{ unstable_useExpoModulesBridge: true }}` to enable it

# Test Plan

[05-use-dom](https://github.com/expo/expo/tree/main/apps/router-e2e/__e2e__/05-use-dom) test cases - specific the native modules proxy

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

close ENG-20791

# How

- `useExpoDOMWebView` by default
- add `@expo/dom-webview` to dependencies of the expo package
- update docs

# Test Plan

- [05-use-dom](https://github.com/expo/expo/tree/main/apps/router-e2e/__e2e__/05-use-dom) test cases

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

The Calendar@Next is stable in the next sdk.
# How

- Added deprecated annotations with a recommended function in the new
API to the docs.
- Set isDeprecated to true
- Added a warning message
# Test Plan

Docs preview
@pull pull Bot locked and limited conversation to collaborators May 4, 2026
@pull pull Bot added the ⤵️ pull label May 4, 2026
@pull pull Bot merged commit 8fccdbb into code:main May 4, 2026
18 of 22 checks passed
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