Weave Dht
Discovery
Peer discovery in the Weave DHT — topic-based discovery, bootstrap peers, and adapter-mediated transports.
Purpose
Peer discovery, mutable records, DID envelopes, local relay sessions, adapter registry, record stores, and handles.
This page follows the real source shape for Weave Dht and explains the workflow a developer is likely to use first.
Network contract
Document peer identity, topic selection, message framing, session lifetime, retry behavior, metrics, and what must be stable between releases. Any change here can strand peers, so examples should be exercised with at least two real processes.
Primary types to know
AdapterRegistry— network/weave-dht/src/methods.rsAnnouncementState— network/weave-dht/src/weave.rsAnnounceOpts— network/weave-dht/src/weave.rsDhtClient— network/weave-dht/src/lib.rsDhtConfig— network/weave-dht/src/lib.rsDhtHandle— network/weave-dht/src/lib.rsDhtMethodAdapter— network/weave-dht/src/methods.rsDhtNode— network/weave-dht/src/lib.rsDhtNodeBuilder— network/weave-dht/src/lib.rsDidEnvelope— network/weave-dht/src/envelope.rsEnhancedDhtNode— network/weave-dht/src/enhanced.rsMarsAdapter— network/weave-dht/src/methods.rs
Example shape
use weave_dht::DhtNode;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Bring up two in-memory nodes. The builder seeds bootstrap_peers to wire
// peer discovery without standing up an out-of-band rendezvous service.
let alice = DhtNode::builder()
.in_memory()
.listen_port(0)
.start()
.await?;
let alice_addr = alice.handle().list_listeners().await?;
let bob = DhtNode::builder()
.in_memory()
.listen_port(0)
.bootstrap_peers(alice_addr.clone())
.start()
.await?;
// After bootstrap, the routing tables share each other's peer ID. Use
// list_peers() to confirm discovery converged.
let bob_peers = bob.handle().list_peers().await?;
println!(
"alice_peer_id={} listeners={} bob_known_peers={}",
alice.peer_id(),
alice_addr.len(),
bob_peers.len(),
);
Ok(())
}