Table of Contents
Ecosystem map
Which Go module owns which problem, and what each one’s maturity claim actually is.
The Go iroh ecosystem is four repositories: one core module and three repositories built on it.
| Repository | Contents | Page |
|---|---|---|
| go-iroh | the core module: endpoint, protocols, commands | this site |
| go-iroh-examples | 44 runnable example programs in a numbered progression | Examples |
| go-iroh-tools | small Unix-style networking tools backed by go-iroh | Tools |
| go-iroh-experiments | independent experimental modules, several porting Rust iroh-experiments | Experiments |
The core module
github.com/tmc/go-iroh — one module, one go.mod, versioned as a whole. Its
README positions it as: “a clean-room Go port targeting wire compatibility with
upstream Rust iroh. It is not affiliated with the n0 team.”
| Package | Owns |
|---|---|
iroh |
endpoints, connections, streams, the ALPN Router, address lookup |
key |
ed25519 keys, signatures, EndpointID |
netaddr |
endpoint and transport addresses, relay URLs |
relay |
relay maps, per-relay config, relay Mode |
relayserver |
the server side of the relay protocol |
dns |
DNS-based endpoint discovery, pkarr TXT encoding, DoH/DoT lookupers |
pkarr |
the pkarr signed DNS packet codec |
dnsserver |
an embeddable iroh DNS and pkarr relay server |
iroh/mdns |
local-network discovery (not built for js) |
blobs |
blob tickets, identifiers, BAO transfer |
gossip |
iroh-gossip pub/sub mesh |
docs |
iroh-docs multi-writer documents and range sync |
endpointticket |
endpoint ticket codec |
postcard |
the Rust-compatible postcard wire codec |
quicconn |
adapting iroh connections to a QUIC-like surface (for HTTP/3 stacks) |
irpc |
postcard-framed RPC helpers over iroh streams |
watch |
observable values (the Go analog of Rust’s n0_watcher) |
metrics |
a small OpenMetrics registry |
Everything else — the relay client and wire protocol, net reports, socket path
management, the QUIC and TLS forks, the gossip state machine — is under
internal/ and is not API.
Maturity tiers
State them once, and check them against the source of truth rather than trusting a badge:
| Tier | What it covers | Where it is defined |
|---|---|---|
| Wire-compatible connectivity | iroh, key, netaddr, relay, dns, pkarr |
the go-iroh README’s “Status” section |
| Ported protocols | blobs, gossip, docs |
same, plus each package’s doc comment |
| Experiments | every go-iroh-experiments module |
that repo’s README |
The README’s Status section claims the connectivity layer is a wire-compatible
iroh endpoint and that opt-in Rust gates cover live echo, Rust transfer
provider/upload, direct-path selection, qlog evidence for QNT frames, and
Go↔Rust gossip. Testing and interop describes how to run
those gates yourself, which is the only way to convert the claim into evidence
on your machine.
The experiments
github.com/tmc/go-iroh-experiments is a repository of independent modules —
each with its own go.mod, “so its dependencies stay isolated and it can be
released independently” (its README). Some are clean-room Go ports of the
corresponding Rust iroh-experiments
subprojects; others are original. The Experiments page lists
every module; the generated module index lists the exact module
paths and the commands each one ships.
Treat these as experiments in the ordinary sense: they are not covered by the core module’s compatibility posture, and they move independently.
What lives upstream, not here
- The protocol specifications and the reference implementation: n0-computer/iroh, docs.iroh.computer.
- The Rust protocol crates go-iroh ports: iroh-blobs, iroh-gossip, iroh-docs.
- The Rust experiments some Go experiments mirror: iroh-experiments.
Next steps
- Protocol packages — what the ported protocols do in Go.
- Module index — the generated inventory.
- Commands — the binaries the core module ships.