quickdrop
v2.0.1
Published
Instant file transfers over LAN or internet — no accounts, no cloud, no friction, secure.
Readme
quickdrop
Instant file transfers over LAN or internet — no accounts, no cloud, no friction, secure.
quickdrop receive
quickdrop send ./photos --to AB3C4D7E:X9K2Install
npm install -g quickdropOr run without installing:
npx quickdrop helpHow it works
On the receiving machine:
$ quickdrop receive ./downloads
quickdrop · receive
────────────────────────────────────────────
LAN code AB3C4E7E:X9K2 ← same network
Tunnel code quick-fox-42:X9K2 ← anywhere
Password X9K2 ← new every session
────────────────────────────────────────────
Waiting for sender… (Ctrl+C to stop)
On sender: quickdrop send <dir> --to AB3C4E7E:X9K2On the sending machine — paste the combined code, zero prompts:
$ quickdrop send ./photos --to AB3C4E7E:X9K2
quickdrop · send
────────────────────────────────────────────
3 files found in /photos
────────────────────────────────────────────
✓ DSC_001.jpg (4.20 MB, 11.3 MB/s)
✓ DSC_002.jpg (3.85 MB, 12.1 MB/s)
✓ raw/DSC_003.cr2 (18.40 MB, 11.8 MB/s)
────────────────────────────────────────────
✓ 3 files • 26.4 MB • 2.3s • 11.7 MB/sThe combined code AB3C4E7E:X9K2 encodes the address and password in one string — no prompts at all on the sender side.
Commands
quickdrop receive [dir] [options]
Start listening for an incoming transfer. Saves files into dir (defaults to the current directory). Exits after one transfer.
| Option | Description |
|--------|-------------|
| --keep | Keep waiting for more transfers after each one |
quickdrop send <dir> [options]
Send all files in dir to a receiver.
| Option | Description |
|--------|-------------|
| --to <code\|contact> | Combined code AB3C4E7E:X9K2 (no password prompt), LAN code AB3C4E7E, tunnel subdomain quick-fox-42, or saved contact name mypc |
| --password <pw> | Provide password separately (skips prompt; not needed with combined code) |
quickdrop contacts
List all saved contacts.
quickdrop contacts # list
quickdrop contacts remove <name> # delete
quickdrop contacts rename <old> <new> # renameContacts are stored in ~/.quickdrop/contacts.json.
quickdrop help
Print full usage information.
quickdrop --version
Print the installed version.
Address types
| What you type | Meaning |
|---------------|---------|
| AB3C4E7E:X9K2 | Combined LAN code + password — paste from receiver, zero prompts |
| quick-fox-42:X9K2 | Combined tunnel code + password |
| AB3C4E7E | LAN code only (IP + port encoded as 8 base-36 chars) |
| quick-fox-42 | Internet tunnel subdomain |
| mypc | Saved contact name |
Connectivity
| Scenario | What's used | |----------|-------------| | Same WiFi / LAN | Direct TCP — fast, no internet required | | Different networks | localtunnel WebSocket tunnel — works anywhere |
Quickdrop automatically sets up both and shows you both codes. Use whichever applies.
After a transfer
The sender will offer to save the address as a named contact:
Save "192.168.1.42" as a contact? Name (Enter to skip): mypc
✓ Saved! Next time: quickdrop send ./folder --to mypcOn the next transfer you can just do:
quickdrop send ./folder --to mypc --password X9K2Or save the combined code if the receiver uses a persistent tunnel subdomain.
Requirements
- Node.js 18+
- No other dependencies beyond
wsandlocaltunnel
Security
All transferred data is encrypted end-to-end with AES-256-GCM, which provides both confidentiality and integrity (any tampering is detected and the transfer is aborted).
The session password is never sent over the wire. Instead, both sides derive a 256-bit key from the password using scrypt (N=16384, r=8, p=1), which makes brute-force attacks expensive even against the short 4-character password. Authentication is done via an HMAC-SHA256 proof-of-key handshake — the receiver rejects the connection if the proof doesn't match.
Each encrypted message uses a fresh random IV, so identical files produce different ciphertext every time.
The password changes every session (shown as X9K2 in the examples). If you use the combined code AB3C4E7E:X9K2, it encodes both the address and the one-time password, so nothing needs to be typed manually.
License
ISC
