This commit introduces support for resumable file transfers when using the 'Save to Directory' feature.
Key changes:
- The WebRTC protocol is updated to include an 'offset' in the 'fileRequest' message.
- 'FileReceiver' now checks for partially downloaded files in the selected directory. If a partial file is found, it requests to resume the transfer from the offset of the existing file size. It uses '{ keepExistingData: true }' to append to the file.
- 'FileSender' now handles requests with an 'offset' and uses 'file.slice(offset)' to send only the remaining data.
- Progress calculation is adjusted to reflect the resumed download state.
This provides a more robust user experience for large file transfers, allowing recovery from interruptions like network loss or accidental tab closure.
PrivyDrop - A Privacy-Focused, WebRTC-Based File Sharing Tool
PrivyDrop(formerly SecureShare) is an open-source, peer-to-peer (P2P) file and text sharing tool built on WebRTC. It requires no server-side data relay; all data is transmitted directly between browsers, ensuring end-to-end encryption for maximum privacy and security.
We believe everyone should have control over their own data. PrivyDrop was created to fulfill this vision: a simple, fast, and private sharing solution.
Try it Live » | GitHub Repository »
✨ Key Features
- 🔒 End-to-End Encryption: Leverages P2P direct connections via WebRTC. All files and text are transferred directly between browsers without passing through any central server.
- 📂 File & Folder Transfer: Supports transferring multiple files and entire folders.
- ⚡ Real-time & Efficient: Displays real-time transfer progress and automatically calculates transfer speed.
- 📝 Rich Text Clipboard: Supports editing and sending formatted text, not just files.
- 🔗 Convenient Sharing: Easily share a room and establish a connection via a link or QR code.
- 📱 Multi-Device Support: Responsive design supports both desktop and mobile browsers.
- 🌐 Internationalization: Supports multiple languages, including English and Chinese.
🛠️ Tech Stack
- Frontend: Next.js 14, React 18, TypeScript, Tailwind CSS, shadcn/ui
- Backend: Node.js, Express.js, TypeScript
- Real-time Communication: WebRTC, Socket.IO
- Data Storage: Redis
- Deployment: PM2, Nginx, Docker [WIP]
🚀 Quick Start (Full-Stack Local Development)
Before you begin, ensure your development environment has Node.js (v18+), npm, and a running Redis instance installed.
-
Clone the Project
git clone https://github.com/david-bai00/PrivyDrop.git cd PrivyDrop -
Configure and Start the Backend Service
cd backend npm install # Copy the development environment file, then modify .env.development as needed cp .env_development_example .env.development npm run dev # Starts by default at http://localhost:3001 -
Configure and Start the Frontend App (in a new terminal window)
cd frontend pnpm install # Copy the development environment file, then modify .env.development as needed cp .env_development_example .env.development pnpm dev # Starts by default at http://localhost:3002 -
Start Sharing Open
http://localhost:3002in your browser to access the application.
🗺️ Roadmap
We have a public roadmap that outlines our vision for the future and our current priorities. It's a great place to see what we're working on or to find areas where you can contribute.
➡️ Check out the Project Roadmap
📚 Documentation
We provide detailed documentation to help you dive deeper into the project's design and deployment details:
- Overall Project Architecture: Understand how all components of the PrivyDrop system work together.
- Frontend Architecture Deep Dive: Explore the frontend's code structure, state management, and core logic.
- Backend Architecture Deep Dive: Dive into the backend's code structure, signaling flow, and Redis design.
- Deployment Guide: Learn how to deploy the complete PrivyDrop application in a production environment.
🤝 Contributing
We warmly welcome contributions of all forms! Whether it's reporting a bug, suggesting a feature, submitting code or adding a star, your help is invaluable to PrivyDrop's growth. Please read our Contribution Guidelines to start your journey.
We have a Code of Conduct that all contributors are expected to follow. Please be sure to review it before participating.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.

