|
| 1 | +# Iroh |
| 2 | + |
| 3 | +> A peer-to-peer QUIC library for establishing direct connections between devices. Built in Rust by n0-computer. |
| 4 | + |
| 5 | +## Overview |
| 6 | + |
| 7 | +Iroh is a library for establishing the most direct QUIC connection possible between two devices. It provides "dial by public key" functionality, where you connect to nodes using their NodeId (32-byte ed25519 public key) rather than IP addresses. The library handles NAT traversal, hole punching, and relay fallbacks automatically. |
| 8 | + |
| 9 | +Iroh is compiled & tested for nearly all common platforms: Windows, MacOS, Linux, Android, iOS, etc. It runs on devices as small as an ESP32, as well as datacenter-grade servers. |
| 10 | + |
| 11 | +## Key Features |
| 12 | + |
| 13 | +- **Direct P2P connections**: Establishes direct QUIC connections whenever possible |
| 14 | +- **NAT traversal**: Automatic hole punching and relay server fallback |
| 15 | +- **Cryptographic identity**: Each node identified by ed25519 public key (NodeId) |
| 16 | +- **QUIC-based**: Built on QUIC for encryption, authentication, and stream multiplexing |
| 17 | +- **Composable protocols**: Compose multiple protocols for pluggable functionality from a community-driven set |
| 18 | + |
| 19 | +## Core Documentation |
| 20 | + |
| 21 | +- [API Reference](https://docs.rs/iroh/latest/iroh/): Complete Rust API documentation for the core iroh library |
| 22 | +- [Overview](https://www.iroh.computer/docs/overview): High-level introduction to iroh's architecture and benefits |
| 23 | +- [Quickstart](https://www.iroh.computer/docs/quickstart): Build a simple peer-to-peer file transfer tool |
| 24 | +- [Getting Started](https://www.iroh.computer/docs/): Main documentation hub with guides and examples |
| 25 | + |
| 26 | +## Architecture & Concepts |
| 27 | + |
| 28 | +- [Connection Establishment](https://docs.rs/iroh/latest/iroh/#connection-establishment): How iroh establishes connections via relay servers and direct addressing |
| 29 | +- [Encryption](https://docs.rs/iroh/latest/iroh/#encryption): TLS encryption using node SecretKey/PublicKey pairs |
| 30 | +- [Relay Servers](https://docs.rs/iroh/latest/iroh/#relay-servers): How relay servers ensure connectivity and assist with hole punching |
| 31 | +- [Connections and Streams](https://docs.rs/iroh/latest/iroh/#connections-and-streams): QUIC streams, ALPNs, and connection management |
| 32 | +- [Node Discovery](https://docs.rs/iroh/latest/iroh/#node-discovery): DNS-based discovery services for finding nodes |
| 33 | + |
| 34 | +## Core API |
| 35 | + |
| 36 | +- [Endpoint](https://docs.rs/iroh/latest/iroh/endpoint/struct.Endpoint.html): Central struct for managing an iroh node and creating connections |
| 37 | +- [NodeAddr](https://docs.rs/iroh/latest/iroh/struct.NodeAddr.html): Network addressing information combining NodeId, relay URLs, and direct addresses |
| 38 | +- [Connection](https://docs.rs/iroh/latest/iroh/endpoint/struct.Connection.html): QUIC connection with bi-directional and uni-directional stream support |
| 39 | +- [SecretKey/PublicKey](https://docs.rs/iroh/latest/iroh/struct.SecretKey.html): Cryptographic keys for node identity and authentication |
| 40 | + |
| 41 | +## Protocols & Extensions |
| 42 | + |
| 43 | +Protocols are listed at https://iroh.computer/proto. |
| 44 | + |
| 45 | +- [iroh-blobs](https://github.com/n0-computer/iroh-blobs): Content-addressed blob transfer using BLAKE3 hashing |
| 46 | +- [iroh-gossip](https://github.com/n0-computer/iroh-gossip): Publish-subscribe overlay networks |
| 47 | +- [iroh-docs](https://github.com/n0-computer/iroh-docs): Eventually-consistent key-value store |
| 48 | +- [iroh-willow](https://github.com/n0-computer/iroh-willow): Implementation of the Willow protocol |
| 49 | +- [Protocol Router](https://docs.rs/iroh/latest/iroh/protocol/): Tools for routing incoming requests to appropriate protocol handlers |
| 50 | + |
| 51 | +## Examples & Tutorials |
| 52 | + |
| 53 | +- [Echo Example](https://github.com/n0-computer/iroh/blob/main/iroh/examples/echo.rs): Simple bidirectional communication example |
| 54 | +- [Examples Directory](https://github.com/n0-computer/iroh/tree/main/iroh/examples): Collection of usage examples |
| 55 | +- [Tour](https://www.iroh.computer/docs/tour): High-level architectural overview |
| 56 | +- [Layers](https://www.iroh.computer/docs/layers): Understanding iroh's distributed systems toolkit |
| 57 | + |
| 58 | +## Development & Integration |
| 59 | + |
| 60 | +- [Quickstart Tutorial](https://www.iroh.computer/docs/quickstart): Build a file transfer tool step-by-step |
| 61 | +- [Wasm/Browser Support](https://www.iroh.computer/docs/wasm-browser-support): WebAssembly and browser compatibility |
| 62 | +- [iroh-ffi](https://github.com/n0-computer/iroh-ffi): FFI bindings for other languages |
| 63 | +- [Test Utils](https://docs.rs/iroh/latest/iroh/test_utils/): Internal utilities for testing iroh applications |
| 64 | + |
| 65 | +## Infrastructure & Ecosystem |
| 66 | + |
| 67 | +- [Relay Server](https://github.com/n0-computer/iroh/tree/main/iroh-relay): Production relay server implementation |
| 68 | +- [DNS Server](https://github.com/n0-computer/iroh/tree/main/iroh-dns-server): DNS discovery service running at dns.iroh.link |
| 69 | +- [Network Report](https://docs.rs/iroh/latest/iroh/net_report/): Network condition analysis and NAT detection |
| 70 | +- [Performance Monitoring](https://perf.iroh.computer): Continuous performance measurement |
| 71 | + |
| 72 | +## Reference Materials |
| 73 | + |
| 74 | +- [FAQ](https://www.iroh.computer/docs/faq): Frequently asked questions |
| 75 | +- [Roadmap](https://www.iroh.computer/roadmap): Future development plans |
| 76 | +- [Protocol Registry](https://www.iroh.computer/proto): Directory of iroh protocols |
| 77 | + |
| 78 | +## Community & Resources |
| 79 | + |
| 80 | +- [GitHub Repository](https://github.com/n0-computer/iroh): Source code and issue tracking |
| 81 | +- [Awesome Iroh](https://github.com/n0-computer/awesome-iroh): Community projects and resources |
| 82 | +- [License](https://github.com/n0-computer/iroh/blob/main/LICENSE-APACHE): Apache 2.0 / MIT dual license |
0 commit comments