Special projects

DropOnce

Sends a file by a link and QR code that expire: over the local network, through a tunnel, via a relay or directly between apps with X25519 and ChaCha20-Poly1305 encryption.

Type
File transfer
Stack
Go · Wails · React
Code
Open on GitHub
Year
2026

A box with a one-time key

The file sits in a box, and the link is a key with a clock and a counter. The key opens the box until time runs out or the downloads are used up, then it breaks.

The key's bit and the copy of the file on its chuteBox, lock, route lever and the counter on the keyFour chutes: network, tunnel, relay, direct channelDropOnce sends a file by a link and QR code that expire. The box with the file is the app and the key is the link: 32 random bytes, of which only the hash is stored. The routes are explicit: the local network straight from the computer, a CloudPub tunnel, a relay the file is uploaded to, and a direct channel between two apps encrypted with X25519 and ChaCha20-Poly1305. A link stops working at expiry, on cancellation or after a set number of downloads, and the counter is reserved atomically, so two concurrent requests can’t exceed the limit. Here the limit is one download and the expiry is a 60-second demo clock.

Four routes

No transport is browser-friendly, serverless and reachable from every network at once. So the routes are explicit: the local network straight from the computer, a CloudPub tunnel, a relay the file is uploaded to, and a direct channel between two apps through an encrypting broker.

A link that burns

A link is 32 random bytes, and only its hash is stored. It stops working at expiry, on cancellation or after a set number of downloads. The counter is reserved atomically, so two concurrent requests can’t exceed the limit, and an interrupted download returns its reservation.

Under the hood

  • Direct channel: X25519, HKDF-SHA256, ChaCha20-Poly1305, counters against replayed frames.
  • Several files are packed into one temporary ZIP.
  • Local mode listens only on the chosen private address.
  • A relay of up to 50 GB; the file is deleted after the last download.
Code on GitHub

Shall we talk about your project?

Discuss your project