Zero seeding
Built on librqbit's disable-upload. No incoming BitTorrent listener, and the swarm session is torn down before serving starts.
v1.0.0 · open source · public domain · written in rust
Leech a torrent on a server. Encrypt it. Hand it to one client, peer to peer. Leave nothing behind.
$ brew install asheliahut/tap/deaddropOutput abridged for illustration.
// how it works
A server downloads a torrent without seeding it, encrypts the result, then hands the files to one client over iroh: peer-to-peer QUIC with NAT traversal and relay fallback.
The server downloads the torrent with uploading disabled. Nothing is seeded, ever.
The swarm session stops. Each file is age-encrypted to a new key, and the plaintext is deleted.
A ticket and a key are printed. The client connects peer to peer over iroh and pulls the ciphertext.
The client verifies and decrypts. The single-use server shuts down, or wipes the data and waits.
// features
Built on librqbit's disable-upload. No incoming BitTorrent listener, and the swarm session is torn down before serving starts.
Every file is age-encrypted with a fresh per-torrent key that never touches the server's disk. File names are hidden too.
iroh punches through NATs and falls back to relays, so neither side needs an open port.
Every chunk is checked against its BLAKE3 hash. Tampering or a wrong key fails loudly. No partial file is left under its real name.
One client, one download, then the server shuts down, or wipes the data and waits for the next drop.
Point a running server at a new torrent with deaddrop reset. The old ticket dies, and the new one gets a new key.
Push tickets to Discord or any webhook, with per-notifier control over who also gets the key.
<ticket> <key> on stdout, everything else on stderr. TOML config, env vars, shell completions.
// what the wire sees
Only ciphertext goes into the blob store and over iroh. Collection entries are named 0,1, 2… and the real file names live in an encrypted manifest. The key exists only in the server's memory.
What it doesn't hide: file sizes, file count, and the fact that a transfer happened. Plaintext exists on the server's disk while the torrent downloads. Read the threat model →
hover or tap to decrypt: needs AGE-SECRET-KEY-1…
// install
On macOS and Linux, Homebrew is the easiest way: it installs the prebuilt binary with shell completions set up. Prebuilt binaries for Linux (gnu + musl, x86_64 + aarch64), macOS (Intel + Apple Silicon) and Windows (x86_64 + ARM) are attached to every GitHub release, with SHA256SUMS.
# macOS and Linux, Intel + ARM
brew install asheliahut/tap/deaddropVERSION=v1.0.0
TARGET=x86_64-unknown-linux-musl # or aarch64-unknown-linux-musl, *-linux-gnu
curl -LO "https://github.com/asheliahut/deaddrop/releases/download/$VERSION/deaddrop-$VERSION-$TARGET.tar.gz"
tar -xzf "deaddrop-$VERSION-$TARGET.tar.gz"
sudo install "deaddrop-$VERSION-$TARGET/deaddrop" /usr/local/bin/VERSION=v1.0.0
TARGET=aarch64-apple-darwin # or x86_64-apple-darwin (Intel)
curl -LO "https://github.com/asheliahut/deaddrop/releases/download/$VERSION/deaddrop-$VERSION-$TARGET.tar.gz"
tar -xzf "deaddrop-$VERSION-$TARGET.tar.gz"
sudo install "deaddrop-$VERSION-$TARGET/deaddrop" /usr/local/bin/$v = "v1.0.0"
$t = "x86_64-pc-windows-msvc" # or aarch64-pc-windows-msvc
Invoke-WebRequest "https://github.com/asheliahut/deaddrop/releases/download/$v/deaddrop-$v-$t.zip" -OutFile deaddrop.zip
Expand-Archive deaddrop.zip -DestinationPath .# needs Rust 1.95+
cargo install --locked --git https://github.com/asheliahut/deaddropThen: quick start · config file ·shell completions
// built on