Skip to main content

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 forkreact-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 systemper-component color propstheme / 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 groupingflat 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! 💖

Become a Sponsor


Using an AI coding agent? llms.txt is a condensed integration guide for agents adding this library to an app, and AGENTS.md covers working inside this repository.