---
title: go-iroh documentation
description: Peer-to-peer QUIC in Go — endpoints identified by public keys, direct paths with relay fallback, wire-compatible with Rust iroh.
icon: house
---

`go-iroh` is a Go implementation of iroh: peer-to-peer QUIC endpoints
identified by ed25519 public keys, with direct paths, relay fallback, and
Rust-compatible ports of the iroh protocol stack. This site documents the Go
ecosystem — the `github.com/tmc/go-iroh` module, its commands, and the
`go-iroh-experiments` modules built on it.

For the iroh protocol itself, the Rust implementation, and the concepts the two
implementations share, read the upstream documentation at
[iroh.computer](https://docs.iroh.computer) — this site links to it rather
than restating it.

<CardGroup cols={2}>
  <Card title="Getting started" icon="rocket" href="docs/getting-started">
    Add the module, connect two endpoints over loopback, and check your Go
    version.
  </Card>
  <Card title="Build an echo protocol" icon="terminal" href="docs/first-app">
    A verified end-to-end tutorial: a protocol handler, a ticket, and two
    processes talking.
  </Card>
  <Card title="How go-iroh works" icon="diagram-project" href="docs/architecture">
    Endpoints, transports, path selection, and the forked QUIC stack the wire
    compatibility depends on.
  </Card>
  <Card title="Ecosystem map" icon="map" href="docs/ecosystem-map">
    Which module owns your problem, and what each one's maturity claim is.
  </Card>
  <Card title="Examples" icon="code" href="docs/examples">
    44 runnable programs in a numbered progression, one API surface each.
  </Card>
  <Card title="API map" icon="compass" href="docs/api-map">
    Task-to-call reference for every public package.
  </Card>
</CardGroup>

Everything else is in the sidebar navigation, grouped by task.

## Relationship to upstream iroh

go-iroh is, in its own README's words, "a clean-room Go port targeting wire
compatibility with upstream Rust iroh. It is not affiliated with the n0 team."

That shapes what this site covers. Protocol design, the reference
implementation, and the conceptual documentation live upstream:

- [docs.iroh.computer](https://docs.iroh.computer) — the protocol and the
  Rust implementation's documentation.
- [docs.rs/iroh](https://docs.rs/iroh) — the Rust API reference.
- [github.com/n0-computer/iroh](https://github.com/n0-computer/iroh) — the
  reference implementation go-iroh is tested against.

This site covers what upstream cannot: the Go API surface, the Go module
layout, the Go commands, the Go test and interop gates, and the Go experiments.
Where a concept is identical in both implementations, the pages here name it
and link upstream instead of paraphrasing.

## A naming collision worth knowing

`iroh-docs` is a *protocol*, not documentation. Upstream describes it as
"multi-dimensional key-value documents with an efficient synchronization
protocol"
([n0-computer/iroh-docs](https://github.com/n0-computer/iroh-docs)). go-iroh
ports it as the `docs` package. This site — `go-iroh-docs` — is documentation
for the Go ecosystem. See [Protocol packages](docs/protocols) for the `docs`
package.
