What's new vs Gifted Chat
Kept in sync with upstream react-native-gifted-chat's latest master, so you keep everything it already has - and the same IMessage model and prop names. Everything added here is non-breaking and opt-in; the media and recording features only activate once you install their optional peer deps.
Side-by-side comparison
| Added in this fork | react-native-gifted-chat | @kesha-antonov/react-native-chat |
|---|---|---|
| Active maintenance | 💤 sporadic | ✅ active |
| Modern default UI (Telegram-inspired) | dated 2020 look | ✅ modern, fully overridable |
| Light/Dark theme system | per-component color props | ✅ theme / darkTheme tokens, runtime switch |
| Streaming (AI) messages | ❌ | ✅ token-by-token + typing cursor |
| Emoji reactions | ❌ | ✅ long-press picker + reaction pills |
| Swipe-to-reply + reply preview | ❌ | ✅ built in |
| Video / audio messages | "not implemented, render your own" | ✅ inline players + tappable fallback |
| Voice notes (hold-to-record + waveform) | ❌ | ✅ optional, Telegram-style |
| Video messages (round camera notes) | ❌ | ✅ optional, Telegram-style |
| Location messages | ❌ ignored | ✅ map card → opens system maps |
| Bubble tails + tighter message grouping | flat bubbles | ✅ |
Theming in one line
Override any token, light and dark
// Modern defaults out of the box, or override any token (light + dark):
<Chat
theme={{ colors: { accent: '#3390EC', outgoingBubble: '#EFFEDE' } }}
darkTheme={{ colors: { background: '#0E1621' } }}
{...props}
/>
Voice, video and location
Opt-in recording and media playback
<Chat
audioRecording={{ isEnabled: true }} // hold the mic to record a voice note (needs expo-audio)
videoRecording={{ isEnabled: true }} // record a video message (needs expo-image-picker)
// location messages render automatically for any IMessage with a `location`
{...props}
/>
# Optional inline media playback + recording:
npx expo install expo-video expo-audio expo-image-picker
Custom icons (e.g. Lucide)
Override any built-in icon
Built-in icons are the official Lucide glyphs, rendered via the optional react-native-svg peer when it is installed, or drawn with Views (no dependency) otherwise. Override any of them via the icons prop - the built-in icon is used for anything you don't override:
import { Send, Mic } from 'lucide-react-native'
<Chat
icons={{
send: ({ color, size }) => <Send color={color} size={size} />,
mic: ({ color, size }) => <Mic color={color} size={size} />,
}}
{...props}
/>
Overridable names: send, mic, camera, play, pause, check, checkAll, clock, pin, plus, close, chevronLeft, chevronDown, emoji, paperclip, reply, pencil, lock, trash.
Support This Project
I maintain this project in my free time with no compensation. If you find it useful and want to help keep it alive, please consider sponsoring. Your support means a lot! 💖
Using an AI coding agent?
llms.txtis a condensed integration guide for agents adding this library to an app, andAGENTS.mdcovers working inside this repository.