# Release notes (/en/realtime-media/im/reference/release-notes/flutter)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

This page provides release notes for Chat SDK for Web.

    * [Client API](#client-api)
    * [RESTful API](#restful-api)

    ## Client API [#client-api-3]

    ## v1.4.0 [#v140-3]

    Released on July 3, 2026.

    #### New features [#new-features-32]

    * Added support for sending and receiving GIF image messages. A GIF image message is a subtype of image message that is not compressed when sent. For details, see [Send and receive a GIF image message](/en/realtime-media/im/build/build-core-messaging/messages/send-receive-messages#send-and-receive-a-gif-image-message).
    * Added support for setting, updating, and retrieving chat group avatars. For details, see [Update the chat group avatar](/en/realtime-media/im/build/build-groups-rooms-and-threads/chat-group/manage-group-attributes#update-the-chat-group-avatar).
    * Added support for retrieving the following information when a user joins a chat room:
      * The current member count, using the `ChatRoom#memberCount` attribute. This count updates when members join or leave the chat room.
      * The chat room-wide mute status, using the `ChatRoom#isAllMemberMuted` attribute. This status updates when a mute or unmute event is received.
      * The chat room creation time, using the new `ChatRoom#createTimestamp` attribute.
      * Whether the current user is on the chat room allow list, using the new `ChatRoom#isInWhitelist` attribute.
      * The current user's mute expiration time, using the `ChatRoom#muteExpireTimestamp` attribute.
    * Added the `ChatRoomEventHandler#onMuteListAddedFromChatRoom(roomId, Map<String, int> mutes)` event, which provides the muted members' user IDs and their mute expiration timestamps through the `mutes` parameter. This event deprecates the old `ChatRoomEventHandler#onMuteListAddedFromChatRoom(roomId, List<String> mutes, int expireTime)` event. For details, see [Listen for chat room events](/en/realtime-media/im/build/build-groups-rooms-and-threads/chat-room/manage-chatrooms#listen-for-chat-room-events).
    * Added support for retrieving roaming messages sent by specific group members from the server. For details, see [Retrieve message history of the specified conversation](/en/realtime-media/im/build/build-core-messaging/messages/retrieve-messages#retrieve-message-history-of-the-specified-conversation).
    * Added support for retrieving messages sent by specific members in a local group conversation. For details, see [Search local messages sent by specific members](/en/realtime-media/im/build/build-core-messaging/messages/retrieve-messages#search-local-messages-sent-by-specific-members).
    * Added support for searching all local conversations by keyword. The SDK returns the matching conversation IDs and their message IDs. For details, see [Search local conversations by keyword](/en/realtime-media/im/build/build-core-messaging/messages/retrieve-messages#search-local-conversations-by-keyword).
    * Added support for retrieving one or more local messages by message ID. For details, see [Retrieve local messages by message ID](/en/realtime-media/im/build/build-core-messaging/messages/retrieve-messages#retrieve-local-messages-by-message-id).
    * Added the `ChatGroupEventHandler#onMembersJoinedFromGroup` and `ChatGroupEventHandler#onMembersExitedFromGroup` events, which notify other members in batches when one or more members join or leave a group. Previously, the SDK triggered a separate event for each member. These events deprecate `ChatGroupEventHandler#onMemberJoinedFromGroup` and `ChatGroupEventHandler#onMemberExitedFromGroup`. For details, see [Listen for chat group events](/en/realtime-media/im/build/build-groups-rooms-and-threads/chat-group/manage-chat-groups#listen-for-chat-group-events).

    #### Improvements [#improvements-37]

    * Changed the unique app identifier from the App Key to the App ID.

      <CalloutContainer type="info">
        <CalloutDescription>
          As of v1.4.0, the App Key, including the `org_name` and `app_name` parameters, is deprecated in favor of the App ID. If you integrated an earlier version of the SDK using the App Key, no changes are required: both the App Key and the App ID continue to work with Agora Chat.
        </CalloutDescription>
      </CalloutContainer>

    * Added support for modifying more message types with `ChatManager#modifyMessage`:

      * Text and custom messages: modify the message body and the extension attributes (`attributes`).
      * File, video, voice, image, location, and combined messages: modify the extension attributes (`attributes`) only.
      * Command messages: modification is not supported.

      For details, see [Modify sent messages](/en/realtime-media/im/build/build-core-messaging/messages/send-receive-messages#modify-sent-messages).

    * Allowed group owners, chat room owners, and admins to recall messages sent by other members. For details, see [Recall a message](/en/realtime-media/im/build/build-core-messaging/messages/send-receive-messages#recall-a-message).

    * Changed the trigger threshold for the `ConnectionEventHandler#onTokenWillExpire` event: the SDK now triggers the event when 80% of the token's validity period has elapsed, instead of 50%. For details, see [Authentication](/en/realtime-media/im/build/secure-access-and-authentication/authentication).

    * Added support for retrieving a group member list that includes each member's role and join time, using `ChatGroupManager#fetchGroupMembersInfo`. For details, see [Retrieve the chat group member list](/en/realtime-media/im/build/build-groups-rooms-and-threads/chat-group/manage-chat-groups#retrieve-the-chat-group-member-list).

    * Optimized certain database operations.

    * Optimized the reconnection logic to automatically switch reconnection addresses by default.

    * Added the device timezone offset to log files to facilitate troubleshooting.

    * Improved the loading performance of the local conversation list when the latest message is an attachment by removing redundant file length checks.

    #### Issues fixed [#issues-fixed-30]

    * Messages in memory were not deleted when the corresponding local conversation was removed.
    * The `TYPE` field was empty in the `ChatThreadEventHandler#onUserKickOutOfChatThread` event.
    * `ChatEventHandler#onMessageContentChanged` did not return modification details when editing message types other than text and custom messages.
    * After a group or chat room was disbanded, the SDK still fetched group or chat room details from the server after members received the disband event.
    * The database was mistakenly rebuilt when a `SQLITE_BUSY` error occurred.
    * The latest message in a conversation retrieved from the server with `ChatManager#fetchConversationsByOptions` did not contain translations or message reactions.
    * A crash occurred under extreme network conditions.

    ## v1.3.3 [#v133]

    Released on July 10, 2025.

    #### New features [#new-features-33]

    * Added the `ChatRoomManager#joinChatRoom(String, bool, String)` method to allow a user to pass extension information and specify whether to quit all other chat rooms when the user joins a chat room.

    #### Issues fixed [#issues-fixed-31]

    * Incorrect return result format of `GroupManager.fetchMemberAttributes` on the Android platform.

    ## v1.3.2 [#v132-1]

    Released on May 2, 2025.

    #### New features [#new-features-34]

    * Added the `ChatGroupManager.isMemberInGroupMuteList` method to check whether the current user is in the group mute list.

      ```dart
      bool inMuteList = await ChatClient.getInstance.chatRoomManager.isMemberInChatRoomMuteList(roomId);
      ```

    * Added the `ChatRoomManager.isMemberInChatRoomMuteList` method to check whether the current user is in the chat room mute list.

      ```dart
      bool inMuteList = await ChatClient.getInstance.groupManager.isMemberInGroupMuteList(groupId);
      ```

    #### Issues fixed [#issues-fixed-32]

    * Build issue for Android platform on Flutter 3.29.0.

    ## v1.3.1 [#v131-3]

    Released on December 20, 2024.

    #### Improvements [#improvements-38]

    * Added support for pinning messages in one-to-one conversations. Users can call `ChatManager#pinMessage` or `ChatManager#unpinMessage` to pin or unpin a one-to-one chat message.
    * Optimized the connections to the server under weak network conditions for native platforms.

    #### Issues fixed [#issues-fixed-33]

    The following issues are fixed on native platforms:

    * An attachment message can still be sent successfully in spite of failure to send the attachment under special circumstances.
    * An incorrect `nextkey` is returned when pulling roaming messages.
    * The cache is not updated upon the addition of contacts to the block list.
    * The official push feature may not work after users log out and log in again.

    ## v1.3.0 [#v130-3]

    Released on December 11, 2024.

    #### New features [#new-features-35]

    * Added the `ChatManager#deleteAllMessageAndConversation` method to uni-directionally clear all conversations and messages in them. You can also choose whether to clear the chat history on the server.
    * Added the function of searching for messages by search scope in `MessageSearchScope` during keyword-based search.
      * `MessageSearchScope`: Includes three message search scopes: message content, message extension information, and both.
      * `ChatManager#loadMessagesWithKeyword`: Searches for messages in all conversations by search scope.
      * `conversation#loadMessagesWithKeyword`: Searches for messages in a single conversation by search scope.
    * Added the function of tagging a conversation:
      * `ConversationFetchOptions`: Includes options for filtering conversations retrieved from the server. You can only retrieve pinned conversations or tagged conversations by setting the options.
      * `ChatManager#addRemoteAndLocalConversationsMark`: Tags a conversation.
      * `ChatManager#deleteRemoteAndLocalConversationsMark`: Untags a conversation.
      * `ChatManager#fetchConversationsByOptions`: Gets conversations from the server by setting `ConversationFetchOptions`.
      * `Conversation#marks`: Gets all tags of a local conversation.
      * `ChatMultiDevicesEvent#CONVERSATION_UPDATE_MARK`: Conversation tag update event in a multi-device login use-case. If a user adds or removes a conversation tag on one device, this event is received on other devices of the user.
    * Added the `ChatMessage#isBroadcast` property to indicate whether the message is a broadcast message sent via a RESTful API to all chat rooms under an app.
    * Added the `ChatMessage#deliverOnlineOnly` property to set whether the message is delivered only when the recipient(s) is/are online. If this property is set to `true`, the message is discarded when the recipient is offline.
    * Added the `GroupManager#fetchJoinedGroupCount` method to allow the current user to retrieve the total number of groups they joined.
    * Added a 706 `CHATROOM_OWNER_NOT_ALLOW_LEAVE` error code returned when the chat room owner leaves the chat room. If `ChatOptions#isChatRoomOwnerLeaveAllowed` is set to `false` during SDK initialization, the chat room owner is not allowed to leave the chat room. In this case, error 706 is reported if the chat room owner calls the `leaveChatRoom`.
    * Added support for retrieval of historical messages of chat rooms from the server.
    * Added the `ChatOptions#useReplacedMessageContents` property to determine whether the server returns the adjusted text message to the sender if the message content is replaced during text moderation.
    * Added the function of pinning a message:
      * `ChatManager#pinMessage`: Pins a message.
      * `ChatManager#unpinMessage`: Unpins a message.
      * `ChatManager#fetchPinnedMessages`: Gets the list of pinned messages in a conversation from the server.
      * `Conversation#loadPinnedMessages`: Gets the list of pinned messages in a local conversation.
      * `MessagePinInfo`: Includes the operator that pins or unpins the message and the operation time.
      * `ChatMessage#pinInfo`: Includes the message pinning information.
      * `ChatEventHandler#onMessagePinChanged`: Occurs when the message pinning status changes. When a message is pinned or unpinned in a group or chat room, all members in the group or chat room receive this event.
    * Added the `ChatOptions#enableEmptyConversation` property to set whether to include empty conversations in the retrieved list of local conversations. This property is set during SDK initialization.
    * Added the `applicant` and `decliner` parameters to the `ChatGroupEventHandler#onRequestToJoinDeclinedFromGroup` event to respectively indicate the user that applies to join the group and the user that declines the join request.
    * Added the `ChatOptions#messagesReceiveCallbackIncludeSend` property to set whether to return the successfully sent message in the `ChatEventHandler#onMessagesReceived` event.
    * Added the support for returning the modified custom message via the `ChatEventHandler#onMessageContentChanged` event if the message is modified via the RESTful API.

    #### Improvements [#improvements-39]

    * Marked `ChatManager#fetchConversation` and `ChatManager#fetchPinnedConversations` deprecated. Use `ChatManager#fetchConversationsByOptions` instead.
    * Added support for forwarding single attachment messages by passing in the message body and extension fields, without reuploading the attachment.
    * Reduced the number of times group specifications are retrieved when a large number of group member events are received during certain use-cases.
    * Delivered a more accurate chat room member count by optimizing the way to update the member count when members join or leave the chat room.
    * Shortened the time used to call the `ChatManager#markAllConversationsAsRead` method by marking all conversations read more efficiently.
    * Optimized the way the SDK randomly gets server addresses to increase the success rate of requests.
    * Adjusted the timeout period for joining or leaving chat rooms.
    * Optimized the way the connection is re-established upon a connection failure in certain use-cases.
    * Added support for uploading an attachment in fragments when sending an attachment message.
    * Marked the `ChatClient#loginWithAgoraToken` method deprecated. Use the `ChatClient#loginWithToken` method instead.
    * Fine tuned the error message for token-based login for accuracy.
    * Optimized the way messages are re-sent.
    * Removed the internal `NetworkOnMainThreadException` exception catching during a network request.
    * Optimized the database upgrade logic.
    * Increased the maximum allowed size of a log file from 2 MB to 5 MB.
    * Added the iOS privacy protocol `PrivacyInfo.xcprivacy`.

    #### Issues fixed [#issues-fixed-34]

    * For a modified message, the `from` property is missing from the body of the message pulled from the server by an offline user that gets online.
    * In special use-cases, chat room events are missing when users exit the SDK before logging into it.
    * The SDK reconnects to the server twice after the network is back to normal.
    * An incorrect error message is returned for an logged-out user that calls `leaveChatRoom`.
    * Members in a group are counted twice in certain use-cases.
    * The data reporting module crashes occasionally.
    * The SDK is instantiated repeatedly when the `ChatManager#updateMessage` method is called frequently for SDK initialization in multi-thread use-cases.

    ## v1.2.0 [#v120-3]

    Released on December 6, 2023.

    #### New features [#new-features-36]

    * Added the function of forwarding multiple messages:
      * `ChatManager#fetchCombineMessageDetail`：Retrieves the list of original messages included in a combined message from the server.
      * `MessageType.COMBINE`: The combined message type.
      * `CombineMessageBody`: The combined message body class.
    * Added the function of modifying sent messages:
      * `ChatManager#modifyMessage`: Modifies a sent text message.
      * `ChatEventHandler#onMessageContentChanged`: Occurs when a sent message is modified. The message recipient receives this callback.
    * Added the function of pinning a conversation:
      * `ChatManager#pinConversation`: Pins or unpins a conversation.
      * `ChatManager#fetchPinnedConversations`: Retrieves the list of pinned conversations from the server.
    * Added the `fetchConversation` method to retrieve the conversation list from the server. Marked the `ChatManager#getConversationsFromServer` method deprecated.
    * Added `FetchMessageOptions` as the parameter configuration class for retrieving historical messages from the server.
    * Added the `ChatManager#fetchHistoryMessagesByOption` method to retrieve historical messages of a conversation from the server according to `FetchMessageOptions`, the parameter configuration class for retrieving historical messages.
    * Added the `direction` parameter to `ChatManager#fetchHistoryMessages` to allow you to retrieve historical messages from the server according to the message search direction.
    * Added the `ChatConversation#deleteMessagesWithTs` method to delete messages sent or received in a certain period from the local database.
    * Added the function of managing custom attributes of group members:
      * `ChatGroupManager#setMemberAttributes`: Sets custom attributes of a group member.
      * `ChatGroupManager#fetchMemberAttributes` and `GroupManager#fetchMembersAttributes`: Retrieves custom attributes of group members.
      * `ChatGroupEventHandler#onAttributesChangedOfGroupMember`: Occurs when a custom attribute is changed for a group member.
    * Added the `reason` parameter to `ChatRoomEventHandler#onRemovedFromChatRoom` so that the member removed from the chat room knows the removal reason.
    * Added the `ChatConnectionEventHandler#onAppActiveNumberReachLimit` callback that occurs when the number of daily active users (DAU) or monthly active users (MAU) for the app has reached the upper limit.
    * Added the `IMultiDeviceDelegate#OnRoamDeleteMultiDevicesEvent` callback that occurs when historical messages in a conversation are deleted from the server on one device. This event is received by other devices.
    * Added the support for user tokens in the following methods:
      * `ChatClient#fetchLoggedInDevices`: Retrieves the list of online login devices of a user.
      * `ChatClient#kickDevice`: Kicks a user out of the app on a device.
      * `ChatClient#kickAllDevices`: Kicks a user out of the app on all devices.
    * Added the `ChatMultiDeviceEventHandler#onRemoteMessagesRemoved` callback that occurs when historical messages in a conversation are deleted from the server on one device. This event is received by other devices.
    * Added the  `List reactions` attribute in `ChatMessageReactionEvent`:
      * `ReactionOperation#userId`: The user ID of the operator.
      * `ReactionOperation#reaction`: The changed Reaction.
      * `ReactionOperation#operate`: The operation.
    * Added the `ChatRoomEventHandler#onSpecificationChanged` callback that occurs when details of a chat room are changed.

    #### Improvements [#improvements-40]

    * Optimized the `ChatManager#searchMsgFromDB` method to include custom messages in the message retrieval result.
    * Adapted to the Android 14 system.

    #### Issues fixed [#issues-fixed-35]

    * `ConnectionEventHandler#onConnected` and `ConnectionEventHandler#onDisconnected` cannot be received on the iOS system.
    * Message extension attributes of the string type in the Android system turn into the Int type.
    * Upon a hot reload on Android, the callback is triggered repeatedly.
    * When you retrieve custom chat room attributes, passing `null` to the key of an attribute causes the app to crash.
    * Chat room events cannot be received by a user that logs in to the Agora Chat server again after logout on the Android platform.
    * `ChatManager#getThreadConversation` JSON error.
    * `ChatMessage#chatThread` error.
    * The `ChatRoomEventHandler#onSpecificationChanged` is not triggered when the chat room announcement changes.
    * The Android platform crashes when a user is removed from a thread.
    * An error occurs when `ChatThreadManager#fetchChatThreadMembers` is called.

    ## v1.1.1 [#v111]

    Released on June 21, 2023.

    #### Issues fixed [#issues-fixed-36]

    Unexpected execution of callback methods due to multiple initializations of an Android environment.

    ## v1.1.0 [#v110-3]

    Released on April 28, 2023.

    #### New features [#new-features-37]

    * Upgrades the iOS and Android native platforms that the Flutter platform depends on to v1.1.0.
    * Adds the function of managing custom chat room attributes to implement functions like seat control and synchronization in voice chat rooms. See [Manage chat room attributes](/en/api-reference/api-ref/im/chatroom-management/manage-chatroom-attributes).
    * Adds the `ChatManager#fetchConversationListFromServer` method to allow users to get the conversation list from the server with pagination. See [Retrieve a list of conversations from the server](/en/realtime-media/im/build/build-core-messaging/messages/retrieve-messages#retrieve-a-list-of-conversations-from-the-server).
    * Adds the `ChatMessage#chatroomMessagePriority` attribute to implement the chat room message priority function to ensure that high-priority messages are dealt with first. See [Set message priority](/en/realtime-media/im/build/build-core-messaging/messages/send-receive-messages#set-message-priority).
    * Adds the support for push notifications on the server side to allow you to send push notifications to all users, individual users specified by IDs, or groups of users by labels. For how to configure and send push notifications, see [Push notification management](/en/api-reference/api-ref/im/push-notification-management).
    * Adds an additional option to delete messages on the server side. See [Delete conversations and historical messages](/en/realtime-media/im/build/build-core-messaging/messages/manage-messages#delete-conversations-and-historical-messages).

    #### Improvements [#improvements-41]

    Changes the message sending result callback from `ChatMessage#setMessageStatusCallBack` to `ChatManager#addMessageEvent`.

    #### Issues fixed [#issues-fixed-37]

    `ChatManager#deleteMessagesBeforeTimestamp` execution failures.

    ## v1.0.9 [#v109-2]

    Released on December 19, 2022.

    #### Issues fixed [#issues-fixed-38]

    * Some alerts on Android 12.
    * The inconsistency of messages in the memory and the database due to a call to the
      `updateMessage` method in rare use-cases.
    * The `EMGroupEventHandler#onDestroyedFromGroup` callback that occurs when a group is
      destroyed did not work on the Android platform.
    * The `EMGroupEventHandler#onAutoAcceptInvitationFromGroup` callback that occurs when a
      user's group invitation is accepted automatically did not work on the Android platform.
    * Crashes in rare use-cases.

    ## v1.0.8 [#v108-3]

    Released on November 22, 2022.

    #### Improvements [#improvements-42]

    Removed redundant SDK logs.

    #### Issues fixed [#issues-fixed-39]

    * Failures in getting a large number of messages from the server in a few use-cases.
    * The issue with incorrect data statistics.
    * Crashes caused by log printing in rare use-cases.

    ## v1.0.7 [#v107-3]

    Released on September 7, 2022.

    #### New features [#new-features-38]

    * Adds the `customEventHandler` attribute in `ChatClient` to allow you to set custom listeners to receive the data sent from the Android or iOS device to Flutter.
    * Adds event listener classes for event listening.
    * Adds the `PushTemplate` method in `PushManager` to support custom push templates.
    * Adds the `isDisabled`  attribute in `Group` to indicate whether a group is disabled. This attribute needs to be set by developers at the server side. This attribute is returned when you call the `fetchGroupInfoFromServer` method to get group details.
    * Adds the `displayName` attribute in `PushConfigs` to allow you to check the nickname displayed in your push notifications.

    #### Improvements [#improvements-43]

    * Marked `AddXXXManagerListener` methods (such as `addChatManagerListener`  and `addContactManagerListener`) as deprecated.
    * Enhanced API reference documentation.

    ## v1.0.6 [#v106-3]

    Released on July 21.

    #### Issues fixed [#issues-fixed-40]

    * The callbacks for messaging thread were not triggered on iOS.
    * The callbacks for reaction were not triggered in iOS.
    * Occasional crashes occurred on Android when retrieving conversations from the server.

    ## v1.0.5 [#v105-1]

    Released on June 17.

    This is the first release for the Chat Flutter SDK, which enables you to add real-time chatting functionalities to an Android or iOS app. Major features include the following:

    * Sending and receiving messages in one-to-one chats, chat groups, and chat rooms.
    * Retrieving and managing conversations and messages.
    * Managing chat groups and chat rooms.
    * Managing contact and blocklists.

    For the complete feature list, see [Product Overview](../index).

    Chat is charged on a MAU (Monthly Active Users) basis. For details, see [Pricing for Chat](./pricing) and [Pricing Plan Details](./pricing-plan-details).

    Refer to the following documentations to enable Chat and use the Chat SDK to implement real-time chatting functionalities in your app:

    * [Enable and Configure Chat](../get-started/enable)
    * [Chat SDK quickstart](../get-started-sdk)
    * [Messages](/en/realtime-media/im/build/build-core-messaging/messages/message-overview)
    * [Chat Group](/en/realtime-media/im/build/build-groups-rooms-and-threads/chat-group/group-overview)
    * [Chat Room](/en/realtime-media/im/build/build-groups-rooms-and-threads/chat-room/chatroom-overview)
    * [RESTful API overview](/en/api-reference/api-ref/im)

    
  
      
  
      
  
      
  
