scout — the light client
scout is the foundation: a light client for Swarm as both a CLI and a
library (swarm-scout). It does the four things the other tools build
on — read, write, feeds, and encrypted sharing.
CLI
# read (no node)
scout cat <ref> [path] # print content (manifest-aware, /bzz)
scout get <ref> <out> [path] # download to a file
scout bytes <ref> # raw bytes (/bytes)
# write (node + stamp)
scout up <file> [--name n] --stamp <batch>
scout up-bytes <file> --stamp <batch>
scout up-dir <folder> [--index index.html] --stamp <batch> # browsable collection
# feeds (a stable handle that serves the latest content)
scout keygen
scout publish <ref> --key <hex> -t <topic> --stamp <batch> # -> feed handle
scout cat <feed-handle> # read latest
# sharing (encrypted + revocable, via ACT)
scout share <file> --to <pubkey> --stamp <batch> # -> a share id + refs
scout shares
scout grantees <id>
scout revoke <id> --grantee <pubkey> --stamp <batch>
scout fetch <file_ref> --publisher <pk> --history <h> # recipient decrypts
Library
use scout::LiteClient; #[tokio::main] async fn main() -> anyhow::Result<()> { // read-only, via a gateway let c = LiteClient::read("https://download.gateway.ethswarm.org")?; let bytes = c.cat("<reference>").await?; // add a write endpoint for uploads / feeds / sharing let c = LiteClient::read("http://localhost:1633")? .with_write("http://localhost:1633", "<postage-batch>")?; let r = c.up_bytes(b"hello".to_vec()).await?; let handle = c.publish("<feed-key-hex>", "my-topic", &r).await?; Ok(()) }
See examples/
and the API docs on docs.rs.
Where it fits
Reach for swarm-scout when a Rust project needs light Swarm I/O without
operating a node — backends, CLIs, bots, serverless, CI, data tooling.
stash, perch, and keep are all thin layers over it.