Skip to content

Releases

6.1.5

Choose a tag to compare

@kesha-antonov kesha-antonov released this 06 Nov 21:56

📝 Docs

  • The README shows the dark feature showcase by default (npm included) and the light one in a light theme

6.1.4

Choose a tag to compare

@kesha-antonov kesha-antonov released this 06 Nov 21:37

📝 Docs

  • The README's opening GIF loads from the release tag as well, like the feature showcase

6.1.3

Choose a tag to compare

@kesha-antonov kesha-antonov released this 06 Nov 21:16

📝 Docs

  • The README's showcase GIFs load from the release tag, so the npm page shows the current ones instead of a cached copy

6.1.2

Choose a tag to compare

@kesha-antonov kesha-antonov released this 06 Nov 20:54

📝 Docs

  • The feature showcase opens in the dark theme and switches to light, with a wider typing indicator

6.1.1

Choose a tag to compare

@kesha-antonov kesha-antonov released this 06 Nov 20:27

📝 Docs

  • The README's Features section (and so the npm page) and the website's intro play an animated showcase of the chat's features, in light and dark

6.1.0

Choose a tag to compare

@kesha-antonov kesha-antonov released this 06 Nov 20:22

✨ Features

  • ChatHeader: the chat screen's bar to match ChatList (back arrow, avatar, name, "online" / "typing" status line, buttons); its status colors are theme.chatList.headerSubtitle / headerSubtitleActive
  • chatRef with scrollToMessage(id, { animated, viewPosition, isHighlighted }), to move to a message from outside the chat
  • highlightText / highlightTextStyle mark words in every message's text, e.g. a search query
  • onRetryMessage adds "Retry" to your own failed messages
  • theme.textScale multiplies every text size, for an app's own text-size setting
  • bottomInset for a host that knows the composer's bottom inset better than the measurement
  • attachments.pickers (gallery, camera, file) use the app's own pickers instead of the Expo ones, and attachments.isGalleryGridEnabled: false leaves Gallery to the system picker (no READ_MEDIA_IMAGES needed)
  • ChatList: timeFormat / dateFormat for the rows' time and date, headerRightPosition: 'afterSearch'
  • A custom renderFooter gets the typing indicator as its second argument

🐛 Fixes

  • ChatList: a failed last message shows the red error badge instead of a check that read as sent
  • Android: the send and attach buttons' press ripple is round instead of a square around the circle
  • With voice and video notes off, the send button stays in its slot (disabled while empty) instead of leaving a blank space
  • ChatList: swiping or dragging a row no longer copies the whole chat to the UI thread, which failed on a Date in lastMessage.createdAt
  • listProps handlers the list uses itself (drag, momentum, content size, item size, metrics) run after its own instead of being dropped, and contentContainerStyle adds to its padding
  • The chat measures its place in the window again as the keyboard opens, so a chat in a panel that slides in with a transform keeps the composer on the keyboard
  • Android: the composer's text no longer drops a little on the first typed letter
  • Chat is memoized: a parent re-render with the same props no longer renders the conversation again

6.0.1

Choose a tag to compare

@kesha-antonov kesha-antonov released this 02 Nov 21:15

📝 Docs

  • The README (and so the npm page) opens with a showcase of the example app's Chats demo

Full history: CHANGELOG.md

6.0.0

Choose a tag to compare

@kesha-antonov kesha-antonov released this 02 Nov 21:07

A new default look and built-in messenger features: emoji keyboard, attachment menu, link previews, multi-select, media transfer states, and reworked voice and round video notes.

💥 Breaking

  • FlashList support removed (isFlashListEnabled, the @shopify/flash-list peer): it stopped drawing after fast flings on Android
  • The message list is Legend List instead of FlatList (far fewer dropped frames). listProps takes Legend List props, messagesContainerRef is a LegendListRef, and the list renders oldest first (indexes count from the oldest; onEndReached fires at the newest)
  • New default look (gradient outgoing bubbles, wallpaper, tails, inline time, in-bubble reactions, name colors, floating composer); restore any of it through theme / darkTheme
  • Requires react-native-gesture-handler 3, React Native 0.82+ and React 19; components rendered outside Chat need a GestureHandlerRootView
  • Round video notes require react-native-vision-camera 5 (with nitro modules / image) and expo-video's createVideoPlayer; add the camera and microphone permission keys
  • The native attachment sheet requires @lodev09/react-native-true-sheet 3+
  • On by default (with an opt-out): voice and round notes once their peers are installed (audioRecording / videoRecording={false}), emoji button and paperclip (emojiKeyboard / attachments={false}), long-press menu (defaultMessageActions={false}), swipe-to-reply (reply.swipe.isEnabled: false), scroll-to-bottom button (isScrollToBottomEnabled={false}), reactions expand button (reactions.renderExpandedPicker={null}), big emoji (theme.bubble.bigEmojiMaxCount: 0), empty-chat greeting (renderChatEmpty)
  • The send / record button sits outside the composer's capsule; a custom renderSend goes there too
  • The long-press menu opens beside the finger after 0.4s; Delete is no longer red; actions run after it closes
  • reply.swipe.renderAction gets progress as distance over 50pt
  • scrollToBottomOffset defaults to 100
  • Avatars and sender names show in group chats only (isAvatarVisible, isGroupChat)
  • isInfiniteScrollEnabled shows a loading cell; activityIndicatorSize is ignored
  • reactions.isEnabled defaults to on when onReactionPress is passed; tapping a reply quote jumps to it unless reply.onPress is set
  • Voice notes: round notes don't autoplay (mediaPlayback.isRoundVideoAutoplayEnabled), the unread dot reads isMediaUnread, takes of 700ms or less are dropped, theme.voice thresholds changed, speed control moved to the "now playing" bar
  • textInputRef is typed RefObject<ComponentRef<typeof TextInput> | null>

✨ Features

  • Round video notes pause and resume into the same video; the paused circle holds its last frame (Android)
  • Swipe between all of a chat's photos in the viewer, with counter, caption, sender and date; pinch / double-tap to zoom (mediaViewerCounter, mediaViewerDate labels)
  • Slide along the emoji category strip
  • Reaction pills show who reacted (reactions.getUser); up to three reactions per person (Chat.toggleReaction, { maxPerUser })
  • A round note keeps playing in the long-press menu
  • TypingStatus for headers and list rows (TypingAction, getTypingText)
  • Drafts (onDraftChange), kept aside while editing
  • ChatList and useChatList: search, selection, archive, swipe to archive, pinned chats, unread, typing, drafts
  • Built-in emoji keyboard (emojiKeyboard, EmojiGrid) and attachment menu (attachments, AttachmentMenu)
  • File messages (IMessage.file, MessageFile) and link previews (IMessage.linkPreview, fetchLinkPreview, LinkPreviewCard)
  • Media transfer states: progress, cancel, download (IMessage.transfer, isDownloadRequired, mediaTransfer)
  • isLoading spinner over an empty chat
  • Multi-select (onSelectionChange, onForwardMessages, onDeleteMessages, renderSelectionBar)
  • "Unread Messages" bar (firstUnreadMessageId, UnreadSeparator)
  • Default message actions Reply, Copy, Forward, Pin, Edit, Select, Delete (defaultMessageActions); a messageActions function receives them
  • Edit mode, "edited" mark, failed status badge
  • Voice and round notes: lock, pause, resume, trim, send animations, waveform bubbles, floating round note, "now playing" bar, auto-play next, playback speed, view once, transcription, raise to listen, server waveforms
  • useChatMessages, reply.isEnabled, reply.onReply, isGroupChat, isAvatarVisible, getChatCapabilities()
  • Wallpaper (theme.wallpaper, renderWallpaper) and screen-fixed outgoing gradient
  • New theme tokens, icons, exports and labels in all 15 locales

⚡ Performance

  • lib/ is compiled with the React Compiler, so every app gets its memoization
  • Rows render only what changed: a send, status tick, reaction or streamed token re-renders one row
  • A keystroke, reply, edit or recording tick re-renders only the composer (or just the timer), not Chat or the rows
  • Selection, highlights, link previews and the unread bar wake only the rows they concern
  • Chats open faster: menus, recorders, the attachment menu and swipe arrows mount on first use; messages paint a frame after the composer
  • Cheaper rows and gradient: cached day labels and times, shared themed styles, one colour-scheme subscription
  • Voice and round-note progress runs on the UI thread

🐛 Fixes

  • Round video notes play on a finger tap on Android
  • Round video notes record on Android again (a zoom or torch error no longer ends the take)
  • A round note's time pill is no longer cut under the circle
  • No Reanimated "Reading from value during component render" warning with the React Compiler
  • A photo grouped under its sender's previous message no longer pokes past the bubble's corner
  • ChatList: failed avatars fall back to initials, failed thumbnails are dropped, Android rows no longer clip text
  • Emoji categories answer a tap mid-scroll
  • Gradient bubbles are no longer one colour on iOS
  • A chat opens with its rows in place on Android
  • A custom renderChatEmpty is no longer upside down
  • Streamed markdown replies show text as it arrives
  • Switching light / dark no longer scrolls the chat
  • The long-press menu follows its message and no longer covers it
  • A long-press on media no longer also opens it on release
  • RTL for the context menu and reaction picker
  • Many smaller animation, layout and Android fixes

📦 Dependencies

  • New optional peers: @react-native-async-storage/async-storage, expo-media-library, expo-document-picker, expo-location, expo-sharing, expo-image, expo-clipboard, @react-native-clipboard/clipboard
  • Toolchain: React Native 0.88.1, React 19.3.1, gesture-handler 3.4.0, Reanimated 4.7.1, worklets 0.13.1, Jest 30, ESLint 10

📲 Example app

  • New Chats tab: a small messenger on ChatList with profiles, archive, typing and an AI bot
  • Demo messages go through sending, sent and read
  • Native tabs; Expo SDK 58; runs on Android
  • Demo photos from Unsplash
  • Examples slimmed to defaults plus what each shows

📝 Docs

  • New README screenshots; README covers the new features, peers and permissions
  • Troubleshooting: iOS 26 blur, "Cannot read property 'Chat' of undefined", bare React Native setup
  • README, streaming guide and migration guide cover the photo viewer, round-note pause, app-owned status, Stop button, forceRTL, theme tokens and building blocks

Upgrading from 5.x: see the 💥 Breaking list above and docs/MIGRATION.md.

Full history: CHANGELOG.md

5.0.1

Choose a tag to compare

@kesha-antonov kesha-antonov released this 15 Sep 15:33

5.0.0

Choose a tag to compare

@kesha-antonov kesha-antonov released this 03 Sep 10:05