8000 Releases · xmtp/xmtp-android · GitHub
[go: up one dir, main page]

Skip to content

Releases: xmtp/xmtp-android

4.0.0-rc1

11 Mar 05:19
1551162
Compare
Choose a tag to compare
4.0.0-rc1 Pre-release
Pre-release

xmtp-android v4.0.0

This release focused on delivering an SDK for a stable, performant, and hardened XMTP V3.

Important

Please upgrade your app to use xmtp-android ≥v4.0.0 by May 1, 8000 2025 to enable your app to connect to the XMTP V3 network. If you do not upgrade your app, it will continue to connect to the XMTP V2 network, which will be deprecated and put in read-only mode on May 1. To learn more about XMTP V2 deprecation, see XIP-53: XMTP V2 deprecation plan.

Upgrade from ≥v3.0.0 to v4.0.0

Use the information in these release notes to upgrade from xmtp-android ≥v3.0.0 to v4.0.0.

Breaking changes

TL;DR: Use inboxIds

The primary XMTP identifier is now an inbox ID, not an Ethereum address.

We recommend moving away from using address in code completely.

However, if you MUST use addresses, they must now be wrapped in a PublicIdentity object.

For example, 0x1234567890abcdef1234567890abcdef12345678 must now be wrapped in PublicIdentity(ETHEREUM, “0x1234567890abcdef1234567890abcdef12345678”).

Primary XMTP identifier is now an inbox ID, not an Ethereum address

In preparation for upcoming support for Passkeys, XMTP must evolve from using Ethereum account addresses (0x...) as the primary identifier to an inbox-based identity model.

This change allows for broader support of different authentication mechanisms, including the currently supported Externally Owned Accounts (EOAs) and Smart Contract Wallets (SCWs), as well as future support for Passkeys, Bitcoin, and Solana, for example.

The move to an inbox-based identity model means the following shift in approach when developing with XMTP:

  • Instead of assuming an Ethereum address as the unique identifier, developers should default to using the inboxId where possible.

  • Inbox IDs now have a list of identity objects that explicitly include the identity type (kind) and the identifier. For example:

    [
      PublicIdentity(kind: ETHEREUM, identifier: "0x1234567890abcdef1234567890abcdef12345678"),
      PublicIdentity(kind: PASSKEY, identifier: "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMk"),
    ]

Warning

The following function changes (addressesinboxIds) won't trigger errors since both parameters are strings. Your code will compile but may fail at runtime. Pay special attention to these changes when upgrading.

  • Where you previously passed Ethereum addresses, you must now pass inboxIds
    • addMembers(addresses)addMembers(inboxIds)
    • removeMember(addresses)removeMembers(inboxIds)
    • newGroup(addresses)newGroup(inboxIds)
    • newConversation(address)newConversation(inboxId)

Warning

The following function changes (inboxIdsPublicIdentity objects) won't trigger errors since both parameters are strings. Your code will compile but may fail at runtime. Pay special attention to these changes when upgrading.

  • Where you previously passed inboxIds, you must now pass PublicIdentity objects

    • addMembersByInboxIds(inboxIds)addMembersByIdentities(PublicIdentitys)
    • removeMemberByInboxIds(inboxIds)removeMemberByIdentities(PublicIdentitys)
    • newGroupWithInboxIds(inboxIds)newGroupWithIdentities(PublicIdentitys)
    • newConversationWithInboxId(inboxId)newConversationWithIdentity(PublicIdentity)
  • We recommend moving away from using address in code completely. If you MUST use address, an address must now be wrapped in a PublicIdentity object.

    So, 0x1234567890abcdef1234567890abcdef12345678 must now be wrapped in PublicIdentity(ETHEREUM, “0x1234567890abcdef1234567890abcdef12345678”).

    For example, newConversation("0x1234567890abcdef1234567890abcdef12345678") must now be:

    newConversationWithIdentity(PublicIdentity(kind: ETHEREUM, identifier: "0x1234567890abcdef1234567890abcdef12345678")) 
  • We recommend that you store inboxId values alongside address values in your User table for quick and easy lookup.

  • Because XMTP is interoperable, you may interact with inboxes that are not on your app. In these scenarios, you will need to find the appropriate inboxId or address.

    findInboxIdFromIdentity(  PublicIdentity(kind: ETHEREUM, identifier: "0x1234567890abcdef1234567890abcdef12345678"),
    )
    findInboxStateFromInboxIds(”asdfjhaslkdfjhasldf”, “asdfjhasldff”)
    inboxState: {
       identifiers: listOf(PublicIdentities)
       inboxId
       installations: listOf(Installation)
    }
    val ethAddresses = identifiers.filter {it.kind == ETHEREUM }.map { it.identifier }
    EnsLookUp(ethAddress)

To learn more about how to work with the new inbox-based identity model, see Upgrade to XMTP V3.

Wallet and signer updates

The term “wallet” has been removed from the codebase. This is to align with future support for Passkeys and other non-wallet-based authentication methods.

This release also includes a breaking change to SigningKey, where it had a field called WalletType, which is now SignerType. SignerType provides the actual thing that signs, such as an EOA or SCW.

SigningKey now supports only one sign method: sign(signatureText: String): SignedData. It no longer supports the following sign methods:

  • signSCW(signatureText: String): ByteArray
  • sign(message: String): Proto.Signature
  • sign(digest: ByteArray): Proto.Signature

Naming and function housekeeping

  • Removed appVersion client option
  • Message renamed to DecodedMessage
  • fallbackContent renamed to fallback
  • ConversationType renamed to ConversationFilterType
  • group removed from names inside group class.
    • updateGroupName renamed to updateName
    • updateGroupNamePermission renamed to updateNamePermission
    • updateGroupDescription renamed to updateDescription
    • updateGroupDescriptionPermission renamed to updateDescriptionPermission
    • updateGroupImageUrlSquare renamed to updateImageUrl
  • imageUrlSquare renamed to imageUrl
  • convoId renamed to conversationId
  • addMembers now returns GroupMembershipResult which includes inboxIds that were added or removed, as well as installations that failed during the membership sync.

Recently added features

Disappearing messages

This release provides support for disappearing (ephemeral) messages. These are messages that are intended to be visible to users for only a short period of time. After the message expiration time passes, the messages are removed from the UI and deleted from local storage so the messages are no longer accessible to conversation participants.

To learn more, see Support disappearing messages with XMTP.

Multiple remote attachments

This release provides support for sending multiple remote attachments in a single message.

To learn more, see Support multiple remote attachments of any size.

Future-proofing app interoperability

This release introduces error handling that will help support app interoperability across SDK versions, even when breaking changes are required in the future.

In the future, an SDK version may introduce a breaking change, such as a feature that works only for apps on the latest versions of the SDK. Instead of forcing immediate upgrades or causing apps on older versions to break, this update adds a safety net that gracefully handles breaking changes.

At this time, no features rely on this mechanism, and no action is needed. However, this ensures your app remains resilient to future SDK updates that introduce breaking changes.

What's Changed

Full Changelog: 3.0.29...4.0.0-rc1

Release v3.0.29

06 Mar 21:23
606f820
Compare
Choose a tag to compare

3.0.29 (2025-03-06)

What's Changed

Full Changelog: 3.0.28...3.0.29

Release v3.0.28

25 Feb 02:25
f6a9c30
Compare
Choose a tag to compare

3.0.28 (2025-02-25)

Release v3.0.27

21 Feb 19:56
995f6e5
Compare
Choose a tag to compare

3.0.27 (2025-02-21)

Release v3.0.26

15 Feb 00:41
56672de
Compare
Choose a tag to compare

3.0.26 (2025-02-15)

Release v3.0.25

08 Feb 05:05
7f5e17c
Compare
Choose a tag to compare

3.0.25 (2025-02-08)

Release v3.0.24

07 Feb 00:26
28aebb5
Compare
Choose a tag to compare

3.0.24 (2025-02-07)

Reverts

  • Revert "remove client from serializable objects" (#372) (7627c87), closes #372

Release v3.0.23

31 Jan 23:32
65be7d1
Compare
Choose a tag to compare

3.0.23 (2025-01-31)

Release v3.0.22

17 Jan 05:58
51c7b17
Compare
Choose a tag to compare

3.0.22 (2025-01-17)

Release v3.0.21

14 Jan 01:16
4b9d152
Compare
Choose a tag to compare

3.0.21 (2025-01-14)

0