| File | Date | Author | Commit |
|---|---|---|---|
| assets | 2025-10-13 |
|
[08418b] Initial commit (clean history) |
| electron | 2025-10-14 |
|
[93fa57] version UI |
| vue | 2025-10-14 |
|
[93fa57] version UI |
| .gitignore | 2025-10-13 |
|
[08418b] Initial commit (clean history) |
| LICENSE | 2025-10-13 |
|
[7d1f53] LICENSE updated |
| README.md | 2025-10-13 |
|
[499c12] App reset & cleanup |
| electron-builder.json | 2025-10-13 |
|
[08418b] Initial commit (clean history) |
| package-lock.json | 2025-10-14 |
|
[93fa57] version UI |
| package.json | 2025-10-14 |
|
[93fa57] version UI |
Fast, secure, and private file transfer — right from your desktop.
A fast, minimal, and secure file transfer desktop app built with Electron.
Send and receive files between devices over local networks with ease.
Get the latest release of FileTransfer for your OS:
⚠️ Available soon.
In my work environment, sharing files was often slow and cumbersome — USB drives, email attachments and shared folders were inefficient, especially across different operating systems.
I wanted a fast, private, and simple way to share files with just one person, even over potentially unsecure networks.
This frustration inspired FileTransfer, a lightweight app for secure peer-to-peer file transfer on local networks.
| Add Friend | Friend List | Accept File |
|---|---|---|
![]() |
![]() |
![]() |
FileTransfer ensures that all data is transmitted securely between devices using a hybrid encryption scheme.
Asymmetric Encryption (Public Key Cryptography)
Each device generates a public/private key pair.
The public key is shared with other devices, while the private key never leaves the local machine.
Key Encryption Key (KEK)
A KEK is used to encrypt the actual session key exchanged between peers.
Session Keys
For each transfer, a unique symmetric key is generated to encrypt the file data itself.
After the transfer is complete, the session key is destroyed.
End-to-End Encryption
Only the sender and receiver can decrypt the transmitted file — no third party or relay server can read the data.
Contributions, bug reports, and suggestions are welcome!
If you'd like to add features or fix issues, please open a Pull Request.
git checkout -b feature/your-feature
git commit -m "Add: new feature"
git push origin feature/your-feature
| File / Directory | Description |
|---|---|
electron/main.js |
Main Electron entry point — creates the app window and initializes communication and dependencies. |
electron/preload/preload.js |
Exposes secure APIs to the renderer (Vue). |
electron/preload/passwordPreload.js |
Preload for the password entry window. |
electron/main/ipcs/index.js |
Centralized IPC handlers for communication between main and renderer processes. |
vue/main.js |
Entry point for the Vue UI. |
All Electron IPC communication is centralized in electron/ipcs/index.js.
It contains the main channels for sending and receiving messages between the main process and Vue renderer processes, including:
Files are inside electron/main/ipcs/
| File / Directory | Description |
|---|---|
electron/addFriend.js |
Handles friend discovery and peer connection setup. |
electron/fileTransfer.js |
Manages file transfer requests and progress updates. |
electron/app.js |
Handles general app operations (copy/paste, file selection, etc.). |
| File / Directory | Description |
|---|---|
electron/cryptoUtils.js |
Provides cryptographic utilities including RSA encryption/decryption, AES encryption/decryption with HMAC, and object/buffer conversions. |
electron/friendsManager.js |
Manages friends list: adding/removing friends, storing metadata, handling AES handshake state, and persisting encrypted friend data to disk. |
electron/keyManager.js |
Handles RSA key pair generation, passphrase validation, symmetric key generation, and key encryption/decryption utilities. |
electron/settingsManager.js |
Manages user settings (like download path) with AES-encrypted persistence and simple getters/setters. |
electron/tcpServer.js |
Implements TCP servers for RSA and AES encrypted communication with friends, including session management, handshake, and JSON stream handling. |
electron/udpServer.js |
Provides an event-driven UDP server for sending and receiving JSON messages, with automatic event emission based on message type. (Friend discovery) |
Class instances are intentionally omitted for clarity. This diagram focuses on the static structure of modules and their dependencies.
git clone https://github.com/maj-devs/fileTransfer.git
cd fileTransfer
npm install
cd vue
npm install
Instance A:
TCP_PORT=41237 UDP_PORT=41200 UDP_PORT2=41202 INSTANCE=1 npm run dev
Instance B:
TCP_PORT=41235 UDP_PORT2=41200 UDP_PORT=41202 INSTANCE=2 npm run dev
npm run build