| ### 🚀 Core - **Zero Storage** — Files relay through memory, never saved to disk - **Any File Size** — Chunked streaming handles files of any size - **Real-time Progress** — Live progress bars for sender & receiver - **Drag & Drop** — Drop files anywhere to send instantly - **Multi-file Queue** — Queue up multiple transfers with auto-sequencing | ### 🔒 Security - **Encrypted Auth** — Bcrypt-hashed passwords + JWT sessions - **Secure WebSockets** — Authenticated Socket.IO connections - **Transfer Approval** — Recipients must accept before any data flows - **No Cloud** — Everything stays on your local network - **No Tracking** — Zero telemetry, zero analytics |
| ### 💬 Communication - **Live Chat** — Real-time messaging between devices - **Typing Indicators** — See when someone is typing - **Desktop Notifications** — Browser push alerts for incoming files - **Presence System** — See who's online in real-time | ### 🎨 Experience - **Premium Dark UI** — Glassmorphism design with smooth animations - **File Preview** — Preview images, videos, audio, PDFs & text - **Responsive Design** — Works on desktop, tablet & mobile - **Transfer History** — Activity feed of all transfers - **Network Stats** — Live transfer count & bandwidth stats |
# Clone the repo
git clone https://github.com/isiliconx/nextdrop.git
cd nextdrop
# Install dependencies
npm install
# Start the server
npm start
That’s it! NextDrop will print the URL to access from any device on your network:
_ _ _ ____
| \ | | _____ _| |_| _ \ _ __ ___ _ __
| \| |/ _ \ \/ / __| | | | '__/ _ \| '_ \
| |\ | __/> <| |_| |_| | | | (_) | |_) |
|_| \_|\___/_/\_\\__|____/|_| \___/| .__/
|_|
✓ NextDrop running on:
→ Local: http://localhost:3000
→ Network: http://192.168.1.100:3000
Open the network URL on any device connected to your LAN — phones, laptops, tablets, anything with a browser.
Copy .env.example to .env and customize:
cp .env.example .env
| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
Server port |
JWT_SECRET |
(random) | Secret key for JWT tokens |
JWT_EXPIRY |
24h |
Token expiration time |
Tip: For production, always set a strong random
JWT_SECRET:node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
┌──────────┐ ┌──────────────┐ ┌──────────┐
│ Sender │────▶│ NextDrop │────▶│ Receiver │
│ Browser │ │ Server │ │ Browser │
│ │ │ (relay only) │ │ │
│ Chunk 1 ─┼────▶│─ forward ───▶┼────▶│ Chunk 1 │
│ Chunk 2 ─┼────▶│─ forward ───▶┼────▶│ Chunk 2 │
│ Chunk N ─┼────▶│─ forward ───▶┼────▶│ Chunk N │
│ │ │ │ │ ═══════ │
│ │ │ 🚫 No Disk │ │ ✓ File! │
└──────────┘ └──────────────┘ └──────────┘
| Layer | Technology |
|---|---|
| Server | Node.js + Express |
| Real-time | Socket.IO 4.x |
| Auth | JWT + bcryptjs |
| Frontend | Vanilla HTML/CSS/JS |
| Storage | None (relay only) |
nextdrop/
├── server/
│ ├── index.js # Express + Socket.IO server
│ ├── auth.js # Authentication routes & JWT
│ └── socketHandlers.js # Transfer relay, chat, presence
├── public/
│ ├── index.html # SPA shell
│ ├── css/
│ │ └── style.css # Premium dark glassmorphism theme
│ └── js/
│ ├── app.js # App controller & socket management
│ ├── auth.js # Login/register UI
│ ├── fileTransfer.js # Chunked transfer engine
│ ├── chat.js # Real-time chat
│ └── dashboard.js # Users, stats & activity
├── package.json
├── .env.example
├── LICENSE
└── README.md
Contributions are welcome! Feel free to open issues and pull requests.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License — see the LICENSE file for details.