Conversation
# 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)
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 : )