P2P Networking · Rust · Open Source

Iroh 1.0:
Τέλος στις IP Διευθύνσεις;

Η networking library που αλλάζει τον τρόπο που συνδέουμε συσκευές — χωρίς IP headaches, χωρίς NAT frustration, με cryptographic keys μόνο.

Sotirios Christodoulou 26 Ιουνίου 2026 ~25 λεπτά ανάγνωση v1.0 · MIT License

// 01 — ΕισαγωγήΤι είναι το Iroh;

Φανταστείτε να μπορείτε να στείλετε δεδομένα σε μια συσκευή χωρίς να ξέρετε την IP διεύθυνσή της. Χωρίς να ανησυχείτε αν βρίσκεται πίσω από NAT, firewall, ή αν άλλαξε δίκτυο εν ώρω μεταφοράς. Αυτό ακριβώς κάνει το Iroh.

Το Iroh είναι μια open-source peer-to-peer networking library γραμμένη σε Rust, που δημιουργήθηκε από την εταιρεία n0, Inc. Στις 15 Ιουνίου 2026, μετά από 4 χρόνια ανάπτυξης και 65 pre-release versions, κυκλοφόρησε η έκδοση 1.0 — η πρώτη stable release με εγγυήσεις σταθερότητας στο API και wire protocol.

Core Concept
Αντί να συνδέεσαι σε μια IP διεύθυνση που μπορεί να αλλάξει χωρίς προειδοποίηση, το Iroh σε συνδέει με ένα cryptographic key — μια ταυτότητα που ελέγχεις εσύ και παραμένει σταθερή ανεξαρτήτως δικτύου.
200M+
Endpoints / μήνα
στα public relays
95%
Direct connection
success rate
65
Versions πριν
το stable 1.0
8.8K+
GitHub Stars
(Ιούνιος 2026)

// 02 — Το ΠρόβλημαΓιατί οι IP Διευθύνσεις Σπάνε;

Για να καταλάβουμε γιατί το Iroh υπάρχει, πρέπει πρώτα να καταλάβουμε ένα θεμελιώδες πρόβλημα του σύγχρονου internet.

Το internet σχεδιάστηκε με την υπόθεση ότι κάθε συσκευή έχει μια σταθερή, globally routable IP διεύθυνση. Αυτή η υπόθεση πέθανε ήσυχα με την έλευση του NAT (Network Address Translation).

Σήμερα, το laptop σου βρίσκεται πίσω από το home router σου, το οποίο βρίσκεται πίσω από τον ISP σου, που μπορεί να βρίσκεται πίσω από CGNAT. Η "IP διεύθυνσή" σου όπως φαίνεται από έξω είναι κοινή με χιλιάδες άλλους χρήστες και αλλάζει κάθε φορά που ο router διαπραγματεύεται νέο lease.

Το Κλασικό Πρόβλημα
Θέλεις να συνδέσεις δύο συσκευές απευθείας; Πρέπει να στήσεις STUN servers, TURN servers, να υλοποιήσεις ICE negotiation, να χειριστείς hole punching — και ακόμα δεν είσαι σίγουρος ότι θα δουλέψει πίσω από symmetric NAT.

Πώς φαίνεται το πρόβλημα στην πράξη

Laptop A
192.168.1.5
Home Router
NAT Layer 1
ISP CGNAT
NAT Layer 2
Internet
???
Laptop B
πού είναι;

Η κλασική κατάσταση — δύο συσκευές που δεν μπορούν να βρεθούν

Αυτό δεν είναι ένα configuration πρόβλημα που λύνεται μια φορά. Είναι μια δομική ιδιότητα του σύγχρονου network. Και η παραδοσιακή λύση ήταν πάντα: «βάλε έναν central server στη μέση».

Το Iroh αρνείται αυτή τη λύση.

// 03 — ΑρχιτεκτονικήΠώς Λειτουργεί το Iroh;

Το Iroh αντικαθιστά την IP διεύθυνση με ένα cryptographic keypair. Κάθε endpoint στο δίκτυο του Iroh έχει ένα μοναδικό public/private key. Το public key είναι η "διεύθυνση" σου.

Η Ουσία
Παλιά: "Σύνδεσέ με στο 203.0.113.45:8080"
Iroh: "Σύνδεσέ με στο a1b2c3d4e5f6..." (public key)

Στρώματα της αρχιτεκτονικής

Transport Layer — QUIC + TLS 1.3

Κάτω από όλα, το Iroh χρησιμοποιεί QUIC — το ίδιο modern transport protocol που τροφοδοτεί το HTTP/3. Αυτό δίνει built-in encryption, multiplexing πολλαπλών streams, και καλύτερη απόδοση σε unreliable networks.

NAT Traversal — Hole Punching μέσα στο QUIC

Το Iroh υλοποιεί NAT traversal απευθείας μέσα στο QUIC connection, μέσω μιας επέκτασης που ονομάζεται n0_nat_traversal. Αυτό το κάνει πολύ πιο αξιόπιστο από παραδοσιακές προσεγγίσεις — στατιστικά, 95% των connections γίνονται direct, ενώ το libp2p φτάνει περίπου 70%.

Discovery — Πώς βρίσκεις ένα key;

Εδώ είναι το σημείο που πρέπει να καταλάβουμε ένα σημαντικό limitation: το Iroh δεν λύνει το πρόβλημα της αρχικής ανακάλυψης. Αν θέλεις να συνδεθείς με κάποιον, πρέπει πρώτα να μάθεις το key του μέσω out-of-band μεθόδου — QR code, config file, pairing flow στο app σου. Το Iroh λύνει τα πάντα μετά από αυτό.

Public Key
της Συσκευής Β
DNS / DHT
Lookup
Hole Punch
95% direct
Σύνδεση!
E2E Encrypted

Η ροή σύνδεσης με Iroh — από key σε authenticated connection

Relay Fallback — DERP Nodes

Όταν το direct hole punching αποτύχει (το 5% των περιπτώσεων), το Iroh κάνει fallback σε relay servers που ονομάζονται DERP nodes (Designated Encrypted Relay Packets). Κρίσιμη λεπτομέρεια: τα relay servers βλέπουν μόνο τα node identifiers, όχι το περιεχόμενο, γιατί το traffic παραμένει end-to-end encrypted.

Τα 3 built-in protocols

Πάνω στη networking layer, το Iroh έρχεται με τρία production-ready protocols:

📦
iroh-blobs

Content-addressed blob transfer. Σκέψου το git object store, αλλά για arbitrary data σε P2P network. Κάθε chunk αναγνωρίζεται από hash — δεν στέλνεις ποτέ το ίδιο byte δύο φορές.

📡
iroh-gossip

Publish-subscribe overlay network βασισμένο σε HyParView και Plumtree algorithms. Σχεδιασμένο για mobile devices με high network churn.

🗄️
iroh-docs

Eventually consistent key-value storage με built-in sync protocol. Χρήσιμο για shared state μεταξύ peers χωρίς central database.

Υποστηριζόμενες γλώσσες

Μία από τις μεγαλύτερες νέες εξελίξεις του 1.0 είναι η επίσημη υποστήριξη multiple γλωσσών, που είχε παγώσει νωρίτερα λόγω API churn:

🦀 Rust (native) 🐍 Python ⬢ Node.js Swift 🟣 Kotlin

Αυτό σημαίνει ότι μπορείς να κάνεις embed το Iroh σε iOS app (Swift), Android app (Kotlin), ή Python backend χωρίς να αγγίξεις Rust.

Παράδειγμα κώδικα — Rust

RUSTuse iroh::{Endpoint, NodeAddr};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // Δημιούργησε ένα endpoint — το key δημιουργείται αυτόματα
    let endpoint = Endpoint::builder().bind().await?;

    // Το "address" σου είναι το public key, όχι IP
    println!("Node ID: {}", endpoint.node_id());

    // Σύνδεση σε άλλο endpoint μέσω key
    let server_addr: NodeAddr = "από QR code, config, ή pairing".parse()?;
    let conn = endpoint.connect(server_addr, b"my-protocol/0").await?;

    // QUIC stream — E2E encrypted by default
    let (mut send, mut recv) = conn.open_bi().await?;
    send.write_all(b"Γεια σου από Ελλάδα!").await?;
    send.finish()?;

    let response = recv.read_to_end(1024).await?;
    println!("Απάντηση: {}", String::from_utf8_lossy(&response));

    Ok(())
}

Παράδειγμα κώδικα — Node.js

JAVASCRIPTimport { Endpoint } from "@number0/iroh";

// Δημιουργία endpoint
const endpoint = await Endpoint.bind({ 
  alpns: [Buffer.from("my-app/1")] 
});

console.log("Node ID:", endpoint.nodeId().toString("hex"));

// Αποδοχή εισερχόμενων connections
for await (const conn of endpoint.accept()) {
  const { stream } = await conn.acceptBi();
  const data = await stream.recv.readToEnd(1024);
  console.log("Έλαβα:", data.toString());
}

Παράδειγμα κώδικα — Python

PYTHONimport iroh
import asyncio

async def main():
    # Δημιούργησε endpoint
    endpoint = await iroh.Endpoint.bind()
    
    print(f"Node ID: {endpoint.node_id().to_hex()}")
    
    # Σύνδεση με key
    conn = await endpoint.connect(server_addr, b"my-app/1")
    bi = await conn.open_bi()
    
    await bi.send.write_all(b"Hello from Python!")
    await bi.send.finish()
    
    data = await bi.recv.read_to_end(1024)
    print(f"Απάντηση: {data.decode()}")

asyncio.run(main())

// 04 — ΣυγκρίσειςIroh vs. Τι Υπήρχε Πριν;

Υπήρχαν ήδη εργαλεία για P2P networking. Γιατί να ασχοληθείς με το Iroh;

Χαρακτηριστικό Iroh 1.0 libp2p WebRTC WireGuard
Direct connection rate ~95% ~ ~70% ~ ~85% ~90%
E2E Encryption by default
Key-based addressing
Mobile-first design ~
Swift / Kotlin bindings ~
Developer experience Εξαιρετικό ~ Πολύπλοκο ~ Μέτριο ~ Ops-focused
Wire protocol stability Guaranteed
BLE / LoRa transport
Embedded / IoT ready ~
Tor integration Pluggable ~
Honest Limitation
Το Iroh δεν σου δίνει public HTTPS URL. Για να δέχεσαι inbound HTTP από unknown clients — webhooks, APIs, web UIs — εξακολουθείς να χρειάζεσαι public endpoint ή tunnel service. Το Iroh συνδέει known peers. Αυτό είναι feature, όχι bug.

// 05 — Use CasesΠού Χρησιμοποιείται Ήδη;

Το Iroh δεν είναι θεωρητικό — βρίσκεται ήδη σε production σε εκατοντάδες χιλιάδες συσκευές πριν καν φτάσει στο 1.0.

🤖
Distributed AI Training

Η PrimeIntellect χρησιμοποιεί Iroh για asynchronous P2P communication σε decentralized AI pipeline parallelism — εκπαίδευση μεγάλων models χωρίς central coordinator.

🧠
Multi-Cloud AI

Η Nous Research το χρησιμοποιεί για gradient sharing μεταξύ AWS, GCP, Azure και self-hosted nodes ταυτόχρονα.

📹
Video Streaming P2P

Direct device-to-device video streaming χωρίς CDN για low-latency εφαρμογές όπου κάθε millisecond μετράει.

🔒
Secure Messaging

E2E encrypted messaging χωρίς central server — κανένα metadata δεν διαρρέει, γιατί δεν υπάρχει intermediary που να βλέπει τίποτα.

🎮
Game Networking

Multiplayer networking χωρίς dedicated game servers — direct player-to-player connections με built-in encryption.

🌐
Local-First Apps

Εφαρμογές που δουλεύουν offline-first και συγχρονίζουν όταν υπάρχει connectivity — χωρίς cloud dependency.

🏭
Industrial IoT

Συσκευές που επικοινωνούν απευθείας σε local network χωρίς internet access — με υποστήριξη BLE και LoRa για extreme edge cases.

📂
File Sync

Το iroh-blobs κάνει efficient delta sync — μόνο τα αλλαγμένα chunks μεταφέρονται, κάτι σαν rsync αλλά P2P και encrypted.

// 06 — ΕγκατάστασηΠώς Ξεκινάς;

Το Iroh είναι δύσκολο να αντισταθείς — η εγκατάσταση είναι εξαιρετικά απλή για library ανεξαρτήτως γλώσσας.

Rust

CARGOcargo add iroh

Node.js

NPMnpm install @number0/iroh

Python

PIPpip install iroh

Swift (iOS)

SWIFT PACKAGE// Package.swift
dependencies: [
    .package(url: "https://github.com/n0-computer/iroh-swift", from: "1.0.0")
]

Quick test — Node.js Echo Server

Να ένα πλήρες παράδειγμα που δείχνει τη δύναμη του Iroh σε λίγες γραμμές:

JAVASCRIPTimport { Endpoint } from "@number0/iroh";

const ECHO_ALPN = Buffer.from("iroh-echo/1");

async function runServer() {
  const server = await Endpoint.bind({ alpns: [ECHO_ALPN] });
  console.log("Server Node ID:", server.nodeId().toString("hex").slice(0, 16) + "...");
  console.log("Περίμενω connections...\n");

  for await (const conn of server.accept()) {
    (async () => {
      const { stream } = await conn.acceptBi();
      const data = await stream.recv.readToEnd(4096);
      console.log("Έλαβα:", data.toString());
      await stream.send.writeAll(data); // Echo back
      await stream.send.finish();
    })();
  }
}

async function runClient(serverNodeId) {
  const client = await Endpoint.bind();
  // Σύνδεση με NODE ID, όχι IP!
  const conn = await client.connect({ nodeId: serverNodeId }, ECHO_ALPN);
  const bi = await conn.openBi();
  
  const msg = "Γεια σου από Ελλάδα! 🇬🇷";
  await bi.send.writeAll(Buffer.from(msg));
  await bi.send.finish();
  
  const echo = await bi.recv.readToEnd(4096);
  console.log("Echo:", echo.toString());
  await client.close();
}

// Τρέξε server σε terminal 1, client σε terminal 2 με το Node ID του server
if (process.argv[2] === "server") {
  runServer();
} else {
  runClient(process.argv[2]);
}
Wire Protocol Stability
Με το 1.0, το Iroh εγγυάται ότι ένα iroh v1.0.x endpoint θα μπορεί να επικοινωνεί με ένα iroh v1.2.0 ή v1.5.0 endpoint. Δεν χρειάζεται να συγχρονίζεις updates σε όλους τους nodes ταυτόχρονα.

// 07 — ΙστορικόΑπό Πού Ήρθε το Iroh;

2022
Αρχή του project

Η n0, Inc. ξεκινά την ανάπτυξη του Iroh με στόχο ένα P2P networking primitive που να "απλώς δουλεύει".

2022–2025
65 pre-release versions

Rapid iteration, API churn, αλλά συνεχής production testing. Τα FFI bindings παγώνουν προσωρινά λόγω ασταθές API.

Μάρτιος 2026
200M+ endpoints/μήνα

Τα public relay stats αποκαλύπτουν massive production adoption πριν το stable release.

Μάιος 2026
Release Candidate v1.0.0-rc.0

Πρώτο Release Candidate — API freeze, multipath QUIC, finalized wire protocol. Κλήση σε community για testing.

15 Ιουνίου 2026
🎉 Iroh 1.0 — Stable!

Επίσημο stable release με wire protocol stability guarantees, Python/Node.js/Swift/Kotlin bindings, και versioned support policy.

// 08 — ΑδυναμίεςΤι ΔΕΝ Κάνει το Iroh;

Κάθε εργαλείο έχει τα όριά του. Να τα γνωστά limitations του Iroh 1.0:

IP Visibility
Οι IP διευθύνσεις παραμένουν ορατές στους direct peers και στους relay servers κατά τη διάρκεια της σύνδεσης. Αν χρειάζεσαι πλήρη anonymity, μπορείς να route μέσω Tor — το Iroh υποστηρίζει pluggable transports.
Observability
Τα monitoring και observability tools εξακολουθούν να ωριμάζουν. Αν χρειάζεσαι production-grade metrics out of the box, ίσως χρειαστεί να φτιάξεις δικά σου instrumentation.
Δεν αντικαθιστά το HTTP server
Το Iroh είναι για known peers. Για public APIs, webhooks, ή οτιδήποτε χρειάζεται να είναι προσβάσιμο από unknown clients μέσω HTTPS, εξακολουθείς να χρειάζεσαι κανονικό server.

// 09 — ΣυμπέρασμαΑξίζει να το Δοκιμάσεις;

Το ερώτημα δεν είναι "είναι το Iroh καλό;" — είναι "είναι κατάλληλο για αυτό που χτίζω;"

Αν φτιάχνεις κάτι που χρειάζεται direct device-to-device connections — distributed AI training, real-time multiplayer, IoT sensor networks, file sync, secure messaging, local-first εφαρμογές — το Iroh 1.0 είναι η πιο mature και developer-friendly επιλογή που υπάρχει αυτή τη στιγμή.

Το 95% direct connection rate, η built-in E2E encryption, τα stable bindings σε 5 γλώσσες, και οι 200M+ endpoints που τρέχουν ήδη σε production μαρτυρούν ότι αυτό δεν είναι ένα "ενδιαφέρον experiment" — είναι production-ready infrastructure.

Το P2P networking ήταν πάντα δύσκολο. Το Iroh 1.0 είναι η πρώτη σοβαρή προσπάθεια να το κάνει βαρετά εύκολο.