Unofficial Python SDK for the XMTP network.
Project description
xmtp
Unofficial Python client SDKs for the XMTP network.
Primary goal: feature parity with xmtp-js.
This is a community project that mirrors the structure and interfaces of the official xmtp-js SDK, adapted for Python.
What's inside?
SDKs
python-sdk: XMTP client SDK for Pythonagent-sdk: XMTP agent SDK for Python (event-driven, middleware-powered)
Content types
content-type-primitives: Primitives for building custom XMTP content typescontent-type-group-updated: Content type for group update messagescontent-type-reaction: Content type for reactions to messagescontent-type-read-receipt: Content type for read receiptscontent-type-remote-attachment: Content type for file attachments stored off-networkcontent-type-reply: Content type for direct replies to messagescontent-type-text: Content type for plain text messagescontent-type-transaction-reference: Content type for on-chain transaction referencescontent-type-markdown: Content type for markdown-formatted messagescontent-type-wallet-send-calls: Content type for wallet transaction requests
Requirements
- Python 3.10+
- libxmtp bindings >= 1.7.0-r3
Installation
pip install xmtp
This installs the client SDK, agent SDK, and built-in content types in one package.
Install from GitHub main
pip install "xmtp @ git+https://github.com/pierce403/xmtp-py.git@main"
From source (dev)
Clone the repo and install into a virtualenv. Install the bindings first so the local editable package can resolve them:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
pip install -e bindings/python
pip install -e ".[dev]"
Quick start
Python SDK
from xmtp import Client
from xmtp.signers import create_signer
from xmtp.types import ClientOptions
# Create a signer from a private key
signer = create_signer(private_key)
# Create the client
client = await Client.create(signer, ClientOptions(env='dev'))
# Create a conversation
dm = await client.conversations.new_dm("0x...")
await dm.send("Hello from Python!")
# Stream messages
async for message in client.conversations.stream_all_messages():
print(f"Received: {message.content}")
Agent SDK
from xmtp_agent import Agent
from xmtp_agent.user import create_user, create_signer
from xmtp.types import ClientOptions
# Create a user and signer
user = create_user()
signer = create_signer(user)
# Create the agent
agent = await Agent.create(signer, ClientOptions(env='dev', db_path=None))
# Handle text messages
@agent.on("text")
async def handle_text(ctx):
await ctx.send_text("Hello from my XMTP Agent! 👋")
# Start the agent
await agent.start()
Key management tips
create_user()generates an in-memory key; persist the private key yourself if you want a stable inbox across restarts.- Prefer
XMTP_WALLET_KEYandXMTP_DB_ENCRYPTION_KEYin environment variables or a secrets manager; never commit them to git. - Use a stable
db_pathand keep the database directory between runs. Losing it creates a new installation and can hit installation limits. - For production, wrap a hardware wallet or KMS signer by implementing the
Signerprotocol instead of storing raw keys.
Configuration & troubleshooting
Endpoint overrides via env:
XMTP_ENV,XMTP_API_URL,XMTP_HISTORY_SYNC_URL,XMTP_GATEWAY_HOSTXMTP_DISABLE_HISTORY_SYNC=1to force identity calls through the primary API
Common issues:
- Missing
libxmtpv3.so: install will build it automatically, but you need Rust (cargo) andgit. Seebindings/python/README.mdfor overrides. If no prebuilt wheels are available,pip install xmtpwill fall back to a source build. - History sync gRPC errors: set
XMTP_DISABLE_HISTORY_SYNC=1, or setXMTP_HISTORY_SYNC_URLto a working gRPC endpoint. You can also passhistory_sync_url=''inClientOptions. - Gateway host errors:
gateway_hostis an advanced setting; only set it when you have a gateway that supports XMTP gRPC.
LibXMTP bindings
This SDK uses libxmtp Python bindings for core XMTP functionality including cryptography, networking, and protocol implementation.
Minimum version: 1.7.0-r3
Documentation
Contributing
See CONTRIBUTING.md for guidelines.
License
Apache 2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xmtp-0.1.3.tar.gz.
File metadata
- Download URL: xmtp-0.1.3.tar.gz
- Upload date:
- Size: 41.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a8f0be56bf6f05620884e53fcfce9cab6c4907225b238a5e5ea33b49a953505
|
|
| MD5 |
bb6bc424bf117c4491192ac489b753a2
|
|
| BLAKE2b-256 |
508aea313133e88a07c51ce4af55a45d9189bad7983d312cfd1eaceea11c5d9a
|
Provenance
The following attestation bundles were made for xmtp-0.1.3.tar.gz:
Publisher:
publish.yml on pierce403/xmtp-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
xmtp-0.1.3.tar.gz -
Subject digest:
2a8f0be56bf6f05620884e53fcfce9cab6c4907225b238a5e5ea33b49a953505 - Sigstore transparency entry: 844223867
- Sigstore integration time:
-
Permalink:
pierce403/xmtp-py@37c10e11c7902a3d3aa7b859de9a0f019a67d2a6 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/pierce403
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@37c10e11c7902a3d3aa7b859de9a0f019a67d2a6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file xmtp-0.1.3-py3-none-any.whl.
File metadata
- Download URL: xmtp-0.1.3-py3-none-any.whl
- Upload date:
- Size: 55.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60f4349df0174ac5c18c0f1e8f2d892b35dbbe47b26a1344725eb6dca9e43f16
|
|
| MD5 |
3697c693c22a5ef8dba52206a592a70f
|
|
| BLAKE2b-256 |
be67abfa8560829b426398439c4fe6d90241168b3b7ce8dafdb6553e4767b663
|
Provenance
The following attestation bundles were made for xmtp-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on pierce403/xmtp-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
xmtp-0.1.3-py3-none-any.whl -
Subject digest:
60f4349df0174ac5c18c0f1e8f2d892b35dbbe47b26a1344725eb6dca9e43f16 - Sigstore transparency entry: 844223904
- Sigstore integration time:
-
Permalink:
pierce403/xmtp-py@37c10e11c7902a3d3aa7b859de9a0f019a67d2a6 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/pierce403
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@37c10e11c7902a3d3aa7b859de9a0f019a67d2a6 -
Trigger Event:
push
-
Statement type: