Transfer
Fast local-network file transfer between phones, laptops and desktops — with a Windows installer and a CLI companion.
Gallery
3 images — click to zoomWhat it is
Transfer is a fast local-network (LAN) file transfer server. You run it once on a computer and then any phone, laptop or desktop on the same Wi-Fi can open the printed address in a browser and upload/download files — no cables, no cloud, no accounts.
The project is bilingual (English/Farsi), ships as a ready Windows installer (NeganTransfer_Setup.exe built with PyInstaller + Inno Setup) and includes a companion CLI (transfer-cli.py) for scripted transfers.
Feature highlights
- Upload/download files and whole folders, drag & drop, multi-file ZIP download
- Real-time updates over WebSocket; automatic device discovery on the LAN
- QR code for instant pairing from a phone
- HTTPS with auto-generated self-signed certificates (or
mkcertfor trusted ones) - File management: delete, rename, create folders; expiring share links; search/sort/filter; duplicate detection
- 5 themes + auto system theme + custom background; bilingual EN/FA interface
- Hardware info display; keyboard shortcuts; per-session speed limits
- PWA support — installable as an app on the phone
- Extras: folder-sync mode (experimental), chat between devices, network speed test, remote camera/screen viewing (HTTPS required), document preview (PDF, text, code)
Security model
- Path-traversal protection, XSS escaping of all user content, CSRF protection on state-changing endpoints, per-IP rate limiting, session-based auth, HTTPS. The README is explicit: designed for LAN use only — do not expose to the public internet.
Architecture (from the source)
server/
├── main.py # entry point; port checks, graceful shutdown
├── handler.py # HTTP handlers
├── websocket.py # real-time updates
├── auth.py # session-based authentication
├── security.py # CSRF, rate limiting, sanitization
├── network.py # LAN address detection
├── qr.py # QR generation
├── hardware.py # hardware info
├── config.py # settings & port
└── services/ # extra services
web/
├── index.html / app.js / style.css / manifest.json / translations.js
Plus: transfer-cli.py (send/get/list/status), run.spec + setup.iss (PyInstaller/Inno packaging), generate_ssl.py, install.sh/start.sh for Linux and tests/.
Dependencies (requirements.txt)
aiohttp— async HTTP serverbcrypt— password hashingqrcode— QR generationpsutil— hardware infoplatformdirs— cross-platform config paths
Getting started
# Linux
./install.sh && ./start.sh # or: python run.py
# Windows (from source)
python -m venv .venv && .venv\Scripts\activate
pip install -r requirements.txt
python run.py # opens http://<lan-ip>:8000
# ...or just run the prebuilt NeganTransfer_Setup.exe
# CLI
./transfer-cli.py connect http://192.168.1.5:8000
./transfer-cli.py send photo.jpg
./transfer-cli.py list && ./transfer-cli.py get photo.jpg
Why it stands out
Transfer feels like a shipped product, not a script: real-time sync over WebSocket, QR pairing, HTTPS setup for phones, PWA installability, themes, a bilingual UI, a CLI, a Windows installer with firewall rules — and a serious security layer (CSRF, rate limits, path traversal). It demonstrates full product engineering in Python: from protocol design to packaging and distribution.