- Fixed
React.memoandReact.forwardRefcomponents not rendering correctly when passed as render propsrenderComponentOrElementnow properly handles components with$$typeofproperty
- Fixed layout jump on initial render - content now renders with
opacity: 0until initialized - Fixed keyboard vertical offset documentation and examples
- Updated
keyboardVerticalOffsetdocumentation in README with clearer explanation - Added
hiddenstyle for smoother initial render transitions
- Improved
keyboardVerticalOffsetsection explaining that it equals distance from screen top to container top - Added recommendation to use
useHeaderHeight()from@react-navigation/elements
- Swipe to Reply: New swipe-to-reply functionality using
ReanimatedSwipeable(based on #2692)- Replaced deprecated
SwipeablewithReanimatedSwipeablefrom react-native-gesture-handler - Added
replyprop toGiftedChatwith grouped configuration options - Swipe direction support:
'left'(swipe left, icon on right) or'right'(swipe right, icon on left) - Custom swipe action rendering via
renderAction - Built-in animated
ReplyIconcomponent ReplyPreviewcomponent with smooth enter/exit animations- Reply message display in
Bubblecomponent viamessageReplyprop
- Replaced deprecated
- New Props:
scrollToBottomContentStyle- style for scroll to bottom button content
- Fixed #2702 - typing issues
- Fixed #2708 - component issues
- Fixed #2607 - edge case handling
- Fixed #2701 - rendering issues
- Fixed #2691 - prop handling
- Fixed #2688 - style issues
- Fixed #2687 - component behavior
- Fixed #2618 - scroll issues
- Fixed #2677, #2682, #2602 - multiple fixes
- Fixed #2684, #2686 - component issues
- Fixed
onScrolltype definition - Fixed messages padding
- Fixed SystemMessage styles
- Added missing worklets for animations
- Removed
ts-expect-errorforrequestAnimationFrame(now properly typed for React Native) - Fixed two typing issues (#2698)
- Grouped reply-related props into
ReplyPropsinterface for cleaner API - Added
SwipeToReplyPropsfor Message-level swipe configuration - Added
BubbleReplyPropsfor Bubble-level reply message styling - Added example app to lint command with proper path alias support
- Improved reply animations (enter/exit transitions)
- Changes from #2705
- Updated README with swipe-to-reply feature documentation and examples
- Updated license link
- Added reply message implementation example (#2690)
- Updated test snapshots
- Added tests for
MessageReplycomponent - Added tests for
ReplyPreviewcomponent
- Fixed
onScrolltype definition
- Custom Link Parser: Replaced
react-native-autolinkdependency with custom link parser implementation for better control and performance- Removed external dependency on
react-native-autolink - Improved link parsing with custom implementation in
linkParser.tsx - Updated
MessageTextcomponent to use new parser - Enhanced links example in example app
- Removed external dependency on
- Adjusted message bubble styles for better rendering
- Updated test snapshots to reflect parser changes
- Color Scheme Support: Added
colorSchemeprop toGiftedChatcomponent- New
useColorSchemehook for consistent color scheme handling - Automatically adapts UI elements (Composer, InputToolbar, Send) based on color scheme
- Added comprehensive tests for color scheme functionality
- New
- Updated README with
colorSchemeprop documentation
- Added left padding to
TextInputwhen no accessory is present for better visual alignment - Adjusted input toolbar styles for improved layout
- Removed unused imports for cleaner codebase
- Fixed message bubble styles for small messages
- Improved rendering of compact message content
- Updated test snapshots
- Fixed Bubble component styles for better message rendering
- Corrected style inconsistencies in message bubbles
- Updated test snapshots to reflect style fixes
- Refactored component styles for better maintainability
- Updated Expo Snack example with latest changes
- Updated test snapshots
- Fixed Composer auto-resize height behavior on web platform
- Updated test snapshots
This is a major release with significant breaking changes, new features, and improvements. The library has been completely rewritten in TypeScript with improved type safety, better keyboard handling, and enhanced customization options.
onInputTextChangedβ moved totextInputProps.onChangeText(follows React Native naming pattern)alwaysShowSendβisSendButtonAlwaysVisible(consistent boolean naming convention)onPressβonPressMessage(more specific naming)onLongPressβonLongPressMessage(more specific naming)optionsβactions(better semantic naming, different type signature)optionTintColorβactionSheetOptionTintColor(clearer naming)renderUsernameOnMessageβisUsernameVisible(consistent boolean naming)showUserAvatarβisUserAvatarVisible(consistent boolean naming)showAvatarForEveryMessageβisAvatarVisibleForEveryMessage(consistent boolean naming)renderAvatarOnTopβisAvatarOnTop(consistent boolean naming)focusOnInputWhenOpeningKeyboardβshouldFocusInputOnKeyboardOpen(consistent boolean naming)messageContainerRefβmessagesContainerRef(typo fix)alignTopβisAlignedTop(consistent boolean naming)invertedβisInverted(consistent boolean naming)
bottomOffset- usekeyboardAvoidingViewProps.keyboardVerticalOffsetinsteaddisableKeyboardController- removed keyboard controller configurationisKeyboardInternallyHandled- keyboard handling now always uses react-native-keyboard-controllerlightboxProps- custom Modal implementation replaced react-native-lightbox-v2placeholder- moved totextInputProps.placeholderdisableComposer- moved totextInputProps.editable={false}keyboardShouldPersistTaps- moved tolistProps.keyboardShouldPersistTapsmaxInputLength- moved totextInputProps.maxLengthextraData- moved tolistProps.extraDatainfiniteScroll- useloadEarlierMessagesProps.isInfiniteScrollEnabledinsteadparsePatterns- removed, automatic link parsing improved
These props moved from GiftedChatProps to MessagesContainerProps but are still accessible on GiftedChat via prop spreading:
messages- now in MessagesContainerPropsisTyping- now in MessagesContainerProps (via TypingIndicatorProps)loadEarlierβloadEarlierMessagesProps.isAvailableisLoadingEarlierβloadEarlierMessagesProps.isLoadingonLoadEarlierβloadEarlierMessagesProps.onPressrenderLoadEarlier- now in MessagesContainerPropsrenderDay- now in MessagesContainerPropsrenderMessage- now in MessagesContainerPropsrenderFooter- now in MessagesContainerPropsrenderChatEmpty- now in MessagesContainerPropsscrollToBottomStyle- now in MessagesContainerPropsisScrollToBottomEnabled- now in MessagesContainerPropsscrollToBottomComponent- now in MessagesContainerPropsonQuickReply- now in MessagesContainerPropslistViewPropsβlistProps(renamed in MessagesContainerProps)
options: changed from{ [key: string]: () => void }toArray<{ title: string, action: () => void }>textInputProps: changed fromobjecttoPartial<React.ComponentProps<typeof TextInput>>renderInputToolbar: now acceptsReact.ComponentType | React.ReactElement | function | null(can be component, element, function, or null)- All callback props now use arrow function syntax instead of function syntax for better type inference
- Removed
react-native-lightbox-v2(replaced with custom Modal implementation) - Removed
react-native-iphone-x-helper(deprecated) - Removed
react-native-keyboard-controlleras direct dependency - Added
react-native-keyboard-controlleras peer dependency (>=1.0.0) - Added
react-native-gesture-handleras peer dependency (>=2.0.0) - Added
react-native-reanimatedsupport for v3 & v4 - Added
react-native-safe-area-contextas peer dependency (>=5.0.0)
- Complete conversion from JavaScript to TypeScript/TSX
- Improved type safety and IntelliSense support
- Better type definitions for all components and props
- Refactored types to arrow functions for better readability
- New
keyboardTopToolbarHeightprop for better keyboard customization - New
keyboardAvoidingViewPropsto pass props to KeyboardAvoidingView from react-native-keyboard-controller - Improved keyboard behavior and offset handling
- Consolidated keyboard configuration (removed individual keyboard props in favor of
keyboardAvoidingViewProps) - Fixed auto-grow text input behavior
- Better keyboard open/close transitions
- New
OverKeyboardViewcomponent for MessageImage to keep keyboard open
isDayAnimationEnabledprop to control day separator animations- Support for passing custom components in render functions
- Improved message parsing with better link detection
- Parse links in system messages (fixes #2105)
- Better phone number parsing with custom matchers support
- Improved URL parsing (email, phone, URL detection)
- Dark theme support in example app
- Safe area provider included in library
- Improved LoadEarlier messages logic
- Better themed styles implementation
- Fixed press animation for TouchableOpacity
- Replaced deprecated
TouchableWithoutFeedbackwithPressable - Better scroll to bottom button behavior on Android
- Custom Modal implementation replacing react-native-lightbox-v2
- Better image viewing experience with proper insets handling
- Improved MessageImage component
renderTicksprop for message status indicators- Better scroll to bottom wrapper visibility handling
useCallbackThrottledfor improved scroll performance- Allow passing children to SystemMessage
- Improved load earlier messages functionality
- Fixed duplicate paragraph tags in README
- Fixed scroll to bottom when
isScrollToBottomEnabled=false(#2652) - Fixed TypeScript type inconsistencies and ESLint errors (#2653)
- Fixed automatic scroll to bottom issues (#2630, #2621, #2644)
- Fixed DayAnimated test import and added proper test coverage for renderDay prop
- Fixed not passed
isDayAnimationEnabledprop - Fixed MessageContainer scroll to bottom press on Android
- Fixed safer change ScrollToBottomWrapper visibility
- Fixed dependency cycles in imports
- Fixed MessageText container style
- Fixed reanimated issue in MessageContainer
- Fixed construct messages on send in example
- Fixed web support in example
- Fixed #2659 (memoization issues)
- Fixed #2640 (various bug fixes)
- Fixed show location in example
- Fixed errors in keyboard handling
- Fixed load earlier messages functionality
- Fixed Bubble type parameter to re-enable generics on message prop (#2639)
- Fixed listViewProps typing with Partial (#2628)
- Fixed MessageContainer to add renderDay prop and insert DayAnimated Component (#2632)
- Fixed dateFormatCalendar default value in README
- Memoized values & functions for better performance
- Better scroll performance with throttled callbacks
- Optimized re-renders
- Added ESLint with import sorting
- Fixed all examples with ESLint
- Improved code structure and organization
- Better error handling
- Cleaner prop passing and component structure
- All tests converted to TypeScript
- Updated snapshots for new components
- Run tests in correct timezone (Europe/Paris)
- Improved test coverage
- Added comprehensive copilot instructions with validated commands
- Improved README structure and formatting
- Better prop documentation and grouping
- Added matchers example
- Added working Expo Snack link
- Better feature documentation
- Added maintainer section
- Improved previews and images
- Added export documentation
- Fixed formatting issues and typos
- Better keyboard props documentation
- Updated to latest React Native and Expo
- Added tabs with different chat examples
- Added working link to Expo Snack
- Better example organization
- Added dark theme support
- Removed padding from bottom of toolbar
- Added custom phone matcher example
- Switch to dev build in README
- Android: transparent navigation & status bars by default
- Better project structure with multiple example types
- Better dependency management
- Updated to Node.js >= 20
- Yarn 1.22.22+ as package manager
- Added stale workflow for issue management
- Script to rebuild native dependencies
- Improved local development setup
@expo/react-native-action-sheet: ^4.1.1@types/lodash.isequal: ^4.5.8dayjs: ^1.11.19lodash.isequal: ^4.5.0react-native-zoom-reanimated: ^1.4.10
react: >=18.0.0react-native: *react-native-gesture-handler: >=2.0.0react-native-keyboard-controller: >=1.0.0react-native-reanimated: >=3.0.0 || ^4.0.0react-native-safe-area-context: >=5.0.0
// Before (v2.8.1)
<GiftedChat
messages={messages}
onInputTextChanged={handleTextChange}
alwaysShowSend={true}
onPress={handlePress}
onLongPress={handleLongPress}
options={{ 'Option 1': action1, 'Option 2': action2 }}
optionTintColor="#007AFF"
bottomOffset={100}
placeholder="Type a message..."
maxInputLength={1000}
renderUsernameOnMessage={true}
showUserAvatar={false}
showAvatarForEveryMessage={false}
renderAvatarOnTop={false}
alignTop={false}
inverted={true}
loadEarlier={true}
isLoadingEarlier={false}
onLoadEarlier={handleLoadEarlier}
/>
// After (v3.0.0)
<GiftedChat
messages={messages}
textInputProps={{
onChangeText: handleTextChange,
placeholder: "Type a message...",
maxLength: 1000
}}
isSendButtonAlwaysVisible={true}
onPressMessage={handlePress}
onLongPressMessage={handleLongPress}
actions={[
{ title: 'Option 1', action: action1 },
{ title: 'Option 2', action: action2 }
]}
actionSheetOptionTintColor="#007AFF"
keyboardAvoidingViewProps={{ keyboardVerticalOffset: 100 }}
isUsernameVisible={true}
isUserAvatarVisible={false}
isAvatarVisibleForEveryMessage={false}
isAvatarOnTop={false}
isAlignedTop={false}
isInverted={true}
loadEarlierMessagesProps={{
isAvailable: true,
isLoading: false,
onPress: handleLoadEarlier
}}
/>npm install react-native-gesture-handler react-native-keyboard-controller react-native-reanimated react-native-safe-area-context
# or
yarn add react-native-gesture-handler react-native-keyboard-controller react-native-reanimated react-native-safe-area-contextThe library now uses a custom Modal implementation instead of react-native-lightbox-v2. If you were customizing the lightbox, you'll need to update your customization approach.
- This version includes 170+ commits since v2.8.1
- Full TypeScript support with improved type definitions
- Better React Native compatibility (tested with RN 0.81.5)
- Improved React 19 support
- Better Expo integration
Special thanks to all contributors who made this release possible, including fixes and improvements from the community.
For detailed commit history, see: https://github.com/FaridSafi/react-native-gifted-chat/compare/2.8.1...3.0.0