The most complete chat UI for React Native (formerly known as Gifted Messenger).
- Fully customizable components
 - Composer actions (to attach photos, etc.)
 - Load earlier messages
 - Copy messages to clipboard
 - Touchable links using react-native-parsed-text
 - Avatar as user's initials
 - Localized dates
 - Multiline TextInput
 - InputToolbar avoiding keyboard
 
- Use version 
0.2.xfor RN>= 0.44.0 - Use version 
0.1.xfor RN>= 0.40.0 - Use version 
0.0.10for RN< 0.40.0 
- Using npm: 
npm install react-native-gifted-chat --save - Using Yarn: 
yarn add react-native-gifted-chat 
import { GiftedChat } from 'react-native-gifted-chat';
class Example extends React.Component {
  state = {
    messages: [],
  };
  componentWillMount() {
    this.setState({
      messages: [
        {
          _id: 1,
          text: 'Hello developer',
          createdAt: new Date(),
          user: {
            _id: 2,
            name: 'React Native',
            avatar: 'https://facebook.github.io/react/img/logo_og.png',
          },
        },
      ],
    });
  }
  onSend(messages = []) {
    this.setState((previousState) => ({
      messages: GiftedChat.append(previousState.messages, messages),
    }));
  }
  render() {
    return (
      <GiftedChat
        messages={this.state.messages}
        onSend={(messages) => this.onSend(messages)}
        user={{
          _id: 1,
        }}
      />
    );
  }
}See example/App.js for a working demo!
e.g.
{
  _id: 1,
  text: 'My message',
  createdAt: new Date(Date.UTC(2016, 5, 11, 17, 20, 0)),
  user: {
    _id: 2,
    name: 'React Native',
    avatar: 'https://facebook.github.io/react/img/logo_og.png',
  },
  image: 'https://facebook.github.io/react/img/logo_og.png',
  // Any additional custom parameters are passed through
}messages(Array) - Messages to displaymessageIdGenerator(Function) - Generate an id for new messages. Defaults to UUID v4, generated by uuiduser(Object) - User sending the messages:{ _id, name, avatar }onSend(Function) - Callback when sending a messagelocale(String) - Locale to localize the datesisAnimated(Bool) - Animates the view when the keyboard appearsloadEarlier(Bool) - Enables the "Load earlier messages" buttononLoadEarlier(Function) - Callback when loading earlier messagesisLoadingEarlier(Bool) - Display anActivityIndicatorwhen loading earlier messagesrenderLoading(Function) - Render a loading view when initializingrenderLoadEarlier(Function) - Custom "Load earlier messages" buttonrenderAvatar(Function) - Custom message avatar; set tonullto not render any avatar for the messageonPressAvatar(Function(user)) - Callback when a message avatar is tappedrenderAvatarOnTop(Bool) - Render the message avatar at the top of consecutive messages, rather than the bottom (default)renderBubble(Function) - Custom message bubbleonLongPress(Function(context,message)) - Callback when a message bubble is long-pressed; default is to show an ActionSheet with "Copy Text" (see example usingshowActionSheetWithOptions())renderMessage(Function) - Custom message containerrenderMessageText(Function) - Custom message textrenderMessageImage(Function) - Custom message imageimageProps(Object) - Extra props to be passed to the<Image>component created by the defaultrenderMessageImagelightboxProps(Object) - Extra props to be passed to theMessageImage's LightboxrenderCustomView(Function) - Custom view inside the bubblerenderDay(Function) - Custom day above a messagerenderTime(Function) - Custom time inside a messagerenderFooter(Function) - Custom fixed bottom view, e.g. "User is typing..."; see example/App.js for an examplerenderInputToolbar(Function) - Custom message composer containerrenderComposer(Function) - Custom text input message composerrenderActions(Function) - Custom action button on the left of the message composerrenderSend(Function) - Custom send buttonrenderAccessory(Function) - Custom second line of actions below the message composeronPressActionButton(Function) - Callback when the Action button is pressed (if set, the defaultactionSheetwill not be used)bottomOffset(Integer) - Distance of the chat from the bottom of the screen (e.g. useful if you display a tab bar)minInputToolbarHeight(Integer) - Minimum height of the input toolbar; default is44listViewProps(Object) - Extra props to be passed to the messages<ListView>; some props can't be overridden, see the code inMessageContainer.render()for detailskeyboardShouldPersistTaps(Enum) - Determines whether the keyboard should stay visible after a tap; see<ScrollView>docsonInputTextChanged(Function) - Callback when the input text changesmaxInputLength(Integer) - Max message composer TextInput length
- 
Make sure you have
android:windowSoftInputMode="adjustResize"in yourAndroidManifest.xml:<activity android:name=".MainActivity" android:label="@string/app_name" android:windowSoftInputMode="adjustResize" android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
 - 
If you plan to use
GiftedChatinside aModal, see #200. 
Feel free to ask me questions on Twitter @FaridSafi!

