Table of Contents

API map

Which package holds which type, and the entry point for each task.

Lookup material. The authority is go doc and pkg.go.dev/github.com/tmc/go-iroh; this page is the index that gets you to the right package.

go doc github.com/tmc/go-iroh/iroh Endpoint
go doc github.com/tmc/go-iroh/netaddr EndpointAddr

Entry points by task

Task Call
Create an endpoint iroh.Bind(ctx, opts...)
Shut it down (*iroh.Endpoint).Shutdown(ctx)
Serve protocols by ALPN iroh.NewRouter(ep, handlers, cfg)
Accept one connection (*iroh.Endpoint).Accept(ctx)
Inspect before accepting (*iroh.Endpoint).AcceptIncoming(ctx)
Dial (*iroh.Endpoint).Connect(ctx, addr, alpn)
Dial with 0-RTT (*iroh.Endpoint).ConnectEarly(ctx, addr, alpn)
Get a net.Conn (*iroh.Endpoint).Dial(...), (*iroh.Conn).OpenStreamConn(ctx)
Open a stream (*iroh.Conn).OpenStreamSync(ctx)
Send a datagram (*iroh.Conn).SendDatagram(p)
Read my address (*iroh.Endpoint).Addr(), .WatchAddr()
Wait for a relay (*iroh.Endpoint).Online(ctx)
Build an address netaddr.NewEndpointAddr(id).WithIP(...)/.WithRelayURL(...)
Share an address endpointticket.Encode(addr) / .Decode(s)
Configure relays iroh.WithRelayMode(relay.Mode…)
Configure discovery iroh.WithAddressLookup(&services)
Generate a key key.GenerateSecretKey()
Inspect paths (*iroh.Conn).Paths(), .WatchPaths(ctx)
Read counters (*iroh.Endpoint).Metrics()

Packages

Connectivity

Package Key names
iroh Bind, Option (WithSecretKey, WithALPNs, WithBindAddr, WithRelayMode, WithAddressLookup, WithNetReport, WithPathSelector, WithCustomTransport, WithoutIPTransports, WithoutRelayTransports, …), Endpoint, Conn, Stream, SendStream, ReceiveStream, StreamListener, Incoming, Connecting, Router, ProtocolHandler, ProtocolHandlerFunc, PathInfo, NetReport, RemoteInfo, RelayStatus, AddressLookupServices, AddressPublisher, AddressResolver, Item, sentinel errors
key SecretKey, PublicKey, EndpointID, GenerateSecretKey, EndpointID.Z32
netaddr EndpointAddr, NewEndpointAddr, TransportAddr, IPAddr, RelayAddr, CustomAddr, ParseTransportAddr, RelayURL, ParseRelayURL
relay Mode (ModeDefault, ModeStaging, ModeCustom, ModeCustomURLs, ModeDisabled), Map, Config, QUICConfig, RankByLatency, HTTPConnectProber, DefaultQUICPort
relayserver the embeddable relay server
dns Resolver, EndpointData, EndpointInfo, N0DNSEndpointOriginProd
pkarr the signed DNS packet codec
dnsserver the embeddable DNS/pkarr server
iroh/mdns New, Discovery, WithServiceName, WithPassive, WithLookupTimeout, DefaultServiceName
watch Value, Observer
metrics the OpenMetrics registry

Protocols

Package Key names
blobs ALPN, Hash, Ticket, Store, ServeBlob, ServeBlobStreams, DownloadBlob, DownloadBlobRange, DownloadBlobParallel, GetBlobBytes, GetManyBlobBytes, Observe, DecodeBlob*
gossip ALPN, NewGossip, Gossip, Topic, TopicID, Sender, Receiver, Event, EventKind, JoinOptions, Discovery, DefaultDiscoveryTopic
docs ALPN, Author, AuthorID, NamespaceID, NamespaceSecret, Capability, Entry, Record, DocTicket, Handler
endpointticket Encode, Decode, Ticket, Registry, Kind
postcard the postcard wire codec
irpc Call[Req, Resp], Handler, Responder
quicconn NewConn, Conn, BidiStream, SendStream, ReceiveStream

Anything under internal/ — the relay client and protocol, net reports, socket management, qng, itls — is not API and can change without notice.

Constants worth knowing

iroh exports the behavioral constants it shares with Rust iroh, each cited to the Rust source in its doc comment: HeartbeatInterval (5s), PathMaxIdleTimeout, RelayPathMaxIdleTimeout, MaxMultipathPaths (8), MaxQNTAddresses (32), and ConnectTimeout (10s).

Next steps

Last updated: 2026-08-20