v0.5.0
0.5.0 (2026-07-28)
Initial public release π
PlainText renders a single string straight to the platform's native text
widget β UILabel on iOS, TextView on Android β instead of going through
React Native's own text layout pipeline.
Performance vs RN <Text>
Release builds, mean of 3 runs, measured with the example app's Performance
tab. Compare each figure against RN <Text> on the same device and text size;
see measuring.md for the method.
| iOS | Android | |
|---|---|---|
| Memory per mounted view | 15β25% lower | ~33% lower |
| Time to mount 1000 views | 13β21% faster | ~30% faster |
What's supported
Styles
fontSizecolorfontWeightfontFamilylineHeightfontStyle:'normal' | 'italic'textAligntextDecorationLine:'none' | 'underline' | 'line-through' | 'underline line-through'letterSpacingverticalAlign/textAlignVertical:Android only, matching RN<Text>- Every other
ViewStyleprop (width,height,margin,padding,backgroundColor,opacity, β¦), forwarded to the native view as-is
Props
children: plainstringonlynumberOfLinesellipsizeMode:'head' | 'middle' | 'tail' | 'clip'allowFontScaling/maxFontSizeMultiplier: accessibility text scalingtestID,accessibilityRole,accessibilityLabel,accessibilityHint,accessibilityState,nativeIDand the rest of the accessibility props- Self-sizing: views measure to their content, so no explicit
width/heightis needed
Not supported
Deliberately excluded:
- Nested
<Text>and mixed-style fragments: one string, one style onPress/onLongPress/onResponder*: wrap it inPressableselectable/selectionColor/suppressHighlighting:UILabelisn't selectable by design; use RN's<Text>dataDetectorType: auto-linking needs attributed text spanstextTransform: do it in JS (children.toUpperCase())writingDirection: RTL belongs inI18nManager, globallytextBreakStrategy/lineBreakStrategyIOS/android_hyphenationFrequencyonTextLayout: heavy line-metrics payload; deferred until there's demand