Pairdrop local File Transfer
Pairdrop is a web-based application which uses the WebRTC protocol to provide a service in which you can transfer files in a Peer to Peer manner between any device running Snapdrop on your Lan (or extended Tailscale LAN)
Pairdrop is a fork of Snapdrop
How secure is Pairdrop? It will not upload your files to any server. Pairdrop only uses a peer-to-peer (P2P) connection if WebRTC is supported by the browser.
As Pairdrop finds the devices on the network and transfers the files locally via wifi the files are sent using WebRTC, your transferred files (or chats) will be encrypted while being sent between the devices. In browsers that don’t support WebRTC, Pairdrop uses a Web Sockets fallback to transfer files and connects the clients with a stream.
Pairdrop is a web-based application, so you don't need to install it. You only need a web browser, for example, Google Chrome or Mozilla Firefox. It is also self-hostable. You can host it on your computer and share files instantly with other devices.
What's it based on?
At a high level, Snapdrop is basing itself on the functionality of the Apple AirDrop solution.
However, it's doing this as a much more cross-platform solution with as low a footprint as possible. Keeping the software simple seems to be the ethos of the developer which makes sense.
Do I need to self-host it?
The rest of this article will be about self-hosting Snapdrop within your local network, however, you don't need to do this. The primary site
has the service available and have tested it in several scenarios it does honour the LAN segmentation so you can't see other people's devices.
Other "unofficial" releases are listed on the Github FAQ Page
What is the difference between Pairdrop and Snapdrop
As a fork of Snapdrop, Pairdrop offers a few notable enhancements:
Pair devices via 6-digit code or QR-Code
Pair devices outside your local network or in complex network environment (public Wi-Fi, company network, Apple Private Relay, VPN etc.).
Connect to devices on your mobile hotspot.
Paired devices will always find each other via shared secrets even after reopening the browser or the Progressive Web App
You will always discover devices on your local network. Paired devices are shown additionally.
Paired devices outside your local network that are behind a NAT are connected automatically via the PairDrop TURN server.
How do I self-host it?
While this can be and does work on public sites, hosting it yourself is the preferred way to go where possible. Providing you much more control over the process.
The simplest way to get Pairdrop running is using a container.
The instructions for Pairdrop are quite simple and it seems like its simpler than Snapdrop
I made use of the Linux Server image and NGINX Proxy manager to provide SSL to the service internally
💡 I've used the docker command for a wider audience, I use Podman on Fedora 38 to run these commands, just substitute podman for docker with the commands
The full options and instructions for the /linuxserver/snapdrop image can be found here
The docker run which I used was
podman run --name=pairdrop -e PUID=1000 -e PGID=1000 -e TZ=Etc/UTC -e WS_FALLBACK=true -e DEBUG_MODE=false -p 3000:3000 --restart unless-stopped lscr.io/linuxserver/pairdrop:latest
What you may notice immediately is the container is completely self container. There is no externally mapped volume.
If you'd rather use docker compose
- PUID=1000 # UID to run the application as
- PGID=1000 # GID to run the application as
- WS_FALLBACK=false # Set to true to enable websocket fallback if the peer to peer WebRTC connection is not available to the client.
- RATE_LIMIT=false # Set to true to limit clients to 1000 requests per 5 min.
- TZ=Etc/UTC # Time Zone
- 127.0.0.1:3000:3000 # Web UI
Once the image has downloaded and is running
You will see something like this
1795fa1cf9ca lscr.io/linuxserver/pairdrop:latest 20 mins ago Up 20 mins 0.0.0.0:3000 pairdrop
To confirm if the service started correctly run
docker logs -f 1795fa1cf9ca
This should display
To support the app dev(s) visit:
To support LSIO projects visit:
User UID: 1000
User GID: 1000
[custom-init] No custom files found, skipping...
> firstname.lastname@example.org start
> node index.js --include-ws-fallback
PairDrop is running on port 3000
At this point it's possible to open
And Snapdrop will work.
Use NGINX Proxy manager for https://
I've written a post on setting up NGINX Proxy manager here
Once installed and running add a new proxy host
Ensure the WebSockets support is enabled or you'll see "connection issue" errors on the client.
On the SSL Side select the certificate you've setup
Select Force SSL
This stage is done, the last thing to do is to set up your local DNS to point your URL to the NPM server
Run the App
Open the URL
This will present the interface, a feature I like that SnapDrop should support as well is the ability to rename the hosts
By default, both Pairdrop and Snapdrop will assign a random 2-word name to your host.
Pairdrop allows you to put actual identifiable names on the Icon which appears
There is an Andriod app available which provides the ability to share files to Pairdrop from other apps.
💡 I can't go over any iPhone support as I don't have one.
Download, install and Open the app and you'll be asked to provide the public Pairdrop or Snapdrop or a custom URL for your own server.
Select custom URL and you will be presented with a dialog box where you'll enter the internal URL for your own server.
Click on OK and a quick verification will take place
The next step provides some instructions on how the app works.
Click on Finish and the Interface will open
As the App is basically a wrapper for the webpage, the ability to rename the local device is available.
I can see my desktop from within the Android app and my Android app within the desktop app
How do I use Pairdrop?
Click once on the device you want to share a file with
Select the file you want to share
On the remote end, a popup will be presented
Once accepted the file will transfer over.
A photo from a phone took mere seconds to transfer.
Long pressing on a remote server on the Android app or a long click on the desktop app will start a secure chat between 2 devices as well.
💡 This has been a useful note taking feature and easier to use than Operal Flow
Not Limited to 2 devices
The examples I've outlined here might imply that only 2 devices could be listed within Pairdrop, this is not the case I've tested this with 6 desktops and it works fine.
How to use it
If my words are confusing you, there are a couple of good videos here which mainly focus on Snapdrop
There is a good video for NGINX Proxy Manager here
I love this service, it's quick and easy to get set up and its simple to use. I find myself copying files reasonably often between my phone and desktop (usually photos or videos)
It's also nice to see the service running over Tailscale as well making this really useful when I'm out and about.
There are words about a PWA which I can get working on Snapdrop but can't on Pairdrop