IP addresses break, dial keys instead

Add peer-to-peer connectivity to your app, agent, or workflow.

Open source.
Forever.

iroh is an open source peer-to-peer networking stack built on open standards, so you're never locked in. Connect over our free community infrastructure, self-host your own, let us host services for you, and switch between them anytime.

Raspberry Pi
Espressif
Linux
Windows
Apple
Android

Built for environments where connectivity is unreliable or intermittent

  • Use all the radios: Wi-Fi, cellular, ethernet, LAN, or Bluetooth, or bring your own transport.

  • Lean on the cloud less with direct links that bypass NATs and firewalls, with stateless relays as fallback.

  • Secure end-to-end encryption, with opt-in observability to diagnose issues and improve performance.

AWSGCPAzureSelf-HostEdgeHybridPrivate

Iroh is the magic behind our ability to facilitate millions of private backbones in minutes. Impossible with traditional networks.

Drew Raines
Head of Engineering at Datum

Doubling the network speed halves our compute budget.

Ari Lotter
Principal Engineer at Nous

With iroh, every node is just a public key. We pool GPUs across clouds and closets into one mesh. No central server, no NAT config.

Michael Neale
Founder at Mesh LLM

How are people using iroh?

Ready for production

Get help from the pros
ConnectionsLatencyThroughputCustomΣAggregatorDashboardMobileServerIoT
SwiftRustJavaScriptKotlinPythonGo

Start building.

Read the Docs
App.swift
import IrohLib

@main
struct App {
    static func main() async throws {
        // Dial a peer and echo a message over a bidirectional stream.
        let endpoint = try await Endpoint.bind(
            options: EndpointOptions(preset: presetN0())
        )

        let conn = try await endpoint.connect(addr: serverAddr, alpn: ALPN)
        let bi = try await conn.openBi()

        try await bi.send().writeAll(buf: Data("hello iroh".utf8))
        try await bi.send().finish()

        let echoed = try await bi.recv().readToEnd(sizeLimit: 64)
        print(String(decoding: echoed, as: UTF8.self))
    }
}

Modular toolkit

Dozens of open-source, composable protocols built on top of iroh. Mix & match to get the feature set you need.

From the Blog