For AI agents: the complete documentation index is available at /react-native-plain-text/llms.txt, the full documentation bundle is available at /react-native-plain-text/llms-full.txt, and this page is available as Markdown at /react-native-plain-text/guide/props-and-styles.md.

Props and styles

Supported props

PropRN <Text> compatibleNotes
allowFontScalingโœ…
android_hyphenationFrequencyโœ…Android-only, like RN <Text>. Only a fallback for when hyphens is unset.
children๐ŸŸกText only: a string, number, bigint, or a flat array of them ({count} items).
ellipsizeModeโœ…
hyphensโฌ†๏ธNot in RN <Text>. 'none' | 'auto', default 'none'. See below.
langโฌ†๏ธNot in RN <Text>. BCP-47 tag (e.g. 'de') for hyphenation and line breaking.
lineBreakStrategyIOSโœ…iOS-only, like RN <Text>. No-op on Android.
maxFontSizeMultiplierโœ…
nativeIDโœ…
idโœ…
numberOfLinesโœ…
onLayoutโœ…
testIDโœ…
textโฌ†๏ธAlternative to children. Use this to animate text.
textBreakStrategyโœ…Android-only, like RN <Text>
Accessibility propsโœ…accessible, accessibilityLabel, accessibilityRole, accessibilityState, etc
aria-* aliasesโœ…Like RN <Text>. aria-label, aria-hidden, aria-busy, aria-checked, etc

RN <Text> compatibility: โœ… fully compatible ยท ๐ŸŸก partially compatible ยท โฌ†๏ธ added in Plain Text.

Supported styles

StyleRN <Text> compatibleNotes
colorโœ…
fontFamilyโœ…
fontSizeโœ…
fontStyleโœ…
fontVariantโœ…
fontVariationSettingsโฌ†๏ธNot in RN <Text>. Variable-font axes in CSS syntax, e.g. '"wght" 700, "wdth" 87.5'.
fontWeightโœ…
includeFontPaddingโœ…Android-only, like RN <Text>
letterSpacingโœ…
lineHeightโœ…
textAlignโœ…
textAlignVerticalโœ… โฌ†๏ธAndroid-only in RN Text. Implemented for both iOS & Android here.
textDecorationLineโœ…
textShadowColorโœ…
textShadowOffsetโœ…
textShadowRadiusโœ…
textTransformโœ…
verticalAlignโœ… โฌ†๏ธAndroid-only in RN Text. Implemented for both iOS & Android
writingDirectionโœ…iOS-only, like RN <Text>. No-op on Android.
Every other ViewStyle propโœ…width, margin, padding, backgroundColor, opacity, etc

RN <Text> compatibility: โœ… fully compatible ยท โฌ†๏ธ added in Plain Text

Notes

  • textDecorationLine: 'underline' position on iOS: PlainText's UILabel draws the underline at the font's underlinePosition. RN <Text> draws it a bit too high, shifted up about one underlineThickness above its natural position.

Improvements over RN Text

Things Plain Text does that RN <Text> does not:

  • fontVariationSettings: set variable-font axes in CSS syntax, e.g. '"wght" 700, "wdth" 87.5'. RN <Text> has no such style. Needs a font with an fvar table (no system font qualifies) and Android API 26+.
  • verticalAlign and textAlignVertical on iOS: RN <Text> only honors these on Android. Plain Text implements them on both platforms.
  • lineHeight clipping fix on iOS: with a large lineHeight, iOS TextKit clips the first line's ascenders and pushes the text down (RN#29507). Plain Text corrects the vertical offset at draw time so the text stays centered in its line box.
  • hyphens prop: hyphenation control. RN <Text> has no iOS hyphenation control at all, and no cross-platform one on either platform. 'none' (default) keeps hyphenation at the platform's own default behavior on both iOS and Android โ€” it never strips or otherwise touches an inserted soft hyphen (ยญ). 'auto' turns on dictionary-based hyphenation: iOS's usesDefaultHyphenation (pair with lang to pick the dictionary), and Android's Layout.HYPHENATION_FREQUENCY_FULL (PlainTextView.kt). On Android, hyphens takes priority over android_hyphenationFrequency whenever the app sets it at all โ€” including 'none' โ€” and android_hyphenationFrequency only applies as a fallback when hyphens is left unset entirely. Known gap: this distinction only exists at the mounted view; the off-screen pass used to measure/wrap the text can't tell "unset" apart from "explicitly 'none'" (both collapse to the same default before they reach native code), so it always falls back to android_hyphenationFrequency regardless. For hyphens="none" combined with a non-default android_hyphenationFrequency, this means the measured size can assume that frequency while the rendered text uses NONE.

Planned

Prop / styleRN <Text> compatible
adjustsFontSizeToFit / minimumFontScaleTo Do
selectable / selectionColor / suppressHighlighting / userSelectTo Do
textDecorationColor / textDecorationStyleTo Do
dynamicTypeRampTo Do

Open an issue for the one you need. Real-world usage sets the priority.

Not supported

Deliberately excluded:

  • nested <Text> elements and mixed styles
  • press and touch handling: onPress, onLongPress, onPressIn, onPressOut, pressRetentionOffset, and the touch-responder handlers (onStartShouldSetResponderCapture, onMoveShouldSetResponder, onResponderGrant / Move / Release / Terminate, onResponderTerminationRequest). Wrap <PlainText> in a Pressable instead.
  • disabled: only meaningful alongside press handlers.
  • dataDetectorType: turns substrings into tappable links, which makes the label interactive.
  • onTextLayout