Conversation
# Why When building our precompiled XCFrameworks we get a lot of log output - a lot of it is not necessary. # How This PR fixes it by moving most of the trivial log output to a verbose option. This reduces the output when build from around 30.000 to 3000 lines with/without verbose. # Test-plan ✅ Ran both with/without `--verbose` option to verify that it still precompiles and displays warnings correctly.
# Why
When building 3rd party XCFrameworks, Skia failed locally when built
without cleaning:
```
❌ cpp/api/CustomBlendModes.h:10:15
> 10 | constexpr int kBlendModePlusDarker = 1001;
| ^ redefinition of 'kBlendModePlusDarker'
... redefinition of 'kBlendModePlusLighter', 'kPlusDarkerSkSL',
'kPlusLighterSkSL', 'CustomBlenders', 'applyBlendMode'
❌ Build Swift package failed: xcodebuild failed with code 65
```
This was caused by a stale hardlink after pnpm reinstall.
# How
SPMGenerator.ts flattens all package headers into a staging dir using
hardlinks, specifically so #pragma once works across include paths
(clang dedupes by inode). The skip condition for the relink, however,
was hasFileContentChanged(...) — content/size/mtime, not inode.
When pnpm reinstalled Skia (different patch hash → different
content-addressed .pnpm/ dir → fresh inode for CustomBlendModes.h,
identical bytes), the staged hardlink kept its old inode. Within a
single TU, clang then saw the header via two different inodes (staged
vs. -I source path) and processed it twice → redefinition errors for
every symbol in it.
Confirmed empirically:
source (May 6 20:30): inode 1761296556
staged (Apr 21 14:08): inode 1738862996
Fix: new exported helper refreshHardlinkIfNeeded(src, dest) that keys on
ino + dev and unlinks/relinks when stale. Replaces the inline
content-comparison block. Test in SPMGenerator.hardlinkRefresh.test.ts
simulates the same-content-new-inode case.
When running `et prebuild @shopify/react-native-skia` a small bug after
fix to ExpoWidgets build (#45461) the `@` prefix fell through. A
fix/test for this was also added by making `pathToLocalPackageJson` keep
the `require.resolve` test so that 3rd party projects use the old
path.join logic.
# Test-plan
✅ Run `et prebuild @shopify/react-native-skia` and verify that it works
without failure.
# Why - add support for formatting failed script execution in xcodebuild. <!-- 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: Phil Pluckthun <phil@kitten.sh> Co-authored-by: Expo Bot <34669131+expo-bot@users.noreply.github.com>
# 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 Unless I'm missing something, this was probably accidental from the pnpm migration. # 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 Bun is already defaulting to the isolated install, and since we support this well now (and have for a while), and are using pnpm ourselves now, we should drop this for newly created projects. # How - Drop setting `node-linker=hoisted` when creating projects with pnpm **Note:** I didn't mark this as a feature or breaking. It feels natural to just put it in "Others", since it's for new projects (so technically not breaking), and isn't a feature but a removal. # Test Plan - Manually tested # 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 This has been obsolete for a while, and there seems to be no need to check for this anymore. # How - Drop `EXPO_USE_EXOTIC` flag # 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 shouldn't have to check for `@expo/dom-webview` anymore, since it's automatically installed (and hence linked) via `expo`. We have `react-native-webview` as a fallback, but no check is technically required here anymore. We might want to tweak the dependency structure, but, as it stands, the resolution here isn't correct for isolated dependencies, and likely always failed. Just dropping the check since we know that _a_ webview (`@expo/dom-webview`) will be installed is fine though. At worst, we're moving an error for edge case setups into the runtime. # How - Drop webview installation check # Test Plan **Note:** Admittedly haven't tested this manually, but I have seen this fail when `react-native-webview` isn't installed in isolated installations, which is caused by the invalid check. # 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 <!-- 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 Adds an option to request only write permissions, requested in this issue: #33002 # How - Added a `writeOnlyAccess` prop to the config plugin - Added `CalendarWriteOnlyNextPermissionsRequester` and added other, corresponding requesters to the next package - Renamed: ExpoCalendarPermissions to `CalendarAccessGuard`, and added `CalendarPermissionRequester` to move the responsibilities from the module class. - Removed throwing RCTFatal in the legacy module when FullAccess permissions are not defined in the infoPlist # Test Plan - Added a new test screen to NCL - Tested the config plugin using: `et gba --useLocalTemplate -n test-app expo-calendar` with this screen: [calendar.tsx](https://github.com/user-attachments/files/27474671/calendar.tsx) Results: `writeOnlyAccess`: `true`: https://github.com/user-attachments/assets/09c6bada-fa29-4fd9-a600-93f4b76ffcc2 `writeOnlyAccess`: `false`: https://github.com/user-attachments/assets/aaff4658-6c3b-4aa8-a6b1-2525046fb5a9
# Why <!-- Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests. --> Fix ENG-21084 The Algolia crawler fails to index `https://docs.expo.dev/eas/cli/` with `Extractors returned too many records` (784 records, max 750). The page renders 114 commands, each with up to five `<H4>` subsection labels, which together exceed the per-URL record ceiling. Similar in spirit to #41905, where redundant heading-equivalent elements were trimmed from the App Config schema. # How In `EASCLIReference/index.tsx`, the `Usage`, `Argument(s)`, `Flag(s)`, `Alias(es)`, and `Examples` labels inside `CommandSection` are now rendered through a small `SubsectionLabel` component that emits a styled `<p>` instead of `<H4>`. Visual styling matches the previous heading (semibold, base size, tight tracking), but the elements no longer produce heading records, removing roughly 570 records and putting the page comfortably under the limit. The `<H3>` per command is preserved, so command anchors and Algolia sub-section grouping are unchanged. # Test Plan Run the docs locally and confirm `/eas/cli/` looks identical, that each command still has a working `#command-slug` anchor, and that the right-rail TOC continues to list commands. After deploy, I'll re-crawl the page in the Algolia dashboard and verify the URL inspector reports a successful index with records under 750. # 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).
# Why We should slowly add macOS support to more libraries, and we plan on using expo-linear-gradient in Expo Orbit # How Add macOS support to linear-gradient, most of the code was already compatible # Test Plan Run BareExpo macos locally <img width="1522" height="1664" alt="image" src="https://github.com/user-attachments/assets/ef5e604c-105f-4faf-a330-82fa97c6467e" /> # 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)
# Summary - Drop "other" from message if there's no `expo` update - Wrap result in a ref to have access to raw result early - Don't await result in non-interactive mode - Place result message below commands table and adjust rows fitment # Test Plan - Tested manually in `apps/router-e2e` # 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 As Alan pointed out on #45443, `et bump-rn` command is bumping the react-native dependencies inside expo-go vendored modules # How Fix `et bump-rn` command to not bump vendored modules and also update the root package.json resolutions field # Test Plan run `et bump-rn -v 0.85.3` # 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
Move Expo UI in a separate subsection similar to Expo Router
<!--
Please describe the motivation for this PR, and link to relevant GitHub
issues, forums posts, or feature requests.
-->
# How
Using `makeSection` util. I have placed it below Expo Router and above
Expo SDK as Expo SDK is a big section and requires some scrolling, lmk
if this ordering works.
<!--
How did you build this feature or fix this bug and why?
-->
# Test Plan
<table>
<tr>
<td><b>Before</b><br><img width="200"
src="https://github.com/user-attachments/assets/0d1c3add-9ab0-48bc-8a67-4996a81ebacf"
/></td>
<td><b>After</b><br><img width="200"
src="https://github.com/user-attachments/assets/6b7cd68e-1647-40a9-8e46-2a1bdf8fc288"
/></td>
</tr>
</table>
<!--
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: Kudo Chien <kudo@expo.dev>
# Why We need hero image depicting component. This PR adds images for SwiftUI components. Jetpack compose [PR](#45476) <!-- Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests. --> # How The screenshots are auto generated by rendering Expo UI components in NCL app using this skill - https://gist.github.com/intergalacticspacehighway/7d8b7bb410db0bbd7a00554e6967ec15 <!-- How did you build this feature or fix this bug and why? --> # Test Plan Run the docs locally, verify images in SwiftUI component docs. Test dark/light mode images. https://github.com/user-attachments/assets/6b2b06be-fc83-4ff4-b0d2-4001442a948b <!-- 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 Adds `MaskView` implementation on Android, which will be available via the `/community` export in upstack PR # How - New `MaskView` Compose view (`expo-ui/android/.../MaskView.kt`) # Test Plan upstack PR # 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 Add a drop-in replacement for [`@react-native-masked-view/masked-view`](https://github.com/callstack/masked-view) under `@expo/ui/community/masked-view`. # How - New `@expo/ui/community/masked-view` module exposing `MaskedView` with the upstream API (`maskElement: ReactElement` + arbitrary RN children + `ViewProps`). Each platform bridges RN children into the native masking primitive via `RNHostView`: - **Android**: Jetpack Compose graphics layer compositing with `BlendMode.DstIn`. Backed by an internal `MaskView` (formerly the public `@expo/ui/jetpack-compose/Mask` primitive — demoted to internal). - **iOS**: SwiftUI [`.mask(alignment:_:)`](https://developer.apple.com/documentation/swiftui/view/mask(alignment:_:)) via the existing public SwiftUI `Mask` primitive. - **Web**: no-op fallback — renders `children` unmasked with a one-time `console.warn` - the web implementation in the original community package doesn't look appealing. # Test Plan 1. Open NCL → UI → **Community MaskedView replacement** on Android and iOS. Verify each section renders correctly. # 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 docs for the downstack PRs # 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)
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 : )