Conversation
…iles (#43161) # Why <!-- Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests. --> Follow-up #43044 ## How - Reverted `extractFrontmatter()` in `scripts/generate-markdown-pages-utils.ts` to keep all frontmatter fields, only stripping lines with empty values (e.g. `modificationDate:` with no value from shallow CI clones). - Restored the original filter regex from `/^modificationDate:\s+\S/` (keep only modificationDate) back to `/^\w+:\s*$/` (strip empty-value lines). - Fixed the return delimiter format from `'---\n' + filtered + '\n---\n'` back to `'---\n' + filtered + '---\n'`. - Reverted the corresponding tests in `scripts/generate-markdown-pages-utils.test.ts` to match the pre-#43044 behavior. # 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. --> Run `yarn run export-preview` and then serve the `out` directory using `npx serve out`. Then, open a page in docs and click View Markdown: <img width="1922" height="464" alt="CleanShot 2026-02-16 at 12 42 31@2x" src="https://github.com/user-attachments/assets/b6724c72-27f4-4788-b519-c7af981f1925" /> Run `yarn test` and confirm the `extractFrontmatter` tests pass. # 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 This PR updates the labels in the developer menu for better consistency across platforms. It renames "JS debugger" to "DevTools" and makes other label adjustments to provide a more unified experience. # How - Changed a couple of labels - updated dev tools icon - Updated documentation to reflect these label changes - Removed unused string resources from Android strings.xml # Test Plan - tested locally, green CI # 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)
…and properly default to `null` (#43143) # Why We accidentally had the `|| null` fallback for `origin` in the environment values, rather than only in the last `origin()` call. This matched `globalThis.origin` (which also has this default) but not the `origin()` API convention. We also used the `Origin` header in development environments, which isn't guaranteed to be present. We assume development has no request forwarding that's relevant to us, so we can always use `request.url` instead. **This shouldn't be backported to SDK 54 as it's technically a breaking change.** # How - Switch to `request.url` for deriving `origin` in development (node and workerd adapters) - Fix `origin` type in `RequestAPI` to allow `null` - Remove `|| 'null'` for `|| null` defaults in adapters # 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 Changes to `*.web.*` files do not affect Android and iOS builds, so they shouldn't trigger the test suite E2E. This is the case here: #43153 # How Add `**/*.web.*` to `shared-ignores`. List of affected files: [web.txt](https://github.com/user-attachments/files/25339421/web.txt) # Test Plan Tested on a stacked PR.
# Why Part of a PR stack the brings more feature parity between web and native Adds audio sampling on web # How Web has good support for this using `AnalyserNode` # Test Plan Bare expo
…anges (#43015) # Why I wanted to add clear errors if the plugin is misconfigured due to changes introduced in :#43014 , but I've found it impossible to actually detect if the service has successfully started with the current singleton-based implementation for some reason. # How - Migrate to having a separate Recodring and playback services - Use the pattern of having a single service and multiple service connections and bindings - Add errors if the plugin is misconfigured - Try connecting to the service in the recording preparation, if connection fails throw an error - For the controls service, we don't have the luxury of having an async function to wait to connect to the service, so we start the playback and update the service once it connects. If it fails we use the jsLogger to send a visible non-fatal error to developers # Test Plan Tested in prebuilt NCL on Android
# Why Part of a PR stack the brings more feature parity between web and native Adds media controls on web # How <img width="317" height="515" alt="Screenshot 2026-02-14 at 10 52 44" src="https://github.com/user-attachments/assets/85cf2e9c-df51-4b18-9fd5-3707bf8a3846" /> <img width="360" height="208" alt="Screenshot 2026-02-14 at 10 38 33" src="https://github.com/user-attachments/assets/48b34d93-2fa8-485c-80d0-45fe0ee788b3" /> # Test Plan Bare expo
# Why Part of a PR stack the brings more feature parity between web and native Adds selecting the recording input on web # How Access `navigator.mediaDevices` to get the list of available devices # Test Plan Bare expo
# Why Part of a PR stack the brings more feature parity between web and native Adds metering support for recordings on web # How Similar to sampling, we can do this with an `AnalyserNode`. We use the same algorithm we do on native in `getMeteringLevel()` # Test Plan Bare expo
# Why `AudioPlayer.web` has gotten huge. # How Refactor player, recorder and utils into separate files. # Test Plan Bare expo
…rs (#43171) # Why This allows us to preload all server modules in one method. This is useful to hoist loading of any split modules to an ahead of time point (e.g. top-level await) # How - Add `preload` common environment method - Expose `preload` method on EAS and workerd request handler # Test Plan - Ran through a manual deployment flow, works as expected # 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
The tests in the previous setup:
- Brownfield artifacts publishing
- Test app build
- Maestro execution on emulator
All executed in a single job were unstable, ending in:
```sh
FATAL | Not enough space to create userdata partition. Available: 4031.36 MB \
at /home/runner/.android/avd/avd-36.avd, need 7372.80 MB.
```
# How
Split the publishing & building app and test execution into two jobs,
similar to other E2E workflows
# Test Plan
Ensured the updated setup works on CI
# Checklist
N / A
# Why * Maintaining `expo-ui.bundle.swift` is almost impossible to be up-to-date * User can have different expo-ui version # How Use scripts similar to `@expo/log-box` to add a build step that prepares the bundle. # Test Plan Run widgets-tester. Everything should still work without any changes.
…se shapes (#43158) ## Problem `ClipShapeModifier` and `MaskModifier` use a raw `String` for the shape field instead of the `ShapeType` enum. Only `"circle"` and `"roundedRectangle"` are handled -- everything else falls through to `Rectangle()` silently. So `clipShape("capsule")` renders a rectangle. No error, no warning. Every other shape modifier (`BackgroundModifier`, `ContainerShapeModifier`, `ContentShapeModifier`, `GlassEffectModifier`) uses `ShapeType` with exhaustive switching. These two just got missed when `ShapeType` was introduced in #40748. ## Fix - `ClipShapeModifier`: `@Field var shape: String` → `@Field var shape: ShapeType` - `MaskModifier`: `@Field var shape: String` → `@Field var shape: ShapeType` - Exhaustive switch on all 5 `ShapeType` cases, no `default` fallthrough - Added `roundedCornerStyle` and `cornerSize` fields, switched to `makeCapsule(style:)` and `makeRoundedRectangle(cornerRadius:cornerSize:style:)` helpers to match `ContentShapeModifier`/`BackgroundModifier`/`ContainerShapeModifier` - TypeScript types for `clipShape()` and `mask()` updated to include `'capsule' | 'ellipse'` ## Test plan - `clipShape("capsule")` → capsule clipping (not rectangle) - `clipShape("ellipse")` → ellipse clipping (not rectangle) - `mask("capsule")` / `mask("ellipse")` → same - Existing shapes (`rectangle`, `circle`, `roundedRectangle`) unchanged
…43169) # Why There were some insights from the team, that compilation test for iOS is clogging the CI, as it occupies two runners for around an hour # How iOS compilation test now runs as a single job, thus occupying only one runner for roughly two hours # Test Plan Ensured that the updated workflow passes on the CI # Checklist N / A
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 : )