A free, secure, open-source file sharing tool.
Transfer files across your local network directly from device to device using WebRTC, or upload and share via link.
OpenDrop lets you share files instantly — no accounts, no cloud storage, no middleman. It works in two modes:
- Same-Network Transfer — Peer-to-peer, directly between devices on the same Wi-Fi. Files never touch any server.
- Share via Link — Upload a file and get a shareable download link that expires in 24 hours.
OpenDrop is split into two parts:
| Part | Description |
|---|---|
| Client (Frontend) | A static HTML/CSS/JS site. Manages the UI and WebRTC peer-to-peer connections. Hosted on GitHub Pages. |
| Server (Backend) | A lightweight Node.js WebSocket signaling server. Matches devices on the same network and brokers the initial WebRTC handshake. Also handles file uploads for shareable links. |
Privacy note: For local transfers, your files are sent entirely peer-to-peer over WebRTC Data Channels and never touch the signaling server.
- Open OpenDrop on two devices connected to the same Wi-Fi network.
- The devices will auto-discover each other — no pairing or setup needed.
- Click a peer's name to select a file and send it directly (peer-to-peer, no server involved).
- Click "Share via Link" on any device.
- Select a file to upload — you'll receive a shareable download link.
- Send the link to anyone. The link expires after 24 hours.
Since the frontend uses native ES Modules, no bundler or build tool is required.
Make sure you have the following installed before getting started:
| Tool | Version | Purpose |
|---|---|---|
| Node.js | v16 or higher | Runs the signaling server |
| npm | Comes with Node.js | Installs server dependencies |
| Python 3 | v3.x | Serves the static frontend locally |
You can verify your installations by running:
node --version
npm --version
python3 --versiongit clone https://github.com/DhanushNehru/OpenDrop.git
cd OpenDropThe signaling server has its own package.json. Navigate to the server directory and install its dependencies:
cd server
npm installThis installs all required Node.js packages listed in server/package.json (such as the WebSocket library).
Note: The frontend has no dependencies to install — it runs as plain HTML/CSS/JS in the browser.
From inside the server directory, start the server:
node index.jsYou should see output confirming the server is running (e.g., Signaling server listening on port 3000).
Keep this terminal window open. The signaling server must be running for peer discovery and file-link uploads to work.
Open a new terminal window, navigate to the client directory, and start a local HTTP server using Python:
cd client
python3 -m http.server 8080Then open your browser and go to:
http://localhost:8080
Why not just open
index.htmldirectly? Because the frontend uses ES Modules (type="module"), which browsers block when loaded viafile://URLs due to CORS restrictions. A local HTTP server is required.
By default, the frontend is configured to point to the production signaling server. For local development, update the SIGNALING_URL variable in /client/main.js to point to your local server:
// client/main.js
const SIGNALING_URL = "ws://localhost:3000"; // ← change this for local devRevert this change before pushing to production.
# Terminal 1 — Start the signaling server
git clone https://github.com/DhanushNehru/OpenDrop.git
cd OpenDrop/server
npm install
node index.js
# Terminal 2 — Serve the frontend
cd OpenDrop/client
python3 -m http.server 8080Then open http://localhost:8080 in your browser.
- Node.js 16+ and npm installed
- Server dependencies installed in the
serverfolder (npm install)
From the project root:
cd server
npx vitest runOr run the npm test script (watch mode):
cd server
npm testThis repository includes a GitHub Action to automatically deploy the client folder to GitHub Pages.
- Go to your repository Settings on GitHub.
- Navigate to Pages in the left sidebar.
- Under Build and deployment, set the source to GitHub Actions.
- The site will automatically deploy on every push to
main.
You can deploy the backend for free using Koyeb or Render.
-
Log into Koyeb or Render and select "New Web Service".
-
Connect your GitHub repository.
-
Use the following build settings:
Setting Value Root Directory serverBuild Command npm installStart Command node index.js -
Once deployed, copy the generated URL (e.g.,
wss://your-app-name.koyeb.app). -
Update the
SIGNALING_URLvariable in/client/main.jswith your new URL:const SIGNALING_URL = "wss://your-app-name.koyeb.app";
-
Push to
main— the GitHub Action will redeploy the frontend automatically.
This project is licensed under the Apache License 2.0. See LICENSE for details.
Attribution matters:
- If you redistribute or create derivatives, keep the license and notices intact.
- Please keep the
NOTICEfile (or equivalent visible attribution) with your distribution.
Community request (not a legal requirement):
- If you reuse OpenDrop, please mention the original project and author.git
- If possible, let the author know by opening an issue or discussion in this repository.git