Skip to content

Releases: chad/iroh-drop

v0.2.0 — protocol freeze candidate (families 3/4, private drops, drop2 tickets)

Choose a tag to compare

@chad chad released this 04 Aug 02:04

The one deliberate wire break before freezing the protocol. v0.2.0 peers and v0.1.x peers reject each other cleanly by version — upgrade together, and re-share tickets (old drop1… tickets fail with a clear version error).

Highlights

  • Topic-bound signatures — frames verify under exactly one drop; cross-topic replay is impossible. Public = message family 3, sealed = family 4.
  • Private drops — XChaCha20-Poly1305 sealed frames (--private on the CLI), key in the ticket, blind relays that carry what they can't read, rotate-to-exclude.
  • drop2 tickets — explicit Public|Sealed mode, drop-owned address type (iroh's address evolution can't silently change ticket meaning).
  • Namespaced extensions — kind numbers are core-owned; application protocols ride a 16-byte namespace envelope (kind 5). Presence beacons ship as the canonical example (iroh-drop-presence).
  • Hardened sync — connection-bound, key-separated proofs for sealed drops; truncation signaling; per-attempt page/byte caps.
  • Byte budgets everywhere — 32 MiB/topic retained history, 4 MiB extension budget, 64 sessions per instance, deterministic provider ordering, ambiguous-name lookups error instead of guessing.
  • Web client — wasm, in-browser, relay-only, at iroh-drop.boxd.sh (redeployed for v0.2.0).

Spec: docs/protocol.md (rewritten: version terminology, acceptance order, full limits table). Extending: docs/extending.md.

Downloads

  • macOS (Apple Silicon): iroh-drop-0.2.0-macos-arm64.zip — app bundle + CLI inside.
  • Windows (x64): iroh-drop-0.2.0-windows-x64.zip — GUI, daemon, CLI; see README.txt inside for URL-scheme registration.

Built from tag v0.2.0. Workspace: 138/138 tests green, conformance fixtures in CI.

v0.1.3 — failed fetches stay visible, joined groups on screen

Choose a tag to compare

@chad chad released this 01 Aug 00:28

Three fixes found while staging screenshots — one of them matters.

  • daemon: a failed fetch reported the offer as "available" — the file vanished from every "new in your groups" list and looked complete, though the bytes never arrived. failed is its own status now, and both apps show failed offers next to missing ones, ready to retry (asking is still the consent).
  • macOS: joined groups were invisible in the window — the Sharing list filtered to drops you created, so there was no way to see or Leave a group you'd joined. There's a Groups section now, and the menu bar lists every drop you serve.
  • macOS: transfers started from the CLI or another client showed as "file" after an app restart; the name table now also learns from offer listings.

104 tests passing, clippy clean. If you installed 0.1.2, replace it with this one.

v0.1.2 — UX polish

Choose a tag to compare

@chad chad released this 01 Aug 00:06

A UX polish round on both apps, and the version numbers now match the release tags.

macOS

  • Consent notifications carry Accept/Decline actions — answer with the window closed; banners withdraw themselves when answered or expired.
  • New "File received" notification with Show in Downloads.
  • Try Again on failed transfers, context menus on every row (Copy Link, Show Link & QR…, Show in Finder, Leave/Stop).
  • The menu-bar icon reflects what's happening, and the menu now shows "New in your groups" with Get buttons.
  • Consent cards name the group; progress shows "1.2 of 3.4 MB"; dismissable errors; ⌘O to send; the app is called Drop everywhere.

Windows / Linux (egui)

  • Framed Send/Receive sections, progress text, Try Again, "Copied ✓" feedback, drag-hover tint, dismissable errors, an empty state, per-group Link buttons, and Get buttons that can't be double-tapped.
  • Bug fix: joining an empty group blocked the UI up to 60s and then errored. An empty group is just a group whose files haven't been offered yet — the join now returns quickly and offers arrive when they arrive.

103 tests passing, clippy clean. Same caveat as before: the Windows build is compile-verified but has not been run on real Windows hardware yet (this release is what we'll test with). First-launch notes: right-click → Open on macOS; SmartScreen → More info → Run anyway on Windows.

v0.1.1 — sticky membership

Choose a tag to compare

@chad chad released this 31 Jul 13:27

Groups are now sticky: join once, stay until you explicitly leave.

  • See anything offered, whenever you come back. Both sides now sync on every reconnect (anti-entropy on neighbor-up), so two machines that are never online at the same time still converge — no re-sharing links, no re-publishing.
  • Joining the same link twice is one membership, and groups show their real name ("Holiday photos", not "received files").
  • Explicit leave everywhere: iroh-drop leave <id> on the CLI, "Leave" buttons in both apps.
  • "New in your groups" in the app: offers you did not fetch (e.g. a card that timed out while you were away) stay listed with a Get button until you fetch them or leave.
  • Durability fixes: creating/joining/publishing persists immediately, and the daemon shuts down cleanly on SIGTERM — killing it no longer loses the last seconds of state.

103 tests passing. macOS app rebuilt; Windows build is compile-verified but still has not run on a real Windows machine (same caveat as v0.1.0). First-launch notes from v0.1.0 still apply (right-click, Open on macOS; SmartScreen on Windows).

iroh-drop 0.1.0

Choose a tag to compare

@chad chad released this 31 Jul 02:40

iroh-drop 0.1.0

Decentralized AirDrop: no accounts, no cloud, no registry. Peers find each other by link or on the local network; every recipient becomes a provider.

Downloads

Platform File Notes
macOS (Apple Silicon) iroh-drop-0.1.0-macos-arm64.zip SwiftUI app; unzip and move iroh-drop.app to Applications
Windows (x64) iroh-drop-0.1.0-windows-x64.zip egui app + daemon + CLI; unzip anywhere, run Drop.exe

First launch

  • macOS: unsigned build — right-click → Open the first time (or xattr -d com.apple.quarantine iroh-drop.app).
  • Windows: SmartScreen will warn for an unsigned exe — "More info" → "Run anyway". A firewall prompt is expected: iroh-drop talks QUIC/UDP to peers and mDNS on the LAN.

How sharing works

Send: drop files in the window → you get a drop1… link → send it any way you like. Receive: paste a link, or accept the card when someone on your network offers. Links work across the internet (encrypted relay fallback, no upload anywhere) and on the LAN (direct).

In this release

  • Daemon with drop-level persistence: your drops survive restarts, handles stay stable, drop.leave announces withdrawal and forgets
  • Role-enforced control API (observer / ui / control) over a user-private local channel (Unix socket / Windows named pipe)
  • macOS menu bar app with consent cards, onboarding, Share extension
  • Windows client (new): GUI + daemon + CLI, cross-compiled — compile-verified but not yet run on a Windows machine; report first-run issues
  • CLI with send/get/watch/nearby/rooms/QR
  • 100 tests passing, clippy clean

Full source: https://github.com/chad/iroh-drop