Skip to content

[pull] main from expo:main#585

Merged
pull[bot] merged 11 commits intocode:mainfrom
expo:main
Feb 12, 2026
Merged

[pull] main from expo:main#585
pull[bot] merged 11 commits intocode:mainfrom
expo:main

Conversation

@pull
Copy link

@pull pull bot commented Feb 12, 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 : )

amandeepmittal and others added 11 commits February 12, 2026 15:22
# Why

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

Improves the markdown generation pipeline so scene-based Set up your
environment doc and tabbed terminal commands are captured correctly in
generated .md files, and tightens frontmatter xtraction to keep only
useful metadata (`modificationDate`).

# How

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

- Added `scripts/scene-page-manifest.ts` to define scene-based pages and
their variants from get-started/set-up-your-environment with all 12
platform/device/mode combinations.
- Updated extractFrontmatter() to retain only non-empty
`modificationDate` in YAML frontmatter
- Added `convertMdxInstructionToMarkdown()` in
`scripts/generate-markdown-pages-utils.ts` to transform instruction MDX
into markdown.
- Enhanced terminal markdown conversion to support package-manager
command maps (npm,
    yarn, pnpm, bun) via `data-md-commands`.
- Added/updated tests in:
	- scripts/generate-markdown-pages-utils.test.ts
	- ui/components/Snippet/Terminal.test.tsx

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

To test scene-based Set up your environment markdown output, go to:
https://pr-43044.expo-docs.pages.dev/get-started/set-up-your-environment/index.md

To test Terminal tabs markdown output, go to:
https://pr-43044.expo-docs.pages.dev/more/create-expo/index.md and look
for:

<img width="990" height="520" alt="CleanShot 2026-02-11 at 00 26 19@2x"
src="https://github.com/user-attachments/assets/0996f84b-ecbd-4861-8d73-3f68af897e31"
/>


To test YAML frontmatter clearance and only `modificationDate` included,
go to: https://pr-43044.expo-docs.pages.dev/more/create-expo/index.md
and look for:

<img width="1192" height="238" alt="CleanShot 2026-02-11 at 00 26 36@2x"
src="https://github.com/user-attachments/assets/9688e390-04bd-47c5-8855-d016250cd5b4"
/>


# 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)
…SEO indexing (#43050)

# Why

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

Currently, https://docs.expo.dev/internal/test-markdown-pipeline/ is
included in the Sitemap and available for SEO indexing. Since this page
is only used by the generated markdown script for testing, we should not
provide a link to it publicly.

# How

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

This PR prevents the internal markdown pipeline test page
(`/internal/test-markdown-pipeline`) from being surfaced publicly by
excluding all `/internal/*` routes from sitemap generation and marking
internal docs pages as non-indexable in page metadata.

It adds an internal path helper, applies noindex and removes canonical
tags for internal routes in `DocumentationPage`, and hides internal
paths in `next.config.ts` sitemap generation.

# 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 export`, and verify sitemap exclusion by opening
`/out/sitemap.xml`. Then, search for `/internal/test-markdown-pipeline/`
and it should not be there.

# 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)
…sibility issues (#43066)

# Why

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

Fix ENG-19409

Lighthouse flags ~34.5 KiB of legacy JavaScript polyfills on every page
of docs.expo.dev. Next.js unconditionally injects polyfills for APIs
like `Array.prototype.at`, `Object.hasOwn`, and `URL.canParse`
regardless of browserslist config. All of these are natively supported
by every browser we target (Chrome 93+, Firefox 92+, Safari 15.4+).

Additionally, ~19 KiB of CSS was loaded globally but only used by
specific components, and a few accessibility issues were flagged
(missing button labels, insufficient color contrast).

The following is the final Lighthouse score on docs.expo.dev homepage:

<img width="2388" height="344" alt="CleanShot 2026-02-11 at 17 23 20@2x"
src="https://github.com/user-attachments/assets/5cfd55f9-60dc-47d7-9b3a-6601369a262d"
/>

<img width="2398" height="2014" alt="CleanShot 2026-02-11 at 17 23
28@2x"
src="https://github.com/user-attachments/assets/b5243f6d-8641-4dd3-8598-1690e3238586"
/>


# How

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

**Remove Next.js built-in polyfills (12.4 KiB JS saved)**

Uses a webpack `NormalModuleReplacementPlugin` to replace Next.js's
built-in `polyfill-module.js` with an empty file on client builds.
Neither `browserslist` nor `resolve.alias` work for this because Next.js
hardcodes a relative `require()` path that bypasses both. This is a
known limitation
([vercel/next.js#86785](vercel/next.js#86785)).

**Move component-specific CSS to component level (~3.2 KiB CSS saved)**

Three CSS imports were loaded globally in `_app.tsx` but only used by
specific components:
- `@xyflow/react/dist/style.css` (18.5 KiB) -> `ConfigPluginHierarchy`
(3 pages under `/config-plugins/`)
- `yet-another-react-lightbox/styles.css` (5.6 KiB) -> `LightboxImage`
- `tippy.js/dist/tippy.css` (1.4 KiB) -> `code.tsx`

**Fix accessibility issues**

- Added `aria-label` to icon-only buttons (hamburger menu, banner
dismiss)
- Changed "Start Tutorial" button background from `palette-blue10`
(3.59:1 contrast) to `palette-blue11` (4.78:1 contrast) to pass WCAG AA

# 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 build` and it should succeed with no errors
- Homepage: `main` chunk no longer appears in Lighthouse "Legacy
JavaScript" audit, "Reduce unused CSS" audit shows reduced savings, and
no Lighthouse accessibility warnings for button labels or contrast.
- Accessibility: "Start Tutorial" button looks correct in light and dark
mode
- All of this can be done via `rm -rf .next out && yarn build` and then
run `npx serve out`.
- Then, open `localhost:3000` in an Incognito window (to ensure no
third-party extensions are running). Go to the Lighthouse tab in the
developer tool and analyze the page for Desktop.
- Pages with images: lightbox opens and displays correctly
-  Pages with code blocks: tippy tooltips render correctly
- General navigation, search, and interactive components work as
expected

Lighthouse score after above improvements:

<img width="2408" height="482" alt="CleanShot 2026-02-11 at 17 20 22@2x"
src="https://github.com/user-attachments/assets/2a9a73f2-4fe0-404e-8ddb-9dc1e241a08c"
/>

<img width="2402" height="998" alt="CleanShot 2026-02-11 at 17 20 32@2x"
src="https://github.com/user-attachments/assets/d8ef1b0e-79ff-46e3-828c-c9aa4a907347"
/>

<img width="2390" height="1398" alt="CleanShot 2026-02-11 at 17 20
38@2x"
src="https://github.com/user-attachments/assets/4e7040d9-a04c-43f5-8a5c-5d54c4901455"
/>


# 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 current widget approach has several drawbacks, such as the inability
to define conditions based on props/conditional rendering of elements,
and the requirement of a JS server on the background to update the live
activity remotely.

# How

API has undergone a complete redesign. User now set up widget layout
using `registerWidgetLayout()`. Once the layout is registered, updates
are handled through the familiar `updateWidgetSnapshot()` or
`updateWidgetTimeline()` functions.

# Test Plan

Manually tested in #42094

# 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)
- [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)
…t overwrite system keys (#43038)

# Why

Based on #43037

This refactors all old `require('@expo/env').load` calls to instead go
through `src/utils/nodeEnv.ts` helpers, and updates said helpers to use
the newer (undeprecated) `@expo/env` calls.

This also replaces the reloading logic for env files in
`MetroBundlerDevServer`. The new logic keeps track of values we've set
(which had to have kept track of `typeof process.env[key] ===
'undefined'`) and does another `typeof process.env[key] === 'undefined'`
check before setting them. Together with #43037 this should now
consistently reload environment variables, update them, and not
overwrite any values that were already set in the environment.

**Note:** This should be sufficient to affect `@expo/metro-config`'s
serializer which should be updating this value, but I'd need to
double-check that. CI tests generally cover this behaviour though.

# How

- Update all CLI commands to use `loadEnvFiles` from `nodeEnv.ts`
- Update implementation of `loadEnvFiles` to use newer helpers from
`@expo/env`
- Keep track of set keys and add `reloadEnvFiles` helper to `nodeEnv.ts`
- Add `getEnvFiles` helper to `nodeEnv.ts`
- Update `MetroBundlerDevServer`

# Test Plan

- Existing E2E tests should cover this together with unit test changes
in the base PR

# 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

React Native Testing Library v13.3.x adds support for testing components
with Suspense.

# How

Bumped `@testing-library/react-native` across the monorepo.

# Test Plan

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

Follow up of #41748

# How

- update package versions
  - `react-native  0.83.1-> 0.83.2`  
  - `@react-native/normalize-colors 0.83.1 ->  0.83.2` 
  - `@react-native/babel-preset 0.83.1 ->  0.83.2` 
  - `@react-native/dev-middleware 0.83.1 ->  0.83.2`    

# Test Plan
 
bare-expo ios / android
minimal-tester ios / android
ci passed

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

18.0.1 version released:
https://github.com/expo/eas-cli/releases/tag/v18.0.1

# How

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

Run `yarn run eas-cli-sync` to sync latest changes in EAS CLI reference.

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

Proofread diff to see the changes.

# 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)
…llback logic (#43073)

# Why

We currently use `env-editor` with a few inputs to determine which
editor to open. However, this is prone to failing for multiple reasons:
- When a user intentionally sets an unknown editor, we don't check if
it's a valid binary we can call
- We prefer `$EDITOR` as a fallback from the user (which is hard-coded
in `env-editor`), which, by convention, over `$VISUAL` is a terminal
editor most of the times
- We don't attempt to find any other editor otherwise and assume VSCode
is available

This can lead to a few issues when the `code` binary isn't in `$PATH` or
when the user has invalid `$EDITOR` values. We also don't take into
account that users are very likely to have Android Studio or Xcode
installed.

When we spawn `$EDITOR` blindly, we may spawn a terminal editor, which
then is spawned as a sub-process. While that's fine, it often will look
to the user as if nothing is happening.

# How

Instead, this updates the logic to change what we do:
- Check `$EXPO_EDITOR`, then `$VISUAL`, then `EDITOR` against known
editors
- If otherwise `$EXPO_EDITOR` or `$VISUAL` are unknown editors, use them
if they resolve in `$PATH`
- If we have a known editor now that is a terminal editor, find a
fallback visual editor
- The fallback visual editor is checked against known paths then in
`$PATH`
- If the determined editor is a terminal editor, don't spawn it and
instead adjust the error message
- Instruct users to update `$EXPO_EDITOR` or `$VISUAL` and not `$EDITOR`

# Test Plan

- Unit tests updated
- Manually tested by pressing `o` in terminal (erase environment
variables mentioned to test fallbacks)

# 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)
@pull pull bot locked and limited conversation to collaborators Feb 12, 2026
@pull pull bot added the ⤵️ pull label Feb 12, 2026
@pull pull bot merged commit 21f0c90 into code:main Feb 12, 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.

6 participants