Iroh is a Rust library that enables applications to establish direct peer-to-peer connections by dialing public keys instead of IP addresses. The core problem it solves is that IP addresses are unstable and change frequently, particularly for mobile devices and machines behind NAT. By abstracting away the complexity of network addressing, iroh allows developers to build applications that maintain reliable connections regardless of where endpoints are located or how their network configuration changes.
The library implements hole-punching as its primary mechanism for establishing direct connections between peers. When two endpoints want to communicate, iroh attempts to create a direct connection by punching through NAT firewalls. If hole-punching fails, the library automatically falls back to an open ecosystem of public relay servers, ensuring that connections are always established while maintaining performance. The project continuously measures connection performance across different routes to optimize which path is used for each connection.
Iroh is built on top of QUIC, a modern transport protocol that provides authenticated encryption, concurrent streams with prioritization, datagram transport, and avoids head-of-line blocking issues inherent in TCP. The library uses noq for establishing these QUIC connections between endpoints. This foundation gives applications strong security guarantees and efficient multiplexing capabilities out of the box.
Beyond the core connectivity layer, iroh provides a set of composable protocols that developers can use instead of building their own. Iroh-blobs handles content-addressed blob transfer using BLAKE3, scaling from kilobytes to terabytes. Iroh-gossip establishes publish-subscribe overlay networks with minimal resource requirements suitable for mobile devices. Iroh-docs provides an eventually-consistent key-value store built on top of iroh-blobs. These higher-level protocols allow developers to focus on application logic rather than implementing complex distributed systems primitives.
The repository is organized as a Rust workspace containing multiple crates. The core iroh crate provides hole-punching and relay communication functionality. Iroh-relay contains both client and server implementations for the relay infrastructure that the project runs in production. Iroh-base defines common types like EndpointId and RelayUrl used across the ecosystem. Iroh-dns-server implements DNS functionality powering address lookup for EndpointIds through dns.iroh.link.
According to GitGenius activity tracking, the project maintains a median issue and pull request response latency of zero hours with a mean of 245.9 hours across 591 tracked items, indicating active maintenance. The most frequently used issue label is c-iroh with 201 occurrences, followed by bug with 143 and feat with 86. The project's primary contributors tracked by GitGenius are flub with 683 events, dignifiedquire with 573 events, and matheus23 with 336 events. The repository shares contributors with major projects including rust-lang/rust, servo/servo, and flutter/flutter, suggesting deep integration with the broader Rust ecosystem.
For developers using languages other than Rust, iroh-ffi provides foreign function interface bindings. The project is dual-licensed under Apache License 2.0 and MIT, allowing flexible use in various contexts. The library emphasizes practical usability with straightforward APIs and comprehensive documentation available both on the iroh.computer website and through standard Rust documentation.