I was looking for an ideal solution for transferring files between devices when I found PairDrop, a tool I'd been aware of but never utilized until now. However, my recent need led me to the issue tracker, where I discovered a feature request seeking support for sending plain text or "chat" messages. Although the developer was initially hesitant to add this functionality, they suggested an alternative project - FileDrop, which already offers this capability.
While PairDrop is amazing, FileDrop allows you to send both files and text quickly to another device.
What is FileDrop?
FileDrop is a self hosted, end-to-end encrypted, peer-to-peer file transfer platform.

Built on React and Node.js, here are the core features.
FileDrop Core Features
- Fully end-to-end encrypted, including metadata and chat.
- Peer-to-peer wherever possible (using WebRTC).
- Simple chat function with copy and paste.
- Minimalist user interface.
- Available as a Progressive Web Application.
Install FileDrop using Docker Compose
Since FileDrop uses an obscure way to launch and build the Docker image, I decided to simplify the process by building my own image and hosting it on Docker Hub. This way you can just grab the compose configuration below and run with it.
services:
filedrop:
image: itsnoted/filedrop
environment:
- WS_HOST=0.0.0.0
- WS_APP_NAME=${APP_NAME}
- WS_ABUSE_EMAIL=${ABUSE_EMAIL}
- WS_USE_X_FORWARDED_FOR=${USE_X_FORWARDED_FOR}
- WS_REQUIRE_CRYPTO=1
- TURN_MODE=hmac
- TURN_SERVER=turn:(hostname)
- TURN_USERNAME=filedrop
- TURN_SECRET=${TURN_SECRET}
ports:
- '5000:5000'
coturn:
image: coturn/coturn
command:
- --log-file=stdout
- --use-auth-secret
- --static-auth-secret=${TURN_SECRET}
- --no-multicast-peers
- --no-tls
- --no-dtls
- --no-software-attribute
- --fingerprint
- --no-cli
network_mode: host
depends_on:
- filedropNotice there are no mounts? That's because no files are saved on the server! It uses coturn to simply relay files from one device to another. You can read about the FileDrop Environment variables here and what they do.
Using FileDrop
For secure file sharing, it's best to use FileDrop over HTTPS. (I use Pangolin for reverse proxy) When you visit your designated FileDrop domain, you'll be assigned a one-time, unique identifier displayed in the URL. To initiate transfers between devices, share this same URL along with the unique ID with another device and begin sending files or text messages.

Where do my files go after I send them through the service?
To the other device. Sometimes the (encrypted, since WebRTC uses encryption by default) data goes through the TURN server I run. It's immediately discarded after being relayed. File metadata also is not saved.
What is Cotrun?
Coturn is a free open source implementation of TURN and STUN Server. The TURN Server is a VoIP media traffic NAT traversal server and gateway.
Final Notes and Thoughts
This was a quick one. FileDrop scratches an itch for a very niche situation where I needed a way to send both text and files to other devices. It works very well for what it is and I am glad I stumbled upon this app!
Be sure to drop a star on the FileDrop Github repo!

Discussion