Hand files to people
with one string.

iroh-drop moves files straight from your device to theirs — encrypted end to end, verified by hash. No accounts, no servers, and nothing uploaded on the way. This page is the product: you're running a node right now.

no accountsno cloudend-to-end encryptedhash-verified
starting…
activity log

    

How it works

1

Add files

Your device hashes them (BLAKE3) and announces an offer — a name, a size, a hash. No bytes leave the machine. Adding is announcing, not sending.

2

Send the string

The link carries a drop1… ticket in its fragment. Whoever has it can find the drop and see what's offered. It's the only thing that travels out of band.

3

They accept

Bytes flow device-to-device over an encrypted connection, verified chunk-by-chunk against the hash. Everyone who receives helps serve — the drop outlives the original sender.

Nothing lands uninvited: an offer is an announcement, not a transfer. Consent — a click, or a policy you set — is what moves bytes.

The protocol

iroh-drop is a small coordination protocol composed from three existing layers. It adds exactly one idea: a drop is a gossip topic where offers are announced and consent gates every transfer.

your device
E2E-encrypted QUIC n0 relay · ciphertext only
their device

Desktop-to-desktop the relay only helps punch a direct path, then steps aside. In the browser, QUIC runs over the relay's WebSocket — still end-to-end encrypted between the two endpoints; the relay forwards bytes it cannot read.

iroh — connections

Every node is a keypair; its public key is its address. Any node can dial any other by key, with NAT hole-punching for direct paths and relays as fallback. Connections are authenticated and encrypted end to end.

tickets — invitations

A drop1… ticket packs the drop's topic id and bootstrap hints into one base32 string. Possession is membership. There is no account layer to revoke, expire, or leak.

iroh-gossip — coordination

The drop is a gossip topic. Offers, requests, provider announcements and withdrawals are small messages that flood through the swarm; anti-entropy sync means a late joiner sees the full history.

iroh-blobs — bytes

Files are content-addressed by BLAKE3 hash and streamed with per-chunk verification, so any peer can serve any blob and nobody can feed you tampered bytes. Every member that has a blob re-serves it.

consent — policy

The receiver's policy decides what happens to an offer: ask a human (this page's Accept button, the desktop consent card) or auto-accept under limits you choose. The default is to ask.

the wire — versioning

Kind-tagged, length-prefixed messages (postcard, wire version 2). New message kinds are additive: old nodes ignore what they don't understand, so the protocol can grow without flag days.

What is iroh?

iroh is an open-source toolkit by number 0 for direct device-to-device connections: dial any node by its public key and let the library worry about NATs, relays, and encryption. iroh-drop builds on iroh, iroh-gossip, and iroh-blobs, all of which compile to WebAssembly — which is how this page can be a real node and not a demo.

Get iroh-drop

macOS app

Menubar + window app on Apple Silicon. Long-lived node, on-disk store, consent cards, QR sharing, LAN discovery.

Download · GitHub releases ↗

Windows app

x64 build with the same daemon underneath — same drops, same tickets, same protocol as everything else on this page.

Download · GitHub releases ↗

CLI

For scripts, servers, and terminals. Ships in every release, or build from source.

iroh-drop share ./slides.pdf ./photos
iroh-drop receive drop1agxpfees…
Releases ↗ Build from source ↗