Skip to content

Conversation

@pull
Copy link

@pull pull bot commented Jan 16, 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 : )

hassankhan and others added 5 commits January 16, 2026 17:38
…roduction (#42166)

# Why

In SSR, we always expect that a loader module is available if
`route.loader` is set. If the loader module is not found, we should
throw an error instead of returning `undefined`.

# How

Throw an error in `expo-server/src/vendor/environment/common.ts` when a
loader module isn't found.

# Test Plan

- CI
- Manual testing (`yarn export:server-loader`, delete any loader from
`_expo/loaders` then run `yarn expo serve`)

# 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)
Copied from #41788 as I was not able to
edit that PR.

Adds a 'renderingMode' prop to NativeTabs.Trigger.Icon that controls how
icons are rendered on iOS:

- 'template' (default): Icon uses template rendering, allowing iOS to
apply the selected/unselected tint color
- 'original': Icon preserves its original colors, useful for icons with
gradients, transparency, or multiple colors

This enables developers to use custom colored PNG icons without them
being tinted by the tab bar.

# Why

Complex icon sets with gradients and multiple colors are gaining
popularity and while native UI is what this component is aimed at it
would be great to support custom icons without tinting for unique UI
design. `src` support is not fully usable imo without this change as a
common reason to use them is non-solid icons.

# How

When using PNG's as icons I noticed the tinting was affecting the design
of the sets. There doesn't seem to be any escape hatches via styling
prop (both `null` and `transparent` on tinting do not give the desired
outcome). The feature addition doesn't affect the default functionality
and is a simple change to allow advanced customization.

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

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

---------

Co-authored-by: Byron Polley <[email protected]>
Co-authored-by: Aman Mittal <[email protected]>
# Why

Loader functions should only have access to immutable requests, similar
to middleware functions, to prevent request modification.

# How

- Exported `ImmutableRequest` from `expo-server` to use in `@expo/cli`
- Ensure loaders are invoked with `ImmutableRequest` in both
`expo-server` for production, and `@expo/cli` for development.

# Test Plan

- CI
- Manual testing

# 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)
… render bundles (#42245)

# Why

Fixes an SSR rendering issue where visiting a loader endpoint (e.g.,
`/_expo/loaders/request`) before the page request (e.g., `/request`)
causes the page to render with a Suspense fallback instead of the SSR
content.

The underlying issue was a module ID collision between loader bundles
and `render.js`. Both bundles contain the same source file (for example
`app/request.tsx`) but with different exports due to Babel transforms:
  - `render.js`: Contains full component + loader function
  - loader bundle: Contains only the loader function
  
Because Metro module IDs are based on the file path, both bundles would
get the same ID for the route module. If the loader bundle was loaded
first, route components would be missing and thus break SSR.

# How

Modified the `createModuleId()` wrapper in `withExpoSerializers.ts` so
`+loader` is appended to paths for modules with `loaderReference`
metadata, but only when serializing loader bundles.

# Test Plan

- CI
- Manual testing: 
  ```bash
  yarn export:server-loader && yarn expo serve
  curl http://localhost:8081/_expo/loaders/request
  curl http://localhost:8081/request
  ```
On this branch, you should see the second request returns the complete
HTML for `/request`, not the Suspense fallback

# Checklist

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

Overlooked adding changelogs in previous PR

# How

Added the relevant changelogs to `@expo/cli` and `@expo/metro-config`

# Test Plan

Not required

# 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)
@pull pull bot locked and limited conversation to collaborators Jan 16, 2026
@pull pull bot added the ⤵️ pull label Jan 16, 2026
@pull pull bot merged commit c54eb1e into code:main Jan 16, 2026
17 of 19 checks passed
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.

2 participants