Transfer files between machines through the web, through a CLI, or both.
Goto https://e2ecp.com and enter a room. Have another peer enter the same room to transfer files between the two.
Optionally, you can also transfer files via the command-line between machines (through website or direct CLI-to-CLI).
Either download the latest release or install with:
curl https://e2ecp.com | bashOr build from source with make server.
Then you can also send and receive files from the command-line between other command-line users or users on the web interface.
Sending a file:
e2ecp send <file>Receiving a file:
e2ecp receiveYou can run your own relay server if you want to self-host.
e2ecp serve --port 8080This project is created and maintained by Zack. If you find it useful, please consider sponsoring me on GitHub Sponsors.
It works by using a simple peer-to-peer connection through a knowledge-free websocket-based relay server. All data transferred is encrypted using end-to-end encryption with ECDH P-256 key exchange and AES-GCM authenticated encryption, meaning the relay server does not have access to the data being transferred.
e2ecp implements several features to ensure reliable file transfers:
- Chunk Acknowledgments: Each data chunk is acknowledged by the receiver
- Automatic Retransmission: Lost chunks are automatically retried (up to 3 attempts)
- Chunk Ordering: Out-of-order chunks are buffered and reordered correctly
- Timeout Detection: Transfers that stall for 30+ seconds are automatically aborted
- Hash Verification: File integrity is verified using SHA-256 checksums
- Thread-Safe: Concurrent operations are protected with mutexes
These features ensure that transfers complete successfully even over unreliable network connections.
e2ecp includes comprehensive test suites to ensure reliability:
Run Go tests for the core functionality:
go test -v ./...Playwright tests verify web-to-web and web-to-CLI file transfers:
cd tests
./run-tests.shSee tests/README.md for detailed testing documentation.
MIT — see LICENSE.