sTransfer is an end-to-end encrypted file transfer application designed for transferring files of any size between multiple users.
Unlike traditional file sharing services, files are not uploaded to or stored on a central file hosting service. Instead, encrypted data is forwarded through a relay server, allowing reliable transfers without requiring users to configure port forwarding or deal with NAT traversal issues.
- Browser Support: Use sTransfer directly from your browser via sTransfer.net
- End-to-end encrypted file transfers
- No server-side file storage (zero-knowledge relay)
- No file size limits
- Room-based file sharing with multiple participants per room
- Simultaneous transfers to multiple recipients
- Works out of the box using the public relay server
- Support for self-hosted relay servers
- Dark mode support
- Available as Web, GUI, and CLI applications
- Start sTransfer.
- Choose a username.
- Host a room.
- Share the Room ID with other users.
- If a room password is configured, participants must enter it before joining.
- Drag and drop files into the room or select them using the file browser.
- Files are transferred to the selected participants.
Note: All transferred data is end-to-end encrypted. The relay server only forwards encrypted packets and cannot access the transferred data.
Each release contains multiple builds depending on your preferred interface and OS.
You can use the fully functional browser version at sTransfer.net. It works everywhere, including on smartphones (Android/iOS), without having to install any app.
These are the standard desktop applications with a graphical user interface.
sTransfer-win-x64.zipsTransfer-linux-x64.zipsTransfer-osx-arm64.app.zipsTransfer-osx-x64.app.zip
These versions run entirely in the terminal and provide the same functionality as the GUI version.
sTransfer-cli-win-x64.zipsTransfer-cli-linux-x64.zipsTransfer-cli-osx-arm64.app.zipsTransfer-cli-osx-x64.app.zip
Differences compared to the GUI version:
- All incoming files are accepted automatically.
- No graphical user interface.
- Same encryption and transfer functionality.
To display all available commands, enter:
/help
These packages contain the standalone relay server if you wish to host your own.
sTransfer-server-win-x64.zipsTransfer-server-linux-x64.zipsTransfer-server-osx-arm64.app.zipsTransfer-server-osx-x64.app.zip
Start the server from a terminal:
./sTransferServerThe server listens on two protocols simultaneously:
| Protocol | Port | Supported Clients |
|---|---|---|
| Raw TCP | 5001 | Desktop GUI, CLI |
| WebSockets | 5002 | Web, Desktop GUI, CLI |
You can specify custom ports when starting the server. The first argument is the TCP port, the second is the WebSocket port:
./sTransferServer 7400 7401If you want to disable a protocol completely, pass closed as the argument. For example, to disable raw TCP and only use WebSockets on port 5002:
./sTransferServer closed 5002Make sure the active ports are accessible through your firewall and router configuration.
To use Secure WebSockets (wss://), which is required when hosting the web client on HTTPS, you should run a reverse proxy (like Caddy, Nginx, or Apache) in front of the sTransfer server.
The reverse proxy handles the SSL certificate on port 443 and forwards the internal traffic to the sTransfer WebSocket port (e.g. 5002).
Example Caddyfile:
api.yourdomain.com {
reverse_proxy localhost:5002
}
Clients can then connect securely via wss://api.yourdomain.com.
In the GUI Client, open Settings. In the CLI Client, use the /server command.
- Server Address:
- For Raw TCP: Enter the IP (e.g.
99.88.77.66). - For WebSockets: Enter the IP or Domain with the protocol (e.g.
ws://99.88.77.66orwss://api.yourdomain.com).
- For Raw TCP: Enter the IP (e.g.
- Server Port: Enter the port. This is required for all protocols.
- For standard Raw TCP:
5001 - For direct WebSockets:
5002 - For Secure WebSockets (WSS) via reverse proxy:
443
- For standard Raw TCP:
Additionally, the server's public keys must be added to the known_hosts.json file.
The server's public keys can be found in the directory of the server file after you ran it once.
X and Y are the public keys, D must remain private.
- Windows:
%AppData%\sTransfer\known_hosts.json - Linux:
~/.config/sTransfer/known_hosts.json - macOS:
~/Library/Application Support/sTransfer/known_hosts.json
{
"99.88.77.66": "base64StringX|base64StringY",
"wss://api.yourdomain.com": "base64StringA|base64StringB"
}- The key in the JSON must exactly match the Server Address you entered in the client.
base64StringXis the first public key.base64StringYis the second public key.- The keys must be separated using a pipe character (
|).
After saving the known_hosts.json file, the client will connect to your custom relay server.
All file transfers are strictly end-to-end encrypted.
The relay server functions entirely as a traffic forwarder. It has no access to cryptographic keys and cannot read transferred files, room passwords, or any other metadata or communication contents passing through it.



