Skip to main content

Introduction

XMTP (Extensible Message Transport Protocol) is a messaging protocol and decentralized communication network that enables blockchain wallet addresses (also known as crypto accounts) to send messages to other wallet addresses.

XMTP's extensible design enables a diverse set of use cases for sending message data between web3 identities, such as wallet-to-wallet messaging, app-to-wallet notifications, and creator-to-community announcements. XMTP works with Ethereum accounts and other web3 identities that clients built with XMTP can derive from Ethereum accounts, such as ENS names and Lens profiles.

Because the XMTP network persists messages, and those messages are tied to web3 identities as opposed to a specific client, each web3 identity has a portable inbox that it can access using any client built with XMTP.

note

In web3, "wallet" is commonly used shorthand that refers to a blockchain "wallet address" or "crypto account." When this documentation needs to refer to a tool for managing blockchain accounts, we use "wallet application."

Protocol overview

A user can send and receive encrypted messages through a client, authenticating using a wallet signature. XMTP network nodes persist the user's messages

Clients and nodes are implemented as Waku2 peers but with XMTP-specific functions and capabilities.

Clients

XMTP clients have the following responsibilities:

  • Encode and decode message formats using a standard interface
  • Encrypt and decrypt encoded message content
  • Submit and retrieve encrypted messages to and from the XMTP Network
  • Generate secure wallet-based identities capable of encrypting and decrypting messages
  • Persist wallet-based identities locally or on the XMTP Network

Nodes

XMTP nodes have the following responsibilities:

  • Relay encrypted messages into replicated storage
  • Retrieve encrypted messages from storage and deliver them to clients
  • Persist and advertise wallet-based identities

XMTP client SDK

Explore the xmtp-js client SDK for JavaScript applications on GitHub.

xmtp-js provides a TypeScript implementation of the XMTP client protocol for use with JavaScript and React applications.

Have questions? Get help from the XMTP community on Discord. Request access

To learn more about how you can contribute to XMTP, see Contribute.

Roadmap

Here are just a few details about what's in store for XMTP.

Future support for progressive decentralization

In v1, the XMTP Network will be comprised of nodes operated by XMTP Labs.

This version of the XMTP Network will include a temporary security layer that XMTP Labs will use to control which wallets can:

  • Register identities with the network layer
  • Submit messages to the network layer

Future versions of the protocol will replace these temporary security controls with a series of controls intended to:

  • Manage spam
  • Reduce the surface area for malicious behavior
  • Ensure network reliability

One such control is an economic model aimed at providing network resistance against Sybil attacks. Proposed as "Postage" in the forthcoming XMTP whitepaper, this model specifies:

  • Free message delivery between a sender and recipient who offer proof of a relationship
  • Paid message delivery for a sender to reach a recipient who the sender cannot prove a relationship with

Postage will fund incentives for community-operated nodes, enabling decentralized operation of the XMTP Network.

We also envision a configurable long-term storage layer, aimed at improving network scalability, message security, and user data portability.

Future support for additional platforms

  • xmtp-js support for React Native
  • Swift and Kotlin client implementations
  • Server-side client implementations