the networking stack for user agency
Iroh is a library for building on direct connections between devices, putting more control in the hands of your users.
In stark contrast to other p2p & dweb technologies we've played with - which are exciting due to their implications for the future - Iroh brought instant gains in our present.
- Weird Folk
Connect any two devices on the planet
Iroh gives you an API for dialing by public key. You say “connect to that phone”, iroh will find & maintain the fastest connection for you, regardless of where it is.
Compose your own tailor-made protocol stack
An ecosystem of ready-made, composable protocols are built on top of iroh.
Mix & match to get the feature set you need.
Blobs
Resumable, verifiable data transfer
Gossip
Broadcast messages to groups of nodes by topic.
Documents
Realtime, multiwriter, key-value sync
Willow
multiwriter, key-value sync with fine-grained access control
Automerge
CRDT-powered collaborative documents
BYOP (build your own protocol)
Don't see a protocol you need? Build your own! Iroh gives you a reliable foundation for building distributed systems that reach the edge. The rest is up to you.
Start BuildingReal World Use:
Iroh is running in production on hundreds of thousands of devices, on all major platforms.
Delta Chat
Iroh powers multi-device backup & live connections for in-chat WebXDC apps.
Shaga
Streaming gaming to Android devices from high powered, gaming PCs. Iroh builds direct connections for simultaneous video, audio, and controller streams
Fish Folk
Multiplayer driven by iroh direct connections
Sendme
Send files. Any size. No Accounts. Free.
Dumbpipe
It's a unix pipe, over the internet
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 buildingdoc 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