Secure local file transfer over WiβFi with optional Bluetooth forwarding
A beautiful, local-first app that lets you safely transfer text and files from any device on your network to a Bluetooth-connected device. Perfect for air-gapped systems, crypto hardware, and secure transfers.
- π¨ Beautiful Neumorphism UI with light/dark themes
- π Local-first & Secure - no cloud, no external calls
- π± Cross-platform - works on any device with a browser
- π Device Discovery
- WiβFi Direct host discovery (LAN)
- Bluetooth LE scanning (when in BT mode)
- π Real-time Queue - monitor transfer progress
- π¬ Chat Tab - realβtime chat between connected clients
- π’ Broadcast Mode - host can broadcast text/files to all listeners
- π― Connection Modes - single device or broadcast to multiple
- β‘ Fast & Lightweight - minimal dependencies
- Node.js 18+
- Bluetooth support on your system (for real transfers)
- Network access between devices
-
Clone the repository
git clone https://github.com/ivaavimusic/ColdSend.git cd ColdSend -
Install dependencies
npm install
-
Start the server
npm run dev
-
Open the app
- Local: http://localhost:4000
- Network: http://YOUR_IP:4000 (e.g., http://192.168.1.50:4000)
ColdSend uses a host-client model:
-
Host Device (runs ColdSend server):
- Your main computer/laptop with Bluetooth
- Runs the Node.js server
- Connects to target Bluetooth devices
-
Client Devices (send files):
- Any device with a web browser
- Phones, tablets, other computers
- Connect via Wi-Fi to the host's IP
# On your main computer (with Bluetooth)
npm run dev
# Server starts at http://localhost:4000- Connect client devices to the same Wi-Fi network
- Open
http://HOST_IP:4000in their browsers - Find your host IP with:
ipconfig(Windows) orifconfig(Mac/Linux)
- Go to Devices tab on the host
- Click Scan to discover nearby Bluetooth devices
- Click Connect on your target device
- Device appears in "Connected Devices"
- From any device, open Chat to liveβmessage other connected clients
- Toggle Broadcast to send to all listeners in real time (via SSE)
- Use Send tab for classic text/file sending to host (and optionally BT)
- Monitor progress in Queue tab
[Host Computer] ββ [Wi-Fi Router] ββ [Client Devices]
β
[Bluetooth Device]
[Host Computer with Hotspot] ββ [Client Devices]
β
[Bluetooth Device]
To create a hotspot:
- Windows: Settings β Network & Internet β Mobile hotspot
- macOS: System Preferences β Sharing β Internet Sharing
- Linux: Network settings β Wi-Fi Hotspot
Copy .env.example to .env and customize:
# Server Configuration
PORT=4000 # Server port
HOST=0.0.0.0 # Bind to all interfaces
MAX_UPLOAD_BYTES=52428800 # 50MB upload limit
# Transfer Adapter (default WiβFi Direct)
TRANSFER_ADAPTER=wifi-direct # wifi-direct | bluetooth
# Bluetooth Configuration (when BT is selected)
BLUETOOTH_ADAPTER=noble
# BLE Settings (optional)
BLE_TARGET_NAME=MyDevice # Device name to auto-connect
BLE_SERVICE_UUID=ffe0 # Service UUID
BLE_CHARACTERISTIC_UUID=ffe1 # Characteristic UUID
BLE_SCAN_TIMEOUT_MS=10000 # Scan timeout- Uses mock adapter by default
- Logs transfers to console
- No real Bluetooth required
- Enable Bluetooth on host system
- Grant permissions when prompted
- Pair devices at OS level (recommended)
- Configure UUIDs in
.envif needed
- Soft shadows and raised elements
- Smooth animations and transitions
- Theme switching (light/dark)
- Responsive design for all screen sizes
- Device Discovery: Scan for LAN/BT devices and connect
- Chat: Realβtime chat with Broadcast toggle
- File Upload: Drag & drop or click to select
- Transfer Queue: Real-time progress monitoring
- Connection Status: Live connection indicators
- Local-only operation - no external network calls
- Temporary file storage - uploads cleaned after transfer
- Network isolation - works on private networks/hotspots
- No user tracking - completely private
- Anyone on your network can access the web interface
- Use dedicated hotspot for maximum security
- Consider firewall rules for additional protection
- Files are temporarily stored in
uploads/directory
ColdSend/
βββ src/
β βββ server.js # Express server, SSE broadcast, API
β βββ adapters/
β β βββ wifi-direct.js # LAN discovery/transfer adapter
β βββ bluetooth/
β βββ index.js # Adapter factory
β βββ noble.js # BLE implementation
β βββ mock.js # Development mock
βββ public/ # Web UI
β βββ index.html # Main interface
β βββ styles.css # Neumorphism styling
β βββ app.js # Frontend logic
βββ electron/ # Desktop wrapper entrypoint & assets
βββ uploads/ # Temporary file storage
βββ package.json # Dependencies
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/status |
Get adapter and queue status |
GET |
/api/health |
Health check |
POST |
/api/scan-devices |
Discover Bluetooth devices |
POST |
/api/connect-device |
Connect to a device |
POST |
/api/disconnect-device |
Disconnect from device |
POST |
/api/send-text |
Queue text for transfer (host β device) |
POST |
/api/send-file |
Queue file for transfer (host β device) |
POST |
/api/broadcast-text |
Broadcast text to all connected listeners |
GET |
/api/events |
ServerβSent Events stream for broadcasts |
// Send text
fetch('/api/send-text', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text: 'Hello World!' })
});
// Upload file
const formData = new FormData();
formData.append('file', fileInput.files[0]);
fetch('/api/send-file', {
method: 'POST',
body: formData
});See Desktop builds in build-desktop.md or run from source:
git clone https://github.com/ivaavimusic/ColdSend.git
cd ColdSend
npm install
npm run startnpx coldsend- Electronβbased desktop application via
electron-builder - DMG/EXE/AppImage builds in
dist/ - See
build-desktop.md
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
git clone https://github.com/yourusername/coldsend.git
cd coldsend
npm install
npm run build # Production build
npm start # Start server- Desktop app packaging (Electron/Tauri)
- Auto-discovery of host devices
- Simple authentication (PIN/password)
- File encryption at rest
- Mobile apps (React Native/Flutter)
- Classic Bluetooth support (RFCOMM)
- Batch transfers and compression
- Transfer history and logging
- P2P networking (no central host)
- End-to-end encryption
- Plugin system for custom adapters
- Cloud sync (optional)
We welcome contributions! Please see our Contributing Guide for details.
git clone https://github.com/ivaavimusic/ColdSend.git
cd ColdSend
npm install
npm run dev # Start with auto-reload- Use ESLint configuration
- Follow existing patterns
- Add JSDoc comments
- Test your changes
MIT License - see LICENSE file for details.
- Noble - Bluetooth Low Energy library
- Express - Web framework
- Inter Font - Typography
- Feather Icons - UI icons
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: support@coldsend.dev
Made with β€οΈ for secure, local-first file transfers