Local two-way file transfer between macOS and Android over Wi-Fi or Personal Hotspot — no internet, no cloud, no cables.
| Direction | How |
|---|---|
| Mac → Android | Drag a file onto HotDrop on Mac, scan the QR code on Android, tap Download |
| Android → Mac | Pick a file on Android, tap Upload — it lands in ~/Movies/HotDrop |
Transfers are resumable: if the connection drops mid-way, reconnect and tap Resume — it picks up from the last saved byte.
- macOS 12 Monterey or later
- Node.js 18 or later (download)
- Android device (any modern browser — Chrome recommended) on the same network
git clone https://github.com/vismaytiwari/hotdrop.git
cd hotdrop
npm installnpm startThis builds the TypeScript source and launches the Electron app.
Option A — Mac Personal Hotspot
- Open System Settings → General → Sharing
- Enable Internet Sharing (share from Wi-Fi/Ethernet → to Wi-Fi)
- Connect your Android phone to that hotspot
Option B — Shared Wi-Fi router Just connect both Mac and Android to the same Wi-Fi network.
- Launch HotDrop (
npm start) - Set a Password in the left sidebar (default:
hotdrop) - Optionally adjust Max receive (maximum file size Android can upload)
- Click Start session
- A QR code and URL appear — the app is now listening
- Open your Android camera app and scan the QR code
(or manually type the URL shown in the app into Chrome) - Android will show a security warning about the certificate — this is expected.
Tap Advanced → Proceed to [IP address] to trust the local self-signed certificate.
You only need to do this once per session. - Enter the password and tap Connect
- On Mac, drag a file onto the Mac → Android drop zone, or click Select file
- On Android, the file appears in the Download From Mac section
- Tap Download — the browser saves it to your Downloads folder
- On Android, scroll to the Send to Mac section
- Tap Choose file and select a file from your phone
- Tap Upload
- The file is saved to
~/Movies/HotDrop/on your Mac
- Tap Pause at any time during an upload
- Tap Resume to continue — progress is never lost
- If the connection drops, reconnect from step 3 and tap Resume
Click Apply & restart in the Mac sidebar to change settings, or close the app.
Press ⌘ Shift M to toggle the app between full window and a compact mini-player that shows live transfer progress.
Uploaded files from Android land in ~/Movies/HotDrop by default. The folder is created automatically.
- All traffic uses self-signed TLS (HTTPS on the local network) — this is why Android shows a certificate warning
- Each session generates a fresh 256-bit random token — the QR code URL contains it
- Login is rate-limited: 5 failed attempts trigger a 30-second lockout
- Only one Android client can be connected per session
- Auth cookies are
HttpOnly,Secure,SameSite=Strict - The app only listens on your local network interface — it is not reachable from the internet
npm run dist:macProduces a signed .dmg and .zip in the release/ folder.
npm test| Layer | Technology |
|---|---|
| Desktop shell | Electron |
| Language | TypeScript |
| Local server | Express 5 + Node https |
| TLS | selfsigned (self-signed cert generated at start) |
| QR codes | qrcode |
| Tests | Vitest |
MIT