Skip to content

[pull] main from expo:main#853

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

[pull] main from expo:main#853
pull[bot] merged 19 commits into
code:mainfrom
expo:main

Conversation

@pull
Copy link
Copy Markdown

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

sleda and others added 19 commits May 11, 2026 11:57
## Summary

Fixes the relative path for the default drawer toggle icon asset in Expo
Router's vendored React Navigation drawer implementation.

The previous path walked one directory too far up from
`src/react-navigation/drawer/views/DrawerToggleButton.tsx`, resolving to
a package-external `assets` directory instead of
`packages/expo-router/assets`.

## Test Plan

- Ran `pnpm build` in `packages/expo-router`
- Ran `pnpm lint` in `packages/expo-router` (passes with existing
import/order warnings outside this file)
- Verified the source and generated build paths resolve to
`packages/expo-router/assets/react-navigation/drawer/toggle-drawer-icon.png`

---------

Co-authored-by: Jakub Tkacz <32908614+Ubax@users.noreply.github.com>
# Why

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

- Sync Expo Skills changes
- Fix ENG-21129


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

Follow the updated steps for Cursor in the guide.

# 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

The Clerk guide has two separate `<Tabs>` blocks (integration approach
and platform-specific setup) that each track their own selected index. A
reader who picks "JavaScript only (Expo Go)" in the first tab set has to
re-select the matching tab further down the page, which is easy to miss
and can lead them through the wrong steps.

# How

Wrap the page contents in `<TabsGroup>` from `~/ui/components/Tabs` so
both `<Tabs>` instances share the same selected index via
`SharedTabsContext`.

# Test Plan

Open `/guides/using-clerk` locally, switch the first tab set between
"Native UI components", "JavaScript with native sign-in", and
"JavaScript only (Expo Go)", and confirm the platform setup tabs further
down the page move in lockstep. Reload the page and verify the default
tab still renders.

# Checklist

- [ ] I added a `changelog.md` entry and rebuilt the package sources
according to [this short
guide](https://github.com/nicknisi/dotfiles/wiki/Pull-Request-Guidelines).
- [ ] 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).
…45607)

# Why

The docs production build prints `Found 3 warnings while optimizing
generated CSS` with `Unexpected token Delim('!')` against the values
`100!%` and `90!%`. These come from arbitrary-value Tailwind classes
where the `!important` modifier landed inside the brackets, producing
invalid CSS for sidebar link `line-height` and the "Default:" prop-value
`font-size`.

<img width="2318" height="1528" alt="CleanShot 2026-04-24 at 17 44
23@2x"
src="https://github.com/user-attachments/assets/75d13667-5b79-4af9-867c-f0614a5207f8"
/>


# How

Move the `!` from inside the arbitrary-value bracket to Tailwind v4's
trailing-suffix position, so `leading-[100!%]` becomes `leading-[100%]!`
in `SidebarSingleEntry.tsx`, and `text-[90!%]` becomes `text-[90%]!` in
`APISectionUtils.tsx` (renderDefaultValue) and `APISectionTypes.tsx`.
The pre-v4 form was `!leading-[100%]` / `!text-[90%]`, and the migration
in #43623 collapsed the prefix into the bracket value rather than
emitting the new suffix syntax.

# Test Plan

Run a production build of the docs and confirm the three CSS optimizer
warnings are gone. Open `/versions/latest/sdk/image/` and verify that
the top sidebar link labels (Home, Guides, EAS, Reference, Learn) sit
flush against their icons, and that the inline `<code>` next to
"Default:" on props such as `priority` and `cachePolicy` renders visibly
smaller than body text, both inside the Props table and the Types
section.

Example:

<img width="2476" height="652" alt="CleanShot 2026-05-10 at 14 48 22@2x"
src="https://github.com/user-attachments/assets/84f13d35-cea0-4b77-b78c-069bbe200479"
/>


# Checklist

- [ ] I added a `changelog.md` entry and rebuilt the package sources
according to [this short
guide](https://github.com/nicknisi/dotfiles/wiki/Pull-Request-Guidelines).
- [ ] 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).
…o UI (#45606)

<!-- disable:changelog-checks --> 

# Why

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

<img width="2330" height="1512" alt="CleanShot 2026-05-10 at 14 28
00@2x"
src="https://github.com/user-attachments/assets/e83a3e5f-b393-453c-99e0-685b65274004"
/>


# How

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

For unversioned, SDK 56, and 55, generate API docs data for
`AccessoryWidgetBackground` in Expo UI from each branch.

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

Preview:

<img width="4104" height="1910" alt="CleanShot 2026-05-10 at 14 28
18@2x"
src="https://github.com/user-attachments/assets/147ace9f-ecef-4294-8afc-389a17cb8121"
/>


<img width="4112" height="2046" alt="CleanShot 2026-05-10 at 14 28
24@2x"
src="https://github.com/user-attachments/assets/f13cf61b-d59b-4802-a36a-c9ba6a11d892"
/>
<img width="4110" height="1884" alt="CleanShot 2026-05-10 at 14 28
30@2x"
src="https://github.com/user-attachments/assets/3a1c18d5-3ebe-4651-99ae-3fe38cf08861"
/>




# 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

In order to avoid regressions similar to
#45532, I propose that instead of
mocking image assets in router, we transform them to simple number
export. This way if the asset is removed or file is moved, we will see
the regression while running unit tests.

# How

Replace `packages/expo-router/__mocks__/imageMock.js` with
`packages/expo-router/__mocks__/imageTransformer.js`

# Test Plan

CI (it will fail until
#45170 (review) is
not merged)

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

# 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)
# Why

The main notable change in SDK 56 is that `watchFolders` isn't a
load-bearing config option anymore. It could legitimately be set to
`config.watchFolders = [];` (project root will be added automatically)
and an app in a monorepo will continue working. The On-Demand Filesystem
in `@expo/metro-file-map` will continue crawling on-the-fly, if a file
is missing in the monorepo, and will leave the monorepo even as needed.

Additionally, some changes have been made to `blockList`. They don't
break, but they surfaced that there's some common mistakes we can avoid.
`blacklistRE` is deprecated and we can always warn about it. A `/.../g`
or `/.../y` regex in `blockList` is a simple mistake, since it's a
stateful regex and should be removed.

# How

- Only check `watchFolders` if user is below SDK 56 or if
`onDemandFilesystem` is disabled
- Check `blockList` for regexes with `//g` or `//y` flag
- Warn when `blacklistRE` is used, since it's deprecated and conflicts

# Test Plan

- Unit tests added

# 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 need `useObserve` hook for correct router integration.

# How

1. Adds simple hook and provider. This is prerequisite for expo-router
integration
2. Uses the hook in the observe-tester app

# 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)
…ration page (#45628)

# Why

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

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

---------

Co-authored-by: Aman Mittal <amandeepmittal@live.com>
# Why

Documents the new `smart_retry` param on the Maestro `pre-packaged-jobs`
Maestro section, and corrects the stale `retries` default (it has been
`0`, not `1`, for a while).

# How

- `docs/pages/eas/workflows/pre-packaged-jobs.mdx`: add `smart_retry` to
the YAML syntax block and parameters table, fix `retries` default `1` →
`0`.
- `docs/pages/eas/workflows/syntax.mdx`: add `smart_retry` to the
Maestro YAML block, fix `retries` default `1` → `0`.

# Test Plan

Docs-only change. Verified locally.

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

Signed-off-by: Ash Wu <hsatac@gmail.com>
…o expo-observe (#45566)

## Why

Router-aware TTI tracking lived in `expo-app-metrics` as a global side
effect that scraped `globalThis.expo.router` and only captured the
*initial* route name.

Moving it into `expo-observe` (the user-facing package) lets us bind
metrics to the actual focused screen via Expo Router hooks and expose a
clean `useObserve()` API instead of a magic auto-init.

## How

- **New `useObserve()` hook in `expo-observe`** returning a
router-scoped `markInteractive` when expo-router is installed and the
integration is enabled, and falling back to the raw
`AppMetrics.markInteractive` otherwise.
- **`integrations/expo-router/` submodule** with `useObserveForRouter`
(uses `useRoute` / `useNavigation` / `useCurrentRouteInfo` to tag
metrics with the focused pathname and skip unfocused/unmounted screens)
and an `init` flag toggled by `configure`.
- **`expo-observe`'s default export is now a `Proxy`** that intercepts
`configure()` to strip `disableRouterIntegration`, run
`initRouterIntegration()` when applicable, and forward the rest to
native.
- **`expo-app-metrics` simplified**: `routerIntegration.ts` deleted,
`module.ts` reduced to `requireNativeModule`. Initial-route capture and
`markInteractive` wrapping move into `expo-observe`.
- **`expo-router` exports a new `useCurrentRouteInfo()`** hook (memoized
over `useStateForPath()` + `getCachedRouteInfo`) so the integration can
read the current pathname without reaching into globals.
- **`observe-tester` app** drops the local `router-metrics-integration`
shim and `_layout.tsx` toggle.
- **Tests**: `module.test.native.ts`, `useObserve.test.native.tsx`, and
platform-split `useObserveForRouter.test.{ios,android}.tsx` cover the
Proxy config-stripping, router-installed/disabled branches, focus
gating, and strict-mode `isMounted` restoration.
# Why

When unknown metrics was passed, it was by default categorized as
`app_startup`

# How

Map metrics to their otel name by category and metricName, instead of
just metric name

# Test Plan

1. Unit tests
2. Observe tester

# 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 May 11, 2026
@pull pull Bot added the ⤵️ pull label May 11, 2026
@pull pull Bot merged commit c98a8f7 into code:main May 11, 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.

8 participants