Table of Contents

Experiments

The go-iroh-experiments repository — independent modules built on go-iroh, from Rust iroh-experiments ports to gRPC-over-iroh and Secure Enclave key custody.

github.com/tmc/go-iroh-experiments collects experimental modules built on go-iroh. Each experiment is its own Go module, in its README’s words, “so its dependencies stay isolated and it can be released independently”. All modules declare Go 1.26.

Treat these as experiments in the ordinary sense: they are not covered by the core module’s compatibility posture, and they move independently.

Ports of Rust iroh-experiments

These are clean-room Go ports of the corresponding n0-computer/iroh-experiments subprojects, targeting wire compatibility.

Module Purpose
pkarrnaming content naming published and resolved over the pkarr relay transport
contentdiscovery tracker overlay for announcing and finding content providers (ALPN n0/tracker/1)
s3baostore iroh-blobs provider backed by a remote S3/HTTP object store
dagsync IPLD DAG synchronization over iroh (ALPN DAG_SYNC/1)
h3iroh HTTP/3 connection adapter over an iroh connection

Original experiments

Module Purpose
dtrain distributed-training collectives (AllReduce, broadcast, barrier) over a gossip group (ALPN /dtrain/1)
directpath direct-only QUIC path probe for cross-host and dual-stack go-iroh validation
enclaveiroh custody an iroh endpoint’s identity in the Apple Secure Enclave, and run it inside a hardened process
grpciroh run unmodified gRPC services over an iroh QUIC connection (ALPN grpc/iroh/1)
tlogiroh distributed transparency log: sumdb/tlog tiles as iroh blobs, gossiped note-signed checkpoints, witness K-of-N cosigning
wasmrelay browser (js/wasm) relay-only demos, including a cross-tab gossip chat
x402iroh x402-paid HTTP over iroh: endpoint keys authorize payments on an iroh:ed25519 network (ALPN x402/iroh/1)
xetstore serve HuggingFace/Xet files as iroh blobs via BAO outboards over HTTP range requests

Each module has its own README.md and package docs — start there; the one-liners above are the repository’s own.

Using a module

Each module is independent; add only the one you want:

go get github.com/tmc/go-iroh-experiments/pkarrnaming

For local development against a checkout of go-iroh, the repository describes a go.work setup tying the modules together. It is intentionally not committed, because it carries a local replace directive — see the repository README’s “Development” section for the exact commands.

Next steps

Last updated: 2026-08-20