---
title: Ecosystem map
description: Which Go module owns which problem, and what each one's maturity claim actually is.
icon: map
---

The Go iroh ecosystem is four repositories: one core module and three
repositories built on it.

| Repository | Contents | Page |
| --- | --- | --- |
| [go-iroh](https://github.com/tmc/go-iroh) | the core module: endpoint, protocols, commands | this site |
| [go-iroh-examples](https://github.com/tmc/go-iroh-examples) | 44 runnable example programs in a numbered progression | [Examples](examples) |
| [go-iroh-tools](https://github.com/tmc/go-iroh-tools) | small Unix-style networking tools backed by go-iroh | [Tools](tools) |
| [go-iroh-experiments](https://github.com/tmc/go-iroh-experiments) | independent experimental modules, several porting Rust iroh-experiments | [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](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](https://github.com/n0-computer/iroh-experiments)
subprojects; others are original. The [Experiments](experiments) page lists
every module; the generated [module index](repo-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](https://github.com/n0-computer/iroh),
  [docs.iroh.computer](https://docs.iroh.computer).
- The Rust protocol crates go-iroh ports:
  [iroh-blobs](https://github.com/n0-computer/iroh-blobs),
  [iroh-gossip](https://github.com/n0-computer/iroh-gossip),
  [iroh-docs](https://github.com/n0-computer/iroh-docs).
- The Rust experiments some Go experiments mirror:
  [iroh-experiments](https://github.com/n0-computer/iroh-experiments).

## Next steps

- [Protocol packages](protocols) — what the ported protocols do in Go.
- [Module index](repo-index) — the generated inventory.
- [Commands](commands) — the binaries the core module ships.
