Peer-to-peer encrypted file sharing that leaves no trace.
Drop a file. Get some links. Send each link to a different person. They help share it. Everyone closes their tabs? The file is gone forever. No server ever had it.
That's it. No accounts. No cloud. No "we respect your privacy" nonsense — there's simply nothing to store.
You Your friends Someone downloading
│ │ │
├── Drop file │ │
├── Get 3 links ────────────┼──► Each person opens a link │
│ ├──► They cache their part │
│ │ │
│ │ ◄────────────────────────┼── Connects to everyone
│ │ ────► Sends chunks ──────┼──► Assembles file
│ │ │
└── Close tab └──► Close tabs │
│
✨ File no longer exists anywhere ✨
- Files are split into chunks and encrypted in your browser
- Chunks transfer directly between browsers (WebRTC)
- The server only helps browsers find each other — it never sees your files
- When everyone leaves, the file is unrecoverable
- 🔒 End-to-end encrypted — AES-256-GCM, keys never touch a server
- 🌐 True P2P — Direct browser-to-browser transfers
- 📦 No file size limits — Limited only by browser memory
- 🧩 Split across peers — No single person has the full file
- 🕳️ Ephemeral — Close the tabs, file is gone
- 🚫 No accounts — No signup, no tracking, no cookies
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Run production server
npm startDevelopment runs the Vue frontend on Vite's dev server and the signaling server on port 3001.
- Drop a file on the homepage
- Choose how many parts to split it into (2-5)
- Click "Generate Share Links"
- Send each link to a different person
- Keep your tab open until others have cached their parts
- Open the link someone sent you
- Keep the tab open
- That's it — you're helping share the file
- Paste any of the share links on the homepage
- Wait for chunks to download from available seeders
- Save the file when complete
The only server component is the signaling server — it just helps browsers find each other. You can run your own:
npm run build
npm startSet PORT environment variable if needed (default: 3001).
Q: What does the server see?
Room IDs (random strings) and which peers connected. No file names, no file contents, no encryption keys.
Q: Can someone with 2 out of 3 links recover the file?
They'd have the encryption key (it's in every link) but only ~66% of the chunks. The file would be incomplete/corrupted.
Q: What if all seeders leave?
The file is gone. This is intentional.
Q: Is this like torrents?
Similar concept, but everything happens in the browser and nothing persists. No trackers, no DHT, no permanent swarm.
Q: Should I use this for important backups?
Absolutely not. This is for transfers, not storage. Once everyone leaves, the file is unrecoverable.
- Frontend: Vue 3, TypeScript, Tailwind CSS, DaisyUI
- Signaling: Node.js, WebSocket
- P2P: WebRTC DataChannels
- Crypto: Web Crypto API (AES-256-GCM)
- Caching: Origin Private File System (OPFS)
- Requires at least one seeder to be online for downloads
- WebRTC may struggle with strict corporate firewalls
- Large files need sufficient browser memory
- No persistence — by design
PRs welcome! Please keep the "no server storage" principle intact.
MIT — do whatever you want.
Built for sharing things that shouldn't stick around.



