React Native Chat
⨠Featuresâ
- đŦ Chat list - the list of chats with search, selection actions, archive, swipe to archive and draggable pinned chats; plug in your backend
- đ Dark mode & theming - full light/dark token system, switchable at runtime
- đ¤ Streaming AI messages - token-by-token replies with a typing caret and stop control
- đ Emoji reactions - long-press picker and reaction pills
- â¨ī¸ Emoji keyboard - a full emoji panel in the keyboard's place, with search, recents and skin tones
- đ Attachment menu - photo grid with numbered selection and a caption, files and location
- đĨ Video & audio messages - real inline playback, with a tappable fallback
- đŧī¸ Photo viewer - tap a photo, then swipe through every photo in the chat; pinch or double-tap to zoom
- đī¸ Voice & video recording - hold-to-record voice and round video notes, on once their peers are installed
- đ Empty chat greeting - a "No messages here yet..." card with a tap-to-send đ
- đ Big emoji - emoji-only messages drop the bubble and draw large
- đĩ Unread bar - "Unread Messages" above the first unread message, opened scrolled to it
- đ Link previews - a web page block under the text
- âī¸ Multi-select - "Select" in the long-press menu: check circles, Copy / Forward / Delete bar
- đ Location messages - map card that opens the system maps app
- âŠī¸ Swipe to reply - reply preview and message threading
- đ Long-press actions - a context menu beside the finger, with a reactions bar
- ⥠Quick replies - bot-style reply buttons
- đ Smart link parsing - URLs, emails, phones, hashtags, mentions
- đ¤ Avatars - user initials or custom images
- âī¸ Typing indicator - show when someone is typing
- âŽī¸ Load earlier messages - pagination and infinite scroll
- âŦī¸ Scroll to bottom - quick jump back to the latest
- â Message status - ticks for sent, delivered and read
- đŦ System messages - in-line notifications
- đ Localized dates & i18n - Day.js dates, translated UI strings
- â¨ī¸ Keyboard handling - smart avoidance on every platform
- đ¨ Fully customizable - override any component with your own
- đą Expo & đ Web - works with Expo and react-native-web
- đ TypeScript - complete definitions, generic over your message type
Actively maintained, New Architecture ready, built for the latest Reanimated / Gesture Handler.
 Â
 Â
 Â
 Â
Quick startâ
npx expo install @kesha-antonov/react-native-chat react-native-reanimated react-native-gesture-handler react-native-safe-area-context react-native-keyboard-controller
import { useCallback, useState } from 'react'
import { Chat } from '@kesha-antonov/react-native-chat'
export function Example () {
const [messages, setMessages] = useState([
{
_id: 1,
text: 'Hello developer',
createdAt: new Date(),
user: { _id: 2, name: 'John Doe', avatar: 'https://placeimg.com/140/140/any' },
},
])
const onSend = useCallback((newMessages = []) => {
setMessages(previous => Chat.append(previous, newMessages))
}, [])
return <Chat messages={messages} onSend={onSend} user={{ _id: 1 }} />
}
That is the whole setup - everything below is optional.