6.0.0-alpha.0 (2026-06-15)
Bug Fixes
- animated-fab: correct Android shadow/content stacking (#4903) (db27e5a)
- docs: resolve docs build and icon issues (490a502)
- dynamic theme broken deep merge when using PlatformColor (8720eac)
- MD3: update color schema and tokens (#4900) (709325e)
- resolve RN 0.85 web warnings and upgrade Expo SDK 56 (#4958) (3381515)
- ripple not showing (#4897) (f39da66)
Features
- add direction prop to PaperProvider and useLocale hook for RTL support (#4921) (01b1982)
- add DynamicTheme using PlatformColor (#4901) (ad9f3f0)
- add elevation tokens and fix Android dp spec bug (#4923) (2f8b840)
- add emphasized typescale and fix letter-spacing spec bugs (#4920) (c9f40e2)
- add motion tokens (spring, easing, duration) (57c06e1)
- add theme.shapes and cornersToStyle (#4919) (b88ec19)
- add theme.state opacity tokens and split theme types (#4917) (f998dff)
- checkbox: add error state via MD3 error tokens (e860605), closes #4937 #4949
- checkbox: modernize for md3 spec compliance (6405895), closes #4952
- fab: modernize FloatingActionButton to MD3 (2f5e55d)
- modernize Switch to MD3 (de574b5)
- react-native-reanimated as peer dependency (#4912) (9ded0ac)
- remove customRippleColor from components (#4899) (1369526), closes #4894
- rework TextInput component (#4909) (8b2b1eb), closes #79747 #6750A4 #1C1B1 #79747 #6750A4 #1C1B1 #6750A4 #6750A4
- v6: remove deprecated public API (3920cf0)
BREAKING CHANGES
- fab: The FAB API has been redesigned for MD3 with no
deprecation aliases.
AnimatedFABandAnimatedFABPropsare removed. UseFAB.Extended
for the icon + label FAB.FAB.GroupandFABGroupPropsare removed. UseFAB.Menuinstead.- The legacy FAB props (
mode,small,color,label,uppercase,
customSize,animated) are removed. Usevariant,size,
containerColor, andcontentColorinstead; for a labeled FAB switch
toFAB.Extended. - New exported types:
FABExtendedProps,FABMenuProps,
FABMenuItemProps,FABMenuTriggerProps,FABVariant,FABSize.
- Lint, typescript, existing and new tests pass
- manual visual inspection on all platforms
TextInputhas been rewritten for Material Design 3. The public API, adornments, variant naming, and styling overrides have changed. See the migration section below for required updates.
Summary
Replaces the Paper 5.x TextInput with a new MD3-aligned implementation. The component name stays TextInput, but most props and composition patterns have changed.
The new TextInput supports filled and outlined variants, floating labels, supportingText, a built-in character counter, prefix / suffix, leading/trailing startAccessory / endAccessory render props, a custom render prop for masked inputs, and improved accessibility. Colors and layout follow the theme; per-prop color overrides for outlines and underlines were removed.
What changed
| Before (v5) | After (v6) |
|---|---|
mode="flat"
| variant="filled" (default)
|
mode="outlined"
| variant="outlined"
|
left / right element props
| startAccessory / endAccessory render props
|
TextInput.Affix
| prefix / suffix strings, or custom accessories
|
HelperText below the field
| supportingText on the field
|
label as string or ReactNode
| label as string only
|
dense, contentStyle, outlineStyle, underlineStyle
| removed — use style and theme
|
textColor, underlineColor, activeUnderlineColor, outlineColor, activeOutlineColor
| removed — use style and theme
|
disabled blocked interaction
| disabled blocks interaction; use editable={false} for read-only fields that can still be focused
|
Still supported
TextInput.Icon— use insidestartAccessory/endAccessoryrender— swap the native input (e.g. masked inputs)selectionColorandcursorColor— inherited from React NativeTextInputpropsref— exposesTextInputHandles(focus,blur,clear,isFocused,setNativeProps,setSelection);clear()also syncs internal state and label animation
What was removed
TextInput.AffixHelperTextas the recommended companion for text fields (usesupportingTextinstead)mode,left,rightdense,contentStyle,outlineStyle,underlineStyletextColor,underlineColor,activeUnderlineColor,outlineColor,activeOutlineColor
Migration
Import stays the same:
import { TextInput, type TextInputProps } from 'react-native-paper';Variant
// Before (v5)
<TextInput mode="flat" label="Email" />
<TextInput mode="outlined" label="Password" />
// After (v6)
<TextInput variant="filled" label="Email" />
<TextInput variant="outlined" label="Password" />Icons and adornments
left / right element props become startAccessory / endAccessory render functions. Spread the props TextInput passes in — they include layout style, plus error, disabled, and multiline.
// Before (v5)
<TextInput
label="Search"
value={text}
onChangeText={setText}
left={<TextInput.Icon icon="magnify" />}
right={<TextInput.Affix text={`${text.length}/80`} />}
/>
// After (v6)
<TextInput
label="Search"
value={text}
onChangeText={setText}
startAccessory={(props) => <TextInput.Icon {...props} icon="magnify" />}
endAccessory={(props) => (
<TextInput.Icon {...props} icon="close" onPress={() => setText('')} />
)}
/>Replace TextInput.Affix with prefix / suffix for inline text, or a custom endAccessory:
// Before (v5) — affix as trailing adornment
<TextInput
right={<TextInput.Affix text="/100" />}
maxLength={100}
/>
// After (v6) — prefix/suffix and/or counter
<TextInput
prefix="$"
suffix="/100"
maxLength={100}
counter
/>Note:
prefixandsuffixare shown only when the label is floated (field focused or has a value).
Supporting text and errors
// Before (v5)
<>
<TextInput label="Email" error={hasError} />
<HelperText type="error" visible={hasError}>
Enter a valid email
</HelperText>
</>
// After (v6)
<TextInput
label="Email"
error={hasError}
supportingText={hasError ? 'Enter a valid email' : 'We will never share your email'}
/>When error is true and no endAccessory is provided, a default error icon is shown on the trailing side.
Disabled vs read-only
// Disabled — not editable, not focusable, disabled styling
<TextInput disabled label="Email" value={email} />
// Read-only — can focus and select text, but not edit
<TextInput editable={false} label="Email" value={email} />Styling and colors
Outline, underline, label, and disabled colors now come from the theme. Override input text with the standard style prop; override accent colors via theme or, where applicable, inherited props:
// Before (v5)
<TextInput
dense
contentStyle={{ paddingHorizontal: 12 }}
outlineStyle={{ borderRadius: 12 }}
* Switch props no longer extend native Switch. color, ios_backgroundColor, trackColor, thumbColor etc. are removed. Use the theme prop for color customization.