I wanted a centralized place to send links, images or files via my personal laptop, work laptop or smartphone (to be integrated), and fetch those from any device, without relying on browser extensions or third-parties. drop is that. Drop a file/link/image from any device, pick it up from any other device.
Requires Go 1.22+.
git clone https://github.com/william/drop && cd dropServer:
cp config.example.toml config.toml # edit data_dir, etc.
make install-server # builds + installs systemd service
drop-server keys create my-laptop # prints dk_... token for each clientClient:
make install-client # builds + symlinks to /usr/local/binThen create ~/.config/drop/config.toml:
server = "https://drop.yourdomain.com"
token = "dk_your_token"To upgrade later: git pull && make deploy (server) or make install-client (client).
# store a file or image
drop photo.png
drop document.pdf --tag work
# store a link
drop https://example.com/article --tag reading
# list stored items
drop list
drop list --type file
drop list --tag work
drop list --from 2024-01-01 --limit 20
# retrieve an item
drop pick <id>
drop pick <id> -o ~/Downloads
# pipe input
cat file.txt | drop - --name notes.txt
# audit log
drop log
drop log --limit 50drop-server serve
drop-server keys create <name>
drop-server keys list
drop-server keys revoke <name>
drop-server keys restore <name>
drop-server delete <id>
drop-server delete --type files --older-than 30d
drop-server status| Key | Default | Description |
|---|---|---|
address |
0.0.0.0:8000 |
Listen address |
data_dir |
./drop-data |
Storage directory |
max_upload_size |
100MB |
Per-upload size limit |
max_storage |
10GB |
Total storage pool |
min_disk_space |
1GB |
Reject uploads below this free space |
rate_limit |
60 |
Requests per device per minute |
validate_content |
true |
Verify file extension matches content |
MIT