Expand description
§ringdrop
P2P file transfer with ring-based access control, built on iroh (QUIC + hole-punching) and [iroh-blobs] (BLAKE3 chunked storage with bao encoding).
§Architecture
┌─────────────────────┐
│ CLI (rdrop) │
│ ↕ │
│ DaemonClient │
└──────────┼──────────┘
┌──────────────────────↕───────────────────────┐
│ DaemonServer │
│ (owns the Node) │
│ ┌───────────────────┴────────────────────┐ │
│ │ Node │ │
│ │ ┌──────────────────────────────────┐ │ │
│ │ │ FsStore Registry Grants Peers │ │ │
│ │ │ └───────────┬─────────────┘ │ │ │
│ │ │ ┌─────────────┴─────────────┐ │ │ │
│ │ │ │ RingGate │ │ │ │
│ │ │ │ (/iroh-rings/2) │ │ │ │
│ │ │ ├───────────────────────────┤ │ │ │
│ │ │ │ CatalogHandler │ │ │ │
│ │ │ │ (/ringdrop/catalog/0) │ │ │ │
│ │ │ └─────────────┬─────────────┘ │ │ │
│ │ │ Endpoint │ │ │
│ │ │ (QUIC/iroh) │ │ │
│ │ └───────────────┼┼┼────────────────┘ │ │
│ └──────────────────┼┼┼───────────────────┘ │
└─────────────────────┼┼┼──────────────────────┘
internetA core::Node wraps an iroh QUIC endpoint, an iroh-blobs persistent blob
store, a Registry that tracks ring membership and permission-typed
resource associations, and two protocol handlers registered on the endpoint:
a RingGate (/iroh-rings/2) that enforces access control — a blob is only
served to a peer that holds Permission::Read on it — and a
CatalogHandler (/ringdrop/catalog/0) that lets authorised peers query
the local blob list.
The daemon module runs a Node as a background TCP server so that the
CLI can talk to it over a local IPC connection.