Skip to main content

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 API 8.0.0. 407 tests, mypy --strict clean, 42 example apps in examples/.

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 LangChain PromptTemplate integration 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_cachekeccak256(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 LangChain DocumentLoader integration 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), websockets for live subscriptions (TBD)
  • coincurve (libsecp256k1 C bindings) for ECDSA — same C-bindings perf story as bee-rs v1.2.0
  • eth-hash[pycryptodome] for keccak256
  • Standard-library dataclasses, enum, tarfile for structured payloads — no pydantic dependency

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swarm_bee-1.1.0.tar.gz (127.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

swarm_bee-1.1.0-py3-none-any.whl (99.8 kB view details)

Uploaded Python 3

File details

Details for the file swarm_bee-1.1.0.tar.gz.

File metadata

  • Download URL: swarm_bee-1.1.0.tar.gz
  • Upload date:
  • Size: 127.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for swarm_bee-1.1.0.tar.gz
Algorithm Hash digest
SHA256 266c0b1fe62b1de0cd11fce7078664a3ec5c4396a2270f6410b036cd2dee2e41
MD5 bf01d7d67a8103e4df322079d85a40c7
BLAKE2b-256 534432d300a2d6ad1bcf0089c9ba9af68c559b4e2530a7b3c59986ca2c01dfec

See more details on using hashes here.

File details

Details for the file swarm_bee-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: swarm_bee-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 99.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for swarm_bee-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 11fb7283bc123953146b04685e2d6036f58daf124d37811c1f11e3d50b22a67b
MD5 6832db2446a2bf33655228faf8380dd2
BLAKE2b-256 135678e65cd7c1cbf558ad2f28f72228faedf76ad43e10cc433332f4bcea1b19

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page