You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[0.88] Fix Android text mis-measurement when re-applying fontVariationSettings #1446
Picks #58320 (merged to main as 96518a8), which fixes a bug in the fontVariationSettings support that is new in 0.88 (#57804, #57805, #57929).
Problem: On Android, Paint.setFontVariationSettings returns early when the requested string equals the one the paint already holds, and Paint.setTypeface doesn't clear that stored string. React Native reuses paints and calls setTypeface before re-applying the settings, so the variation axes are silently dropped on one of the passes. With a variable font whose default instance is lighter than the requested wght, Yoga measures regular-weight glyphs while heavier glyphs are drawn.
Impact: Reproducible on 0.88.0-rc.4 with a variable font (e.g. Roboto Flex) and fontVariationSettings: { wght: 500 }. Text is measured narrower than it is drawn, so on Android a single-line label inside a fixed-height container wraps and its last word is clipped, and numberOfLines={1} text gets ellipsized unexpectedly. The same text renders correctly with the font's default weight and on iOS. Any app adopting fontVariationSettings in 0.88 with a weight above the font's default will hit this.
Risk: Low. It adds a few lines to ReactTypefaceUtils.applyFontVariationSettings and ReactEditText.maybeUpdateTypeface that clear existing settings before re-applying them, and only when both old and new settings are non-null. Paints without previous settings are unaffected. The diff applies cleanly to 0.88-stable, and the PR includes a unit test.
Since this ships alongside the feature it fixes, picking it avoids 0.88.0 releasing fontVariationSettings in a state that mis-measures text on Android.
Thank you for opening a new React Native Pick Request.
These are the criteria we follow when accepting or rejecting a code change into a React Native release branch (source).
If your Pick Request does not satisfy the criteria below, please close it as it will not be considered.
✅ Which Pick Requests we accept
✅ Fixes for regressions to core APIs. Examples:
A core component is behaving differently between versions 0.X and 0.X-1
The TurboModule.getEnforcing function is throwing an unexpected assertion error.
✅ Fixes to bugs in core React Native. Examples:
Breakpoints in React Native DevTools not working correctly in the debugger
Fast Refresh not working as expected
Metro bundler not starting properly or ignoring the configuration file
Buttons that are not clickable
✅ Fixes to APIs used by third-party libraries and out-of-tree platforms. Examples:
An API used by react-native-macos is not behaving as expected or is regressing
✅ Bump of patch version of dependencies. Example:
Bump Gradle from 8.11.0 to 8.11.1
✅ Fixes for low/high severity security vulnerabilities. Example:
Bump Gradle from 8.11.0 to 8.12.0 if there is a security vulnerability in 8.11 and no 8.11.x version contains the same fix.
✅ Fixes and reverts of accidental breaking changes. Example:
Reverting or fix-forwarding a Kotlin migration of a file (e.g. ReactRootView.java) if it is causing a breaking change for the React Native ecosystem.
✅ Performance improvements. Examples:
Fixing unnecessary re-renders in FlatList.
✅ Any Pick Request if the release is still in RC0 (after RC1, the previously listed criteria apply)
❌ Which Pick Requests we don't accept
❌ Any Pick Request that introduces a breaking change after RC1. Example:
A bugfix that contains a refactoring, resulting in changes to the public API of a class
❌ Any Pick Request that introduces a new feature after RC1. Example:
A commit that introduces a new API or a specific feature for a component.
❌ Bump of major or minor version of dependencies. Examples:
Bump Gradle from 8.11.0 to 8.12.0
Bump Gradle from 8.11.0 to 9.0.0
❌ Bump of a dependency to a pre-release version. Example:
Bump Gradle from 8.11.0 to 8.11.1-beta.1
❌ Any Pick Request that introduces changes to the React Native testing infrastructure after RC1. Examples:
Changes to GitHub Actions workflows to optimize them, even if they are on main.
Changes to the logic used to publish packages to NPM or Maven Central
❌ Pick Request composed of multiple commits that have several merge conflicts.
If your Pick Request is too complex to apply to the release branch, it will be rejected.
❌ Any non-critical improvement that landed on main.
These will generally ship in the following version unless they fit one of the criteria above.
❌ Any Pick Request considered a "nice to have".
Even one-line changes carry a risk of destabilizing and further delaying the release.
ℹ️ What makes for a good Pick Request
In order for your Pick Request to be considered, please do the following:
ℹ️ Limit your Pick Request to one commit from main, or one PR against the release branch.
ℹ️ Include a clear explanation of why your Pick Request should be considered, ideally referencing one of the criteria above.
ℹ️ Target only one minor version of React Native (e.g. [0.76]). To have your Pick Request applied to more versions, please open separate Pick Requests.
Assessed on its merits and this is a good pick: the fix is 8 production lines plus a unit test, it is not already on 0.88-stable, it is not breaking, and the bug is real on a feature that is new in 0.88.
It is deferred purely on timing. rc.6 was cut as an exceptional RC for one specific pick that was already in flight when this was filed, and 0.88.0 ships today. Adding a second pick means another full CI cycle on the branch.
Activity
github-actions commentedon Oct 14, 2026
Thank you for opening a new React Native Pick Request.
These are the criteria we follow when accepting or rejecting a code change into a React Native release branch (source).
If your Pick Request does not satisfy the criteria below, please close it as it will not be considered.
✅ Which Pick Requests we accept
TurboModule.getEnforcingfunction is throwing an unexpected assertion error.react-native-macosis not behaving as expected or is regressingReactRootView.java) if it is causing a breaking change for the React Native ecosystem.❌ Which Pick Requests we don't accept
ℹ️ What makes for a good Pick Request
In order for your Pick Request to be considered, please do the following:
main, or one PR against the release branch.fabriziocucci commentedon Oct 14, 2026
Deferred to 0.88.1, not picked into 0.88.0-rc.6.
Assessed on its merits and this is a good pick: the fix is 8 production lines plus a unit test, it is not already on
0.88-stable, it is not breaking, and the bug is real on a feature that is new in 0.88.It is deferred purely on timing. rc.6 was cut as an exceptional RC for one specific pick that was already in flight when this was filed, and 0.88.0 ships today. Adding a second pick means another full CI cycle on the branch.
This is first in line for 0.88.1.