droplocal
v1.8.0
Published
Drop it local. Pick it up anywhere.
Maintainers
Readme
DropLocal shares text snippets and files across devices on the same local network, with no accounts and no cloud.
Install
Desktop app (macOS · Windows · Linux) — grab it from droplocal.app or the latest release.
CLI — nothing to install:
npx droplocal(or npm install -g droplocal for a permanent droplocal command — needs Node 18+)
Features
- One shared drop stream — notes and files interleaved, synced live to every device,
persistent across restarts (opt out with
--ephemeral) - Search the drop stream by note text or file name
- Optional PIN protection (
--pin 4471) and auto-expiry (--expire 60) - Short-lived invite links for PIN-protected sessions
- Drag-and-drop or paste-to-upload (screenshots paste straight from the clipboard)
- Connect card in the web UI: QR code + address so any device can onboard the next one
- Connection Doctor: interface, URL, mDNS, and local listener diagnostics with copyable debug info
- Installable web shell with service-worker caching where the browser allows it
- Per-file upload progress, copy/download/delete actions, plus bulk clear controls
- Multi-select → .zip/delete: tap file icons to select several, download as one archive or delete them together
- Markdown notes: headings, lists, bold, links, and code blocks render properly
- English, 简体中文, 日本語, 한국어, Español, Deutsch, and Français UI (auto-detected, switchable)
- Light/dark theme, mobile-first layout
- Friendly address via mDNS/Bonjour —
http://drop.localinstead of an IP (the QR code keeps using the IP so Android works too) - Automatic port: tries 80 first (portless URL), falls back to 3000+
- LAN URL + terminal QR code (CLI)
- Native tray controls and dashboard Drop Clipboard (Desktop app)
Quickstart (CLI)
npx droplocalCommon options:
droplocal -p 8080
droplocal --dir ./shared # default: ~/Downloads/DropLocal
droplocal --pin 4471 # other devices must enter this PIN
droplocal --expire 60 # auto-delete drops after 60 minutes
droplocal --ephemeral # wipe everything when the server stops
droplocal --interface en0 # prefer a network interface name or IP
droplocal --help
droplocal --versionWithout -p, DropLocal tries port 80 first (so the share URL is just
http://drop.local) and falls back to 3000+.
macOS note: the first run may trigger a Local Network permission prompt. Allow it — that's what lets other devices find
drop.localvia Bonjour. Everything still works via the IP URL / QR code if you decline.
Desktop App (Local Dev)
npm run desktop:install
npm run desktop:check
npm run desktop:test
npm run test:e2e
npm run desktop:devBuild installers/bundles:
npm run desktop:buildDesktop details live in apps/desktop/README.md.
Release Strategy
- Tagged releases (
v*) trigger cross-platform desktop builds via GitHub Actions. - Built artifacts are uploaded to GitHub Releases.
- CLI distribution remains via npm (
npx droplocal).
See:
docs/release/desktop-release.md.github/workflows/release-desktop.yml
Repository Structure
droplocal/
├── index.js # CLI app entrypoint/server
├── ui.html # Shared browser UI served by CLI + desktop backend
├── test/ # Node CLI and integration tests
├── e2e/ # Playwright browser smoke tests
├── apps/desktop/ # Tauri desktop app
│ ├── src/ # Desktop dashboard UI
│ └── src-tauri/ # Rust backend + tray + bundling config
├── landing/ # droplocal.app landing page (Vercel)
├── docs/
│ ├── droplocal-prd.md
│ ├── droplocal-distribution-prd.md
│ └── release/desktop-release.md
└── .github/workflows/API
REST
GET /- UIGET /api/info- app version and share URLsGET /api/diagnostics- local network diagnosticsPOST /api/invites- create a short-lived invite link for PIN-protected sessionsGET /api/snippets- list snippetsPOST /api/snippets- create snippetDELETE /api/snippets/:id- delete snippetGET /api/files- list filesPOST /api/files- upload filesGET /api/files/:id- download fileDELETE /api/files/:id- delete fileGET /api/files.zip?ids=a,b- download selected files as a zipDELETE /api/drops?type=all|notes|files&olderThanMinutes=60- bulk cleanupGET /api/status- runtime status
WebSocket
Endpoint: /ws
Events:
snippet:newsnippet:deletefile:newfile:deletedevice:count
Security Model
DropLocal assumes trusted LAN usage.
- No account system — optional PIN gate (
--pin) - No TLS by default
- Binds to your local network only
Do not expose DropLocal directly to the public internet.
Support
If DropLocal saves you a trip across the room, you can buy me a coffee ☕.
License
MIT (LICENSE)
