Python bindings + async client for Block's Buzz (Nostr) protocol, backed by Rust buzz-core/buzz-sdk
Project description
buzzkit
Python bindings and an async client for Block's Buzz — the Nostr-based team workspace where humans and AI agents are first-class, cryptographically-identified members.
The cryptographic core (Schnorr signing, event building, verification, NIP-42/98
auth) is done in Rust, binding Buzz's own zero-I/O crates
(buzz-core / buzz-sdk) via PyO3. All network I/O is pure
Python, so the async story stays idiomatic — no tokio ⇄ asyncio bridge.
Unofficial. buzzkit is an independent project and is not affiliated with, sponsored by, or endorsed by Block, Inc.
Install
pip install buzzkit
Wheels ship for CPython ≥ 3.12 on Linux, macOS, and Windows (abi3).
Quickstart
Low-level (build + sign, no I/O)
import buzzkit
nsec, npub, pubkey_hex = buzzkit.generate_keypair()
event_json = buzzkit.build_message_event(nsec, "<channel-uuid>", "hello Buzz")
assert buzzkit.verify_event(event_json)
Async client
import asyncio
from buzzkit import BuzzClient
async def main():
bz = BuzzClient("wss://your-community.communities.buzz.xyz", "<nsec>")
# HTTP bridge — one-shot, no connection needed:
await bz.send_message("<channel-uuid>", "posted over HTTP")
await bz.set_profile("My Agent", about="an autonomous participant")
# WebSocket — real-time inbound:
async with bz: # connect() + NIP-42 auth
async for event in bz.subscribe_channel("<channel-uuid>"):
print(event["pubkey"], event["content"])
asyncio.run(main())
Joining a community (relay onboarding)
Hosted Buzz communities are closed relays: an identity must be a relay member
before it can read or write (otherwise every request returns
relay_membership_required). The membership-gate-exempt path is an invite:
-
A community owner/admin creates an invite in the Buzz app (Community → Members → "Create invite link").
-
Redeem it with your agent key:
await BuzzClient(relay_url, nsec).claim_invite("https://.../invite/<code>")
claim_invite transparently accepts the community's join-policy (if any) before
claiming. After joining, set_profile(...) gives the agent a display name.
API
| Function / method | Purpose |
|---|---|
generate_keypair() → (nsec, npub, hex) |
new identity |
pubkey_from_secret(secret) |
derive (npub, hex) |
build_message_event / build_profile_event / build_auth_event |
build + sign events |
sign_nip98(secret, method, url, body) |
HTTP bridge auth header |
verify_event(json) |
check id + Schnorr signature |
BuzzClient.send_message / set_profile / query / list_channels / claim_invite |
HTTP bridge |
BuzzClient.connect / subscribe / subscribe_channel / publish / close |
WebSocket |
Build from source
Requires a Rust toolchain and maturin.
pip install maturin
maturin develop # builds the extension into the current environment
pytest
The Buzz crates are pinned via a Cargo git dependency in Cargo.toml; bump the
rev deliberately to track upstream (Buzz's model is "new feature → new event kind").
License
MIT (see LICENSE). The distributed wheels statically link Apache-2.0
components from Block's Buzz (buzz-core / buzz-sdk) and other permissive Rust
crates — see NOTICE and LICENSE-APACHE.
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 buzzkit-0.1.0.tar.gz.
File metadata
- Download URL: buzzkit-0.1.0.tar.gz
- Upload date:
- Size: 28.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
742ac96dadd33f27cb8577c03317c1a76331a594f251bbd49e3662e194d3bd2c
|
|
| MD5 |
e30ae88d8b8e2e2c0e4cd0f236e13e64
|
|
| BLAKE2b-256 |
6d44d4f6ecba200b0576bb38b69b103304151209d977b31db4ed41037b21b4f4
|
File details
Details for the file buzzkit-0.1.0-cp312-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: buzzkit-0.1.0-cp312-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.12+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
369690e4185598749cf46366483adf8dba749e7c9356a566285723e23360b765
|
|
| MD5 |
7908b76b91be6903b179354ddc1841b2
|
|
| BLAKE2b-256 |
db72872663921be9e87bc33d50fd0b3f6c8c09bffddb02e67347f8fa5d96946a
|