A simple yet powerful p2p file sharing application powered by Rust.
![]() |
Why Tappi-share? If you always wanted a simple, open-source, secure and P2P file-sharing solution, then I might suit you! Please, give me a shot! |
- 🚀 Effortless no-server* two-way file sharing
- 🔒 Secure WebRTC-based P2P connection
- 📁 Folder sharing
- 🛜 Multiple signaling protocols:
- Integrated WebSocket server
- Manual
- MQTT
*If WebRTC manages to establish a direct connection no relay server is needed
Assuming you have Rust and Cargo installed, you can download the app by running:
cargo install tappi-shareThen, to send your files, simply launch the app in client mode, add your files, pick the protocol, the most convenient being MQTT, and then you just have to fill the mandatory protocol flags like in this case local name and remote name:
👉 Note: the -f flag is hungry and so ; terminator might come in handy.
tappi-share client -f file1.ext file2.ext ; mqtt -l name1 -r name2To now receive the files you can launch the client like this:
tappi-share client mqtt -l name2 -r name1To launch the WebSocket-based signaling server, you can just do the following:
👉 Note: signaling server is currently not production-ready and mostly exists for debugging purposes.
tappi-share serverAnd, lastly, to see all of the available application options don't hesitate to make use of the -h flag:
tappi-share -h- 📄 Advanced logging
- 👑 Migration to tui-realm
- 🔄 Persistent progress on disconnect
- 🔒 Signaling server encryption
- 💭 Text chat
In case WebRTC fails to establish a direct connection, you might want to setup a relay server. Let's do it using Docker!
Sample docker-compose.yml:
services:
coturn:
image: instrumentisto/coturn
container_name: coturn
restart: unless-stopped
network_mode: "host"
volumes:
- ./turnserver.conf:/etc/coturn/turnserver.conf:roSample turnserver.conf:
# Listening ports
listening-port=3478
tls-listening-port=5349
# Relay port range
min-port=49160
max-port=49200
# External IP
external-ip=<YOUR_PUBLIC_IP>
# Realm (an arbitrary string, usually your domain)
realm=<YOUR_DOMAIN_NAME>
# Authentication method
lt-cred-mech
user=<USER>:<PASSWORD>
# Misc
fingerprint
no-multicast-peers
Now you can run the following command to start the container:
docker-compose up -dDon't forget to make sure 3478 UDP/TCP, 5349 TCP and 49160-49200 UDP ports are open on your server. Now you should be able to access it as turn:<YOUR_PUBLIC_IP>:3478.
To quickly remove the container simply run:
docker rm -f coturn
