Python client for the Swarm Bee API. Functional parity with bee-js / bee-go / bee-rs.
Project description
bee-py
Python client for the Swarm Bee API.
Async-first (httpx), Python 3.10+, fully type-checked (mypy --strict).
The functional target is parity with bee-js (canonical TypeScript client), bee-go (typed Go port), and bee-rs (Rust port). bee-go is the primary reference for shape and behavior; bee-js is the source of truth for wire-format edge cases.
Status: stable (
1.0). Functional parity with bee-js, bee-go, and bee-rs at Bee API8.0.0. 407 tests, mypy --strict clean, 42 example apps inexamples/.
Install
pip install swarm-bee
# or
uv add swarm-bee
The PyPI distribution name is swarm-bee (the natural bee-py was
blocked by PyPI's typosquat protection — too close to the unrelated
beepy project). The GitHub repo is still ethswarm-tools/bee-py to
match the bee-go / bee-rs sibling naming, and the import name is
bee:
from bee import Bee, AsyncBee
Quick start (async)
import asyncio
from bee import AsyncBee
async def main() -> None:
async with AsyncBee("http://localhost:1633") as client:
health = await client.debug.health()
print(f"bee {health.version} api {health.api_version}")
asyncio.run(main())
Quick start (sync)
from bee import Bee
with Bee("http://localhost:1633") as client:
health = client.debug.health()
print(f"bee {health.version} api {health.api_version}")
Both clients share the same surface — Bee wraps AsyncBee with
httpx.Client instead of httpx.AsyncClient. Choose whichever fits
your codebase.
Layout
| Module | bee-go counterpart | Scope |
|---|---|---|
bee.swarm |
pkg/swarm |
Typed bytes, BMT, SOC, BZZ/DAI, Duration, Size, errs |
bee.api |
pkg/api |
Upload/download options, pin, tag, grantee, envelope |
bee.file |
pkg/file |
Data/file/chunk/SOC/feed/collection uploads |
bee.postage |
pkg/postage |
Batch CRUD, pure stamp math |
bee.debug |
pkg/debug |
Health, versions, accounting, chequebook, stake |
bee.pss |
pkg/pss |
PSS send/subscribe/receive (websocket) |
bee.gsoc |
pkg/gsoc |
GSOC send/subscribe + offline SOC address |
bee.manifest |
pkg/manifest |
Mantaray trie, v0.2 wire format, ResourceLocator |
bee.storage |
bee-js only | High-level buy_storage / extend_storage_* |
bee.dev |
bee-js only | BeeDev newtype around Bee |
Bearer auth
async with AsyncBee.with_token("http://localhost:1633", "abc123") as client:
await client.debug.health()
Returns a client whose underlying httpx instance has
Authorization: Bearer abc123 baked in. Sync mirror: Bee.with_token.
Latency probe
elapsed = await client.ping() # round-trip /health, returns seconds
Useful for connection-status indicators in dashboards / TUIs. Mirrors
bee-rs Client::ping / bee-go Client.Ping.
Logging
Subscribe to the bee.http logger to see structured request/response
events (one per HTTP call):
import logging
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("bee.http").setLevel(logging.DEBUG)
Each record carries method, url, status, and elapsed_ms
extras. Mirrors the bee-rs tracing target bee::http.
Examples
The examples/ directory contains 42 ready-to-run scripts mirroring
bee-rs / bee-go (basic_usage, quickstart, status, key_gen,
upload_picture, download_picture, encrypted_upload, redundant_upload,
feed_update, feed_history, feed_manifest, soc_write_read, pss_send_receive,
gsoc_mined_pubsub, manifest_add_file, manifest_move_file, ens_locator,
stamp_cost{,_live}, stamp_utilization, list_batches, buy_batch,
pinning_workflow, tag_upload_progress, stamper_client_side, act_share,
swarm_paste, swarm_chat, swarm_blog, swarm_share, swarm_vault,
swarm_pinner, swarm_relay, swarm_deploy, swarm_fs, swarm_keyring,
swarm_feed_rss, swarm_cost_monitor, encrypted_folder_walk,
upload_directory, …) plus an end-to-end integration_check.py.
AI / ML starter examples
Six additional examples target the AI workflow surface — content addressing fits ML datasets, feed manifests fit prompt versioning, and SOCs fit deterministic embedding caches:
swarm_dataset— pin a dataset file or HF-style folder; the reference IS the integrity check.swarm_prompt_registry— feed-versioned prompt store; a stable manifest URL lets production hot-swap prompts without redeploy. Includes a LangChainPromptTemplateintegration sketch.swarm_mcp_bridge— MCP server (Anthropic Model Context Protocol) exposing Bee primitives as tools, so an MCP client can use Swarm as a content-addressed store. Optional dep:uv add 'mcp[cli]>=1.0'.swarm_embedding_cache—keccak256(text)→ embedding bytes via SOC. The cache address is deterministic from(text, owner)— no index lookup needed. Includes a numpy round-trip example.swarm_agent_memory— append-only chat history per agent ID via feeds. JSON{role, text, ts}payloads, OpenAI-style roles.swarm_rag_corpus— pin a docs folder; walk the manifest to enumerate paths; fetch one doc by path. Includes a LangChainDocumentLoaderintegration sketch.
Running examples
Run any example with uv run python examples/<name>.py. Most need
BEE_BATCH_ID (a usable postage batch); some also need
BEE_SIGNER_HEX (a 32-byte hex private key).
Stack
httpx(async + sync HTTP),websocketsfor live subscriptions (TBD)coincurve(libsecp256k1 C bindings) for ECDSA — same C-bindings perf story as bee-rs v1.2.0eth-hash[pycryptodome]for keccak256- Standard-library
dataclasses,enum,tarfilefor structured payloads — nopydanticdependency
Bee version compatibility
This client targets Bee 2.7.2-rc1 / API 8.0.0 (the values pinned
in bee.debug.SUPPORTED_BEE_VERSION_EXACT and
bee.debug.SUPPORTED_API_VERSION). At startup, prefer
client.debug.is_supported_api_version() for a major-compatible check
or client.debug.is_supported_exact_version() for a strict pin.
Older or newer Bee instances usually work — unknown response fields
are ignored — but new endpoints will return 404 and breaking
wire-format changes will surface as BeeJsonError.
Roadmap
| Milestone | Scope |
|---|---|
0.1.x |
Primitives (typed bytes, BMT, SOC), client plumbing, debug.health/versions ✅ |
0.2.x |
Bytes / file upload + download (CAC, SOC, plain reference) ✅ |
0.3.x |
Postage batches, stamp math, Stamper ✅ |
0.4.x |
Mantaray manifest, collection upload/download, ResourceLocator |
0.5.x |
Feeds, GSOC, PSS |
0.6.x |
Full bee.api (pin, tag, grantee, envelope, stewardship) |
0.7.x |
bee.debug (accounting, chequebook, stake, transactions, topology) ✅ |
0.8.x |
Value primitives (Bzz/Dai/Duration/Size/FileChunker/Cid) ✅ |
0.9.x |
High-level glue (storage helpers, AsyncChunkStream, stream_directory) ✅ |
1.0.0 |
Functional parity with bee-js / bee-go / bee-rs at API 8.0.0; with_token, ping, bee.http logging, bee.dev ✅ |
Development
bee-py is uv-managed. Install uv once:
curl -LsSf https://astral.sh/uv/install.sh | sh
Then in this repo:
uv sync # create venv + install deps
uv run pytest # run tests
uv run ruff check # lint
uv run ruff format --check # format check
uv run mypy # type check
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
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 swarm_bee-1.0.2.tar.gz.
File metadata
- Download URL: swarm_bee-1.0.2.tar.gz
- Upload date:
- Size: 123.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a894aa83888b1073a2e21b1ba7873a7ddee627e4039bfa8c429107c4f66cc701
|
|
| MD5 |
6424bcfc18835897dec549bfbd9e38bc
|
|
| BLAKE2b-256 |
8a3ff9589707b44bd0dc03d6addb56f4b883b3d0a64177c7b9448518b583e011
|
Provenance
The following attestation bundles were made for swarm_bee-1.0.2.tar.gz:
Publisher:
release.yml on ethswarm-tools/bee-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
swarm_bee-1.0.2.tar.gz -
Subject digest:
a894aa83888b1073a2e21b1ba7873a7ddee627e4039bfa8c429107c4f66cc701 - Sigstore transparency entry: 1461582163
- Sigstore integration time:
-
Permalink:
ethswarm-tools/bee-py@382ef2f0f186c992a052dda08e4a23d29f2ff13c -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/ethswarm-tools
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@382ef2f0f186c992a052dda08e4a23d29f2ff13c -
Trigger Event:
push
-
Statement type:
File details
Details for the file swarm_bee-1.0.2-py3-none-any.whl.
File metadata
- Download URL: swarm_bee-1.0.2-py3-none-any.whl
- Upload date:
- Size: 97.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45b84805e9ed6f4f0396300196a2f00776c830ce9eeddf6c51cb8bdd5f247476
|
|
| MD5 |
dcfeb73c217ce4d3768026b7271c49f4
|
|
| BLAKE2b-256 |
f87665a51451901edb5df1ad0c3af1a5a43538c583fee274456e6160c4e866fe
|
Provenance
The following attestation bundles were made for swarm_bee-1.0.2-py3-none-any.whl:
Publisher:
release.yml on ethswarm-tools/bee-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
swarm_bee-1.0.2-py3-none-any.whl -
Subject digest:
45b84805e9ed6f4f0396300196a2f00776c830ce9eeddf6c51cb8bdd5f247476 - Sigstore transparency entry: 1461582262
- Sigstore integration time:
-
Permalink:
ethswarm-tools/bee-py@382ef2f0f186c992a052dda08e4a23d29f2ff13c -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/ethswarm-tools
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@382ef2f0f186c992a052dda08e4a23d29f2ff13c -
Trigger Event:
push
-
Statement type: