## 1.0.0
*April 1, 2026*
| Type | Changes |
|------|----------|
| **Added** | • BREAKING CHANGES: `Channel.join()` now only creates membership without subscribing or setting `lastReadMessageTimetoken`. Previous `join()` signature removed along with `JoinResult` type.<br/>• Added `Channel.onMessageReceived()` and `Channel.onTypingChanged()`. Deprecates `connect()` and `getTyping()`.<br/>• Added `Channel.sendText(text, SendTextParams)` with new `SendTextParams` data class. Previous multi-param `sendText()` overload is deprecated.<br/>• Added `Channel.emitCustomEvent()` and `Channel.onCustomEvent()` for publishing and listening to custom events with message type filtering.<br/>• Added `Channel.getInvitees()` to return channel members with pending (invited) status.<br/>• Added `Channel.hasMember()` and `Channel.getMember()` membership-oriented convenience methods.<br/>• Added `User.onUpdated()`, `User.onDeleted()`, `User.onMentioned()`, `User.onInvited()`, `User.onRestrictionChanged()`. Deprecates `streamUpdates()`.<br/>• Added `User.isMemberOf()` and `User.getMembership()` membership-oriented convenience methods.<br/>• Added `Membership.onUpdated()` and `Membership.onDeleted()`. Deprecates `streamUpdates()` in favor of separate callbacks.<br/>• `Membership.update()` now accepts optional `status` and `type` alongside `custom`. Previous `update(custom)` is deprecated.<br/>• Added `Membership.delete()` for deleting a membership relationship.<br/>• Added `Message.onUpdated()` for emitting updated message on edits, reaction changes, or metadata changes. Deprecates `streamUpdates()`.<br/>• Added `Message.createThread(text, SendTextParams)` returning `CreateThreadResult` with thread channel and updated parent message. Deprecates `createThreadWithResult()`.<br/>• `ThreadChannel` returns typed `ThreadChannel` and `ThreadMessage` from `update()`, `getMessage()`, `getPinnedMessage()`, `getHistory()`.<br/>• Added `ThreadChannel.onThreadMessageReceived()` and `ThreadChannel.onThreadChannelUpdated()` returning typed `ThreadMessage` and `ThreadChannel`.<br/>• `ThreadMessage` returns typed `ThreadMessage` from `editText()`, `toggleReaction()`, `restore()`.<br/>• Added `ThreadMessage.onThreadMessageUpdated()` for entity-first streaming of thread message updates.<br/>• Added `ChatConfiguration.emitReadReceiptEvents` for per-channel-type control over read receipt event emission. Defaults to `true` except for public channels.<br/>• Added `UserMention`, `Mention`, `Invite`, `CustomEvent`, `MessageReaction`, `ReadReceipt`, `ReadReceiptsResponse`, `Report`, `SendTextParams` types. |
| **Modified** | • BREAKING CHANGES: `Message.reactions` changed from `Map<String, List<Action>>` to `List<MessageReaction>` with `isMine`, `userIds`, `count` per reaction.<br/>• BREAKING CHANGES: `Message.removeThread()` returns `PNFuture<Unit>` instead of `PNFuture<Pair<PNRemoveMessageActionResult, Channel?>>`.<br/>• BREAKING CHANGES: `Channel.delete()` and `Chat.deleteChannel()` now permanently delete. The `soft` parameter is removed.<br/>• BREAKING CHANGES: `User.delete()` and `Chat.deleteUser()` now permanently delete. The `soft` parameter is removed.<br/>• `createMessageDraft()` is now V2 by default. `createMessageDraftV1()` provides backward compat. `createMessageDraftV2()` is deprecated.<br/>• `GetCurrentUserMentionsResult` adds `mentions` field using `UserMention` type. Old `enhancedMentionsData` field is deprecated.<br/>• `Chat.emitEvent()` and `Chat.listenForEvents()` deprecated. Replaced by entity-level methods like `Channel.emitCustomEvent()` and `User.onMentioned()`.<br/>• Updated Kotlin to 2.2.21. |
## 0.16.3
*February 11, 2026*
| Type | Changes |
|------|----------|
| **Fixed** | • Update dependencies. |
## 0.16.2
*January 23, 2026*
| Type | Changes |
|------|----------|
| **Fixed** | • Internal fixes. |
## 0.16.1
*January 20, 2026*
| Type | Changes |
|------|----------|
| **Fixed** | • Internal fixes. |
## 0.16.0
*January 19, 2026*
| Type | Changes |
|------|----------|
| **Added** | • Add the createThreadWithResult method that returns the ThreadChannel and an updated parent Message with hasThread property set to true.<br/>• Add limit and offset parameters to whoIsPresent method on Chat, Channel, and ChannelGroup. |
## 0.15.4
*November 20, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Update PubNub kotlin SDK version . |
## 0.15.3
*November 10, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Update dependencies. |
## 0.15.2
*August 7, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Internal fixes. |
## 0.15.1
*July 31, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Internal fixes. |
## 0.15.0
*July 31, 2025*
| Type | Changes |
|------|----------|
| **Added** | • AddConnectionStatusListener, reconnectSubscriptions, disconnectSubscriptions . |
## 0.14.1
*July 30, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Internal fixes. |
## 0.14.0
*July 21, 2025*
| Type | Changes |
|------|----------|
| **Added** | • Add support for channel groups. |
## 0.13.4
*June 10, 2025*
| Type | Changes |
|------|----------|
| **Modified** | • Internal fixes. |
## 0.13.3
*June 4, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Adds an internal function workaround to get messages from an auto moderation report, which doesn't contain a message timetoken. |
## 0.13.2
*May 16, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Internal fixes. |
## 0.13.1
*May 14, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Internal fixes. |
## 0.13.0
*May 9, 2025*
| Type | Changes |
|------|----------|
| **Added** | • Add new API method returning paginated unread message counts. |
## 0.12.1
*March 21, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Internal fixes. |
## 0.12.0
*March 14, 2025*
| Type | Changes |
|------|----------|
| **Added** | • Added possibility to invite users to public channels. |
## 0.11.2
*March 7, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Update PubNub Kotlin SDK dependency to include proper handling of the device token.<br/>• Add the missing keys when building the APNS payload. |
## 0.11.1
*February 20, 2025*
| Type | Changes |
|------|----------|
| **Fixed** | • Fixed bug related to setting user restriction. The issue occurred when `Enforce referential integrity for memberships` was enabled and a user did not exist in AppContext. |
## 0.11.0
*January 23, 2025*
| Type | Changes |
|------|----------|
| **Added** | • Added a new version of `User.update` that can be used to update data on the server without losing intermediate updates that might have happened in the time between when the object was last received and updated.<br/>• Added the ability to mute and unmute users through `Chat.mutedUsers.muteUser() / unmuteUser()`.<br/>• Added the option to automatically sync the mute list using App Context by enabling `ChatConfiguration.syncMutedUsers`.<br/>• Added missing function to parse quoted message text into parts. |
| **Fixed** | • Fixes the problem of overwriting custom data at regular intervals when `storeUserActivityInterval` is enabled. |
## 0.10.1
*January 13, 2025*
| Type | Changes |
|------|----------|
| **Modified** | • Internal fixes. |
## 0.10.0
*January 7, 2025*
| Type | Changes |
|------|----------|
| **Added** | • Added status and type to Membership. |
## 0.9.4
*December 20, 2024*
| Type | Changes |
|------|----------|
| **Fixed** | • Make setRestrictions work with `Enforce referential integrity for memberships` enabled on keyset. |
## 0.9.3
*December 16, 2024*
| Type | Changes |
|------|----------|
| **Modified** | • Internal fixes. |
## v0.9.2
*December 12, 2024*
| Type | Changes |
|------|----------|
| **Added** | • Lock moderated messages from editing . |
| **Fixed** | • Wrong user suggestion source for message draft created on ThreadChannel.<br/>• Wrong type of last user activity time stored on server (precision). |
| **Modified** | • Moderation events are now sent to a channel prefixed with `PUBNUB_INTERNAL_MODERATION.`. |
## v0.9.0
*November 6, 2024*
| Type | Changes |
|------|----------|
| **Added** | • Added MessageDraft.<br/>• Added timetoken utils methods. |
| **Fixed** | • Added typingTimeoutMargin to improve continuity of typing indicator.<br/>• Fix getTyping sending events after close.<br/>• Change User.active() to synchronous val User.active.<br/>• AccessManager is based on PAM V3 token instead of PAM V2 authKey.<br/>• Hard delete returns null.<br/>• Replace occurrences of Set with List where ordering matters. |
## v0.8.0
*September 24, 2024*
| Type | Changes |
|------|----------|
| **Added** | • Initial release of PubNub Kotlin Chat SDK. |
## v0.8.0-DEV
*June 26, 2024*
| Type | Changes |
|------|----------|
| **Added** | • Internal dev release. |
| Added | - BREAKING CHANGES:
Channel.join() now only creates membership without subscribing or setting lastReadMessageTimetoken. Previous join() signature removed along with JoinResult type. - Added
Channel.onMessageReceived() and Channel.onTypingChanged(). Deprecates connect() and getTyping(). - Added
Channel.sendText(text, SendTextParams) with new SendTextParams data class. Previous multi-param sendText() overload is deprecated. - Added
Channel.emitCustomEvent() and Channel.onCustomEvent() for publishing and listening to custom events with message type filtering. - Added
Channel.getInvitees() to return channel members with pending (invited) status. - Added
Channel.hasMember() and Channel.getMember() membership-oriented convenience methods. - Added
User.onUpdated(), User.onDeleted(), User.onMentioned(), User.onInvited(), User.onRestrictionChanged(). Deprecates streamUpdates(). - Added
User.isMemberOf() and User.getMembership() membership-oriented convenience methods. - Added
Membership.onUpdated() and Membership.onDeleted(). Deprecates streamUpdates() in favor of separate callbacks. Membership.update() now accepts optional status and type alongside custom. Previous update(custom) is deprecated.- Added
Membership.delete() for deleting a membership relationship. - Added
Message.onUpdated() for emitting updated message on edits, reaction changes, or metadata changes. Deprecates streamUpdates(). - Added
Message.createThread(text, SendTextParams) returning CreateThreadResult with thread channel and updated parent message. Deprecates createThreadWithResult(). ThreadChannel returns typed ThreadChannel and ThreadMessage from update(), getMessage(), getPinnedMessage(), getHistory().- Added
ThreadChannel.onThreadMessageReceived() and ThreadChannel.onThreadChannelUpdated() returning typed ThreadMessage and ThreadChannel. ThreadMessage returns typed ThreadMessage from editText(), toggleReaction(), restore().- Added
ThreadMessage.onThreadMessageUpdated() for entity-first streaming of thread message updates. - Added
ChatConfiguration.emitReadReceiptEvents for per-channel-type control over read receipt event emission. Defaults to true except for public channels. - Added
UserMention, Mention, Invite, CustomEvent, MessageReaction, ReadReceipt, ReadReceiptsResponse, Report, SendTextParams types.
|
| Modified | - BREAKING CHANGES:
Message.reactions changed from Map<String, List<Action>> to List<MessageReaction> with isMine, userIds, count per reaction. - BREAKING CHANGES:
Message.removeThread() returns PNFuture<Unit> instead of PNFuture<Pair<PNRemoveMessageActionResult, Channel?>>. - BREAKING CHANGES:
Channel.delete() and Chat.deleteChannel() now permanently delete. The soft parameter is removed. - BREAKING CHANGES:
User.delete() and Chat.deleteUser() now permanently delete. The soft parameter is removed. createMessageDraft() is now V2 by default. createMessageDraftV1() provides backward compat. createMessageDraftV2() is deprecated.GetCurrentUserMentionsResult adds mentions field using UserMention type. Old enhancedMentionsData field is deprecated.Chat.emitEvent() and Chat.listenForEvents() deprecated. Replaced by entity-level methods like Channel.emitCustomEvent() and User.onMentioned().- Updated Kotlin to 2.2.21.
|
| Added | - Add the createThreadWithResult method that returns the ThreadChannel and an updated parent Message with hasThread property set to true.
- Add limit and offset parameters to whoIsPresent method on Chat, Channel, and ChannelGroup.
|
| Fixed | - Update PubNub kotlin SDK version .
|
| Added | - AddConnectionStatusListener, reconnectSubscriptions, disconnectSubscriptions .
|
| Added | - Add support for channel groups.
|
| Fixed | - Adds an internal function workaround to get messages from an auto moderation report, which doesn't contain a message timetoken.
|
| Added | - Add new API method returning paginated unread message counts.
|
| Added | - Added possibility to invite users to public channels.
|
| Fixed | - Update PubNub Kotlin SDK dependency to include proper handling of the device token.
- Add the missing keys when building the APNS payload.
|
| Fixed | - Fixed bug related to setting user restriction. The issue occurred when
Enforce referential integrity for memberships was enabled and a user did not exist in AppContext.
|
| Added | - Added a new version of
User.update that can be used to update data on the server without losing intermediate updates that might have happened in the time between when the object was last received and updated. - Added the ability to mute and unmute users through
Chat.mutedUsers.muteUser() / unmuteUser(). - Added the option to automatically sync the mute list using App Context by enabling
ChatConfiguration.syncMutedUsers. - Added missing function to parse quoted message text into parts.
|
| Fixed | - Fixes the problem of overwriting custom data at regular intervals when
storeUserActivityInterval is enabled.
|
| Added | - Added status and type to Membership.
|
| Fixed | - Make setRestrictions work with
Enforce referential integrity for memberships enabled on keyset.
|
| Added | - Lock moderated messages from editing .
|
| Fixed | - Wrong user suggestion source for message draft created on ThreadChannel.
- Wrong type of last user activity time stored on server (precision).
|
| Modified | - Moderation events are now sent to a channel prefixed with
PUBNUB_INTERNAL_MODERATION..
|
| Added | - Added MessageDraft.
- Added timetoken utils methods.
|
| Fixed | - Added typingTimeoutMargin to improve continuity of typing indicator.
- Fix getTyping sending events after close.
- Change User.active() to synchronous val User.active.
- AccessManager is based on PAM V3 token instead of PAM V2 authKey.
- Hard delete returns null.
- Replace occurrences of Set with List where ordering matters.
|
| Added | - Initial release of PubNub Kotlin Chat SDK.
|