Conversation
## 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)
…lesPackageList` (#45632)
# 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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 : )