Skip to content

v0.5.0

Choose a tag to compare

@mdjastrzebski mdjastrzebski released this 28 Jul 18:50
· 58 commits to main since this release

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

  • fontSize
  • color
  • fontWeight
  • fontFamily
  • lineHeight
  • fontStyle: 'normal' | 'italic'
  • textAlign
  • textDecorationLine: 'none' | 'underline' | 'line-through' | 'underline line-through'
  • letterSpacing
  • verticalAlign / textAlignVertical:Android only, matching RN <Text>
  • Every other ViewStyle prop (width, height, margin, padding, backgroundColor, opacity, …), forwarded to the native view as-is

Props

  • children: plain string only
  • numberOfLines
  • ellipsizeMode: 'head' | 'middle' | 'tail' | 'clip'
  • allowFontScaling / maxFontSizeMultiplier: accessibility text scaling
  • testID, accessibilityRole, accessibilityLabel, accessibilityHint, accessibilityState, nativeID and the rest of the accessibility props
  • Self-sizing: views measure to their content, so no explicit width / height is needed

Not supported

Deliberately excluded:

  • Nested <Text> and mixed-style fragments: one string, one style
  • onPress / onLongPress / onResponder*: wrap it in Pressable
  • selectable / selectionColor / suppressHighlighting: UILabel isn't selectable by design; use RN's <Text>
  • dataDetectorType: auto-linking needs attributed text spans
  • textTransform: do it in JS (children.toUpperCase())
  • writingDirection: RTL belongs in I18nManager, globally
  • textBreakStrategy / lineBreakStrategyIOS / android_hyphenationFrequency
  • onTextLayout: heavy line-metrics payload; deferred until there's demand