Build distributed apps that raise the status quo for your users.

Iroh is a toolkit for building distributed apps. Open source and universally compatible, it's the quickest route from concept to connected devices.

Live collaborate on anything

Effortlessly invite users to a dynamic shared environment. iroh offers intuitive syncing across devices, with seamless hooks for instant read & write operations, simplifying the developer experience.

No central server required

Iroh establishes direct connections between devices for you, traversing across network address translation (NATs) with best-in-class connection rates.

Scale without limits

Iroh handles data of any magnitude, ensuring peak performance even when individual device capacities are exceeded.

built with iroh:

dumb pipe

Connect Any two devices, directly. Dumb pipe is an open project built on iroh connections

sendme

Send files anywhere for free, without an account. Sendme is built on iroh blobs and connections.

Move data for free

Direct connections don't come with a bill. With iroh it's possible to build & use zero-cost tooling.

Build self-sustaining networks

users can start a movie on their computer, then transfer to their phone, bringing data with them.

Sync between services

write integrations into services

See Integration Examples

iroh.network

Seamless cloud backing

Connect to a global network of iroh nodes that keep your data available at all times. iroh.network is an optional service for working with iroh.

Sign up for a free account

Build in your language

Iroh supports a growing set of languages, embedding nodes directly in your project without any need to call out to an external API

start building

doc get

use anyhow::Result;
use futures::stream::TryStreamExt;

#[tokio::main]
async fn main() -> Result<()> {
    // build the node
    let node = iroh::node::Node::memory().spawn().await?;

    // create 2 documents
    let _doc_0 = node.docs.create().await?;
    let _doc_1 = node.docs.create().await?;

    // list newly created docs
    println!("List all docs:");
    let mut docs = node.docs.list().await?;
    while let Some((doc_id, _capability)) = docs.try_next().await? {
        println!("{doc_id}");
    }

    Ok(())
}

Install the CLI

Install iroh now & jump into the quickstart.

$ curl -fsSL https://sh.iroh.computer/install.sh | bash
$ iroh console --start