Conversation
… instrumentation (#49637) # Why When xcodebuild builds a Swift package directly, Xcode synthesizes a scheme for it, and that scheme has code coverage enabled like any new scheme. Coverage is a build setting, so when it's on, swiftc gets `-profile-generate -profile-coverage-mapping` and clang gets `-fprofile-instr-generate`, and every function and branch region in the compiled code gets a counter increment. That instrumentation ended up in two places where it doesn't belong. The xcframework script runs a plain `xcodebuild build` in Release and never asks for coverage, but the scheme's setting still applied, so the shipped framework carried counters in every function on the host call path plus the `__llvm_prf_*` and `__llvm_cov*` sections. Without them the binary shrinks from 1.33 MB to 892 KB, so the instrumentation was about a third of the shipped framework. And `pnpm benchmark` runs `xcodebuild test` in Release, where coverage is Xcode's normal default, which puts the counters inside the very code being timed and makes the numbers pessimistic. # How The xcframework script sets `CLANG_COVERAGE_MAPPING=NO` (the only setting that actually removes the flags, see the comment there), and the benchmark script passes `-enableCodeCoverage NO`. This also adds a benchmark case for the unowned-`this` host function form that `@JS` functions bind to, since the existing no-op case only covers the owning-`this` overload. # Test Plan The verbose xcodebuild log no longer shows the profiling flags, `otool -l` shows no `__llvm_prf_*` sections in the built framework, and the binary went from 1.33 MB to 892 KB. `nm` on the benchmark binary shows no `___profc_` symbols anymore, and `pnpm benchmark` runs.
… shorthands (#49628) # Why > [!NOTE] > This is a prerequisite to upgrading pnpm The versions of dependencies on `main` have drifted and not been updated against the current versions. While this is currently ignored in `pnpm@10` due to `preferWorkspacePackages: true`, this will cause an error in future versions on pnpm. In general, keeping versions in the ranges for workspace packages isn't ideal. - Packages aren't published from `main`, so the package versions in dependencies are meaningless - Backporting changes where versions have changed causes conflicts, even if they're also meaningless pnpm already updates the dependencies specifiers to match the current versions in the workspaces when we're publishing. This means we can instead use shorthand specifiers and remove version numbers from our dependency specifiers entirely. # How - Temporary script that strips versions off of all dependencies (dev/peer/regular, but no changes applied to peer anyway, which the script validated) - Update `expo-module-scripts`'s exact/loose dependency specifier check to support shorthands - Update `tools`' `updateWorkspaceProjects` task to handle shorthands too (convert to exact shorthands of `workspace:` for canaries) - Also add an explicit dependency on `updatePackageVersions` having run first # Test Plan - CI should accept changes as-is # 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 > [!NOTE] > This is a prerequisite to upgrading pnpm This patch has become obsolete; see: https://github.com/kirillzyusko/react-native-keyboard-controller/blob/af130ca4f9d77061ca098dd4aaec13dda3d5b11f/android/src/main/java/com/reactnativekeyboardcontroller/views/overlay/OverKeyboardHostShadowNode.kt#L29 As of pnpm 11/12, a patch that fails to apply, even if it fails to apply cleanly (no changes) will hard fail, so this blocks the upgrade. # How - Remove obsolete patch # Test Plan - Validated that upstream source incorporates the patched change # 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. --> Follow-up expo/styleguide#228 # How <!-- How did you build this feature or fix this bug and why? --> - Bump @expo/styleguide-search-ui - Keep the search input rounded while focused # 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. --> <img width="1826" height="2088" alt="CleanShot 2026-09-02 at 16 59 40@2x" src="https://github.com/user-attachments/assets/d5e78e86-57ff-4bf5-9129-4714082dd188" /> # 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)
…le components (#49543) # Why <!-- Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests. --> Follow-up #49466 (review) # How <!-- How did you build this feature or fix this bug and why? --> Round in-content boxes to match the new radius scale in multiple components: - Collapsible - Prerequisites - Tabs - TabButton - PlatformTabs - Table - SnippetHeader - SnippetContent - Code - CommandLineTools - InlineHelp - NativeUpgradePromptCallout - PossibleRedirectNotification - ComponentExample - AppJSBanner # 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. --> **Callouts** <img width="2282" height="226" alt="CleanShot 2026-08-31 at 15 22 43@2x" src="https://github.com/user-attachments/assets/9c2dd65c-796b-4ba1-ba97-6166cf7c34fa" /> **Collapsibles** <img width="2338" height="456" alt="CleanShot 2026-08-31 at 15 22 58@2x" src="https://github.com/user-attachments/assets/19968323-f631-4403-bb98-16ba64a72bab" /> **Table** <img width="2314" height="702" alt="CleanShot 2026-08-31 at 15 22 54@2x" src="https://github.com/user-attachments/assets/af452834-f35f-4a98-9e27-180c3b1c7f9d" /> **Terminal** <img width="2244" height="384" alt="CleanShot 2026-08-31 at 15 23 11@2x" src="https://github.com/user-attachments/assets/b4477db3-3582-4691-92e8-cb5c81e6ac9b" /> **Code blocks** <img width="2252" height="672" alt="CleanShot 2026-08-31 at 15 23 33@2x" src="https://github.com/user-attachments/assets/18691c87-de9f-4b39-a7b9-6d3af35fe094" /> <img width="2198" height="1060" alt="CleanShot 2026-08-31 at 15 23 44@2x" src="https://github.com/user-attachments/assets/ecd47169-0423-431f-a9f9-df4d4e7935b1" /> **Prerequisites** <img width="2226" height="1200" alt="CleanShot 2026-08-31 at 15 24 31@2x" src="https://github.com/user-attachments/assets/d68497a3-7da2-48f7-8c22-2a9cd23db9b6" /> **Tabs** <img width="960" height="158" alt="CleanShot 2026-08-31 at 15 29 43@2x" src="https://github.com/user-attachments/assets/0b52f05c-774f-4376-88c8-c3a5ba6f1816" /> # 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-26260 # How <!-- How did you build this feature or fix this bug and why? --> - Change `STYLES_APIBOX` from `rounded-lg` to `rounded-3xl`. - Scope the nested-box radius to `APIBox`'s own nesting condition (`headerNestingLevel > 3` adds the concentric `rounded-lg`), since `STYLES_APIBOX_NESTED` is also used by top-level method, class, and interface boxes. - Round the sticky deprecation note's top corners to match the box; method-internal notes keep their squared override. - Round the app config schema stack's outer corners (`AppConfigSchemaTable`); the stacked rows stay attached. - Update the two affected Jest snapshots. # 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. --> <img width="2460" height="1522" alt="CleanShot 2026-08-27 at 23 30 26@2x" src="https://github.com/user-attachments/assets/628e198d-669c-4605-a740-453466ccfad8" /> <img width="2346" height="1590" alt="CleanShot 2026-08-27 at 23 31 16@2x" src="https://github.com/user-attachments/assets/4e25f819-0c3e-468e-bfc4-d3c029899992" /> ![Uploading CleanShot 2026-08-27 at 23.30.38@2x.png…]() **Preview links** - https://pr-49466.expo-docs.pages.dev/versions/latest/config/app/ - https://pr-49466.expo-docs.pages.dev/versions/latest/sdk/expo/ - https://pr-49466.expo-docs.pages.dev/versions/latest/sdk/notifications/ # 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. --> Part of the radius migration from #49389 # How <!-- How did you build this feature or fix this bug and why? --> - Change the card shells of `GridBox`, `GridCell`, the Explore APIs cells, the Talks cards, the Join the community card, and `StateOfRNBanner` from `rounded-lg` to `rounded-3xl`. - Match the four Quick Start gradient overlays to their parent cells, since they mirror the card radius by design. # 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. --> <img width="2546" height="1864" alt="CleanShot 2026-08-27 at 22 50 13@2x" src="https://github.com/user-attachments/assets/c0fcfed2-eb5e-4efd-bf70-405c82da7e85" /> <img width="2568" height="1646" alt="CleanShot 2026-08-27 at 22 50 08@2x" src="https://github.com/user-attachments/assets/88e641cc-baab-418d-b6fb-7074cea067fe" /> # 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)
…49463) # Why <!-- Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests. --> Part of the radius migration from #49389. # How <!-- How did you build this feature or fix this bug and why? --> - Change the outer containers of `FileTree`, `ProjectStructure`, and `TemplateFeatures` from `rounded-md` to `rounded-3xl`, leaving their inner rows and tabs unchanged. # 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. --> <img width="2340" height="1102" alt="CleanShot 2026-08-27 at 22 42 33@2x" src="https://github.com/user-attachments/assets/e8d17758-7c4d-4d52-a56f-651e4c01e7b6" /> <img width="2332" height="994" alt="CleanShot 2026-08-27 at 22 41 33@2x" src="https://github.com/user-attachments/assets/fd5b8fe1-322e-4e05-899b-d4554923c5e7" /> # 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-26255 # How <!-- How did you build this feature or fix this bug and why? --> - Change the `ContentSpotlight` image figure wrapper to `rounded-3xl` and add `overflow-hidden` so full-width screenshots clip into the curve; the inline video container follows. - Change the outer containers of `Diagram`, `FlowDiagram`, `ConfigPluginHierarchy`, and the two controlled-components diagrams to `rounded-3xl`, leaving their inner nodes unchanged. - Round the QR code box in the set-up-your-environment flow (`androidPhysicalExpoGo.mdx`) to `rounded-3xl`. - Leave the fullscreen lightbox untouched (no shell to round) and the `component` variant on its existing `rounded-md` override. # 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. --> <img width="2328" height="1262" alt="CleanShot 2026-08-27 at 22 11 41@2x" src="https://github.com/user-attachments/assets/3f042699-51ac-4264-baef-d5f547cae552" /> <img width="2294" height="1052" alt="CleanShot 2026-08-27 at 22 11 47@2x" src="https://github.com/user-attachments/assets/c22fc33d-cc84-4a2b-b70c-6b00272555a3" /> <img width="2094" height="1778" alt="CleanShot 2026-08-27 at 22 19 51@2x" src="https://github.com/user-attachments/assets/ae0474a7-0449-4b54-909d-6ddab65ce8de" /> <img width="688" height="554" alt="CleanShot 2026-08-27 at 22 30 42@2x" src="https://github.com/user-attachments/assets/f733e12b-5366-49e0-856a-546ce01b164f" /> # 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-26254 # How <!-- How did you build this feature or fix this bug and why? --> - Change the card shells of `BoxLink`,`Box` (used on authentication page) the footer Previous/Next cards, `VideoBoxLink`, `DownloadSlide`, `UIComponentGrid`, `SelectCard`, `MethodSelectCard`, `BuildEnvironmentSwitch`, and `ProgressTracker` from `rounded-md`/`rounded-lg` to `rounded-3xl`. - Set the `BoxLink` icon tile to `rounded-lg`, the concentric radius for its 16px inset. # 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. --> <img width="2314" height="798" alt="CleanShot 2026-08-27 at 21 55 18@2x" src="https://github.com/user-attachments/assets/bc09f1d2-8412-43a8-b623-c0a9d6a7304b" /> <img width="2294" height="306" alt="CleanShot 2026-08-27 at 21 55 24@2x" src="https://github.com/user-attachments/assets/7f522a40-67f9-46e2-8d21-4641a3213ba7" /> <img width="1890" height="590" alt="CleanShot 2026-08-27 at 21 55 28@2x" src="https://github.com/user-attachments/assets/2d203dd6-ae31-4b66-9a4e-1cbdfbfdee12" /> <img width="2350" height="2114" alt="CleanShot 2026-08-27 at 21 55 41@2x" src="https://github.com/user-attachments/assets/5c3367b1-401b-4c9e-8eb1-d59512f06edd" /> <img width="2438" height="902" alt="CleanShot 2026-08-27 at 21 56 10@2x" src="https://github.com/user-attachments/assets/1f55e1ca-05c7-4640-98c6-3d7603356ba4" /> <img width="2358" height="1510" alt="CleanShot 2026-08-27 at 22 00 23@2x" src="https://github.com/user-attachments/assets/13c685c3-85b5-48cd-9bc9-39918f5d223f" /> # 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-26253 # How <!-- How did you build this feature or fix this bug and why? --> - Change the `Form/Input` default radius from `rounded-md` to `rounded-3xl` (24px, the EAS dashboard input value) and `Form/Textarea` from `rounded-sm` to `rounded-2xl` (20px, the expo.dev contact form value). - Remove the now-redundant radius overrides in `FeedbackDialog`. - The footer newsletter input picks up the pill from the default; the embedded Sign Up button needed no adjustment. # 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. --> <img width="942" height="302" alt="CleanShot 2026-08-27 at 21 31 18@2x" src="https://github.com/user-attachments/assets/2984bd01-1880-4496-a998-6efc2faff6a2" /> <img width="844" height="302" alt="CleanShot 2026-08-27 at 21 31 23@2x" src="https://github.com/user-attachments/assets/f6af8493-85e4-4dd4-ba72-2c12a3889001" /> <img width="1350" height="1242" alt="CleanShot 2026-08-27 at 21 31 27@2x" src="https://github.com/user-attachments/assets/63a2446c-e2ce-48b3-817f-ec3a8fd1e34f" /> <img width="1184" height="1164" alt="CleanShot 2026-08-27 at 21 31 35@2x" src="https://github.com/user-attachments/assets/941b4ec7-267f-43f0-b8fb-7293906ce6c9" /> # 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)
) # Why <!-- Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests. --> Sidebar hover shapes still use the 6px default; the EAS dashboard's sidebar nav items measure 8px. Part of ENG-26237. # How <!-- How did you build this feature or fix this bug and why? --> - Change the hover shapes of `SidebarSingleEntry`, `SidebarCollapsible` headers, the `SidebarHead` back link, and the mobile `PageLink` from `rounded-md` to `rounded-lg`. Dots, version pills, and the collapse chevron box stay unchanged. # 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. --> <img width="558" height="338" alt="CleanShot 2026-08-27 at 23 42 08@2x" src="https://github.com/user-attachments/assets/88b524c6-379f-4e64-9806-a63cb035c1bb" /> <img width="562" height="392" alt="CleanShot 2026-08-27 at 23 44 18@2x" src="https://github.com/user-attachments/assets/28b13c4c-946e-42e6-9419-a44b7633f2a8" /> # 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 `background` modifier only accepted a color: ```ts export const background = (color: Color, shape?: Shape) => ... ``` SwiftUI's style overloads — [`background(_:ignoresSafeAreaEdges:)`](https://developer.apple.com/documentation/swiftui/view/background(_:ignoressafeareaedges:)) and [`background(_:in:fillStyle:)`](https://developer.apple.com/documentation/swiftui/view/background(_:in:fillstyle:)) — take any `ShapeStyle`, so gradients and hierarchical styles were out of reach, and `ignoresSafeAreaEdges` had no equivalent at all. Materials are the sharpest gap. #48905 taught `foregroundStyle` to accept them, but SwiftUI uses a material as a blurred backdrop *behind* content — that is what `background` is for. Until now the package could only paint a material onto text. ## How - `BackgroundModifier` decodes `ShapeStyleValue` (from #48905) instead of `Color` and forwards the erased `AnyShapeStyle` to the same shape switch as before. The no-shape branch now calls `background(_:ignoresSafeAreaEdges:)`, defaulting to `.all` exactly like SwiftUI. - The TypeScript wrapper mirrors the two SwiftUI overloads instead of growing a third positional parameter: ```ts export function background(style: ShapeStyle, options?: BackgroundOptions): ModifierConfig; export function background(style: ShapeStyle, shape?: Shape): ModifierConfig; ``` This keeps the API honest about a constraint SwiftUI enforces through its own overloads: `ignoresSafeAreaEdges` belongs to the shapeless overload only. `lineLimit` and `environment` already use overloads, and the docs generator renders them as separate entries. - A bare color is a valid `ShapeStyle` and the shape stays optional, so every existing `background('#FF0000')` and `background('#FF0000', shapes.capsule())` call keeps working unchanged — including one that passes a `Shape | undefined`. - `backgroundOverlay` is deprecated. It wraps `background(_:alignment:)`, which SwiftUI marks deprecated in favor of `background(alignment:content:)`, available since iOS 15. Both of its jobs are now covered: the `Background` component (#48904) draws an aligned view, this modifier draws a fill. Two things I deliberately left out, happy to add either if you disagree: - **`fillStyle`.** Its `eoFill` flag only changes rendering for self-intersecting paths, and none of the six shapes in `ShapeType` can produce one; `antialiased: false` only yields jagged edges. It would be public API that cannot change the output in any supported case. - **A combined edge set.** `ignoresSafeAreaEdges` takes a single value, matching the existing `ignoreSafeArea` modifier, so `[.top, .bottom]` is not expressible. Worth fixing across every edge-taking modifier at once rather than here. ## Open question: an options object instead of overloads? This PR is non-breaking, but there is a design fork I would rather settle with you than decide alone. The house style in this package is an options object — `frame({ … })`, `padding({ … })`, `shadow({ … })` — and by that logic `background` would ideally read `background(style, { shape, ignoresSafeAreaEdges })`, with everything that is optional in SwiftUI living in one bag. That is a breaking change: `background(color, shapes.capsule())` is called around 120 times in this repository alone, plus whatever is in the wild. I did not go there, for three reasons: 1. **A single object re-admits a combination SwiftUI forbids.** `ignoresSafeAreaEdges` exists only on the shapeless overload and `fillStyle` only on the shape one. I checked how TypeScript actually behaves: two overloads reject `{ shape, ignoresSafeAreaEdges }`, while one parameter typed `Shape | BackgroundOptions` accepts it — against a union target a property counts as known when it exists in any member, so excess property checking does not catch the mix. Rebuilding the constraint inside one bag needs mutually exclusive `?: never` fields, which is hand-written machinery for something the overloads express structurally. 2. **A positional shape is closer to SwiftUI, not further.** There `in shape:` belongs to a separate overload, and `clipShape` and `contentShape` in this package already take their shape positionally. 3. It would break one of the most used modifiers in the package. If you would rather have the options object, the migration is additive and need not happen now: add the object overload, mark the positional shape form `@deprecated`, and drop it in a major. I am happy to do it in this PR instead if you prefer. ## Test Plan Reworked the "Material foreground style" section of the modifiers screen in native-component-list into a "Shape styles" one, so the shared vocabulary is demonstrated once instead of twice: the backdrop is painted with `foregroundStyle`, and on top of it every material is shown as a `background` in the same capsule, so the thicknesses can be compared, plus a linear gradient in a rounded rectangle. Verified in bare-expo on the iOS simulator. The materials are shown in both color schemes, since adapting to the scheme is what separates a material from a translucent color: | Light | Dark | | --- | --- | | <img width="375" alt="image" src="https://github.com/user-attachments/assets/d8c1e934-ebf3-422b-bce0-4007b2c7f0c6" /> | <img width="375" alt="image" src="https://github.com/user-attachments/assets/437b7bf8-3b7d-4581-b17d-5b86296f8522" /> | Added `src/__tests__/background-test.ts` covering the payload the native side reads: bare colors, React Native color values, materials, gradients, the shape fields, and `ignoresSafeAreaEdges`. `et check-packages @expo/ui` passes and the app builds (`BUILD SUCCEEDED`). ## Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build - [x] Conforms with the Documentation Writing Style Guide --------- Co-authored-by: Aman Mittal <amandeepmittal@live.com>
…ks (#49631) # Why Profiling the no-op `@JS` host call showed most of its native time going to Swift reference counting of the runtime wrapper rather than to JSI. # How `JavaScriptValuesBuffer` now holds the runtime `unowned(unsafe)`, and the host function and host object contexts hold it as `Unmanaged` and read it through a shared guaranteed-reference helper, so the success path of a host call or a host object property access emits no retain or release at all. The lifetime argument lives on that helper. Since a guaranteed-reference scope cannot return a non-copyable value, the callbacks now hand their `jsi::Value` result back through an out-parameter instead of returning it. # Test Plan `pnpm test:integration` passes. `pnpm benchmark` (Release, Mac Catalyst), using the unowned-this case and the coverage-free benchmark build from the base PR: - no-op unowned-this host call: from 64.2 to 34.0 ns - no-op owning-this host call: from 89 to 59 ns
# Why For now, I did most of manual testing of router using `native-navigation` app from `router-e2e`. Since it is not related to cli e2e tests, we should extract this app from the router-e2e. # How 1. Create new `router-tester` app 2. Move `__e2e__/native-navigation` to `router-tester/app/src` I will move remaining `__e2e__` apps in follow-up PRs # Test Plan 1. Manual testing # 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 Add eas config for router-tester app, with different build profiles # 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) --- <sub>Stack created with <a href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a href="https://gh.io/stacks-feedback">Give Feedback 💬</a></sub>
…en not using a foreground service (#49642)
<img width="360" height="286" alt="Kooha-2026-09-01-12-32-00" src="https://github.com/user-attachments/assets/60b2bc26-0cb4-4fb7-b99d-f86c2d0d8146" /> # Why `@expo/ui` exposes Material 3's `Slider` in Jetpack Compose, but only horizontally. Today the only workaround is rotating the horizontal slider with a modifier, which breaks hit-testing and accessibility. Compose already ships `VerticalSlider` it just had no bridge. # How Adds a `VerticalSlider` component. It takes the same props as `Slider`, plus `reverseDirection`. # Test Plan Unit tests in `packages/expo-ui/src/jetpack-compose/Slider/__tests__/index.test.android.tsx`. Manually on Android in `SliderScreen.android.tsx`, which now renders a default and a reversed vertical slider. `et check-packages @expo/ui` passes. https://developer.android.com/reference/kotlin/androidx/compose/material3/VerticalSlider.composable - [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)
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 : )