Send files and folders between devices on your local network, from the command line.
Every download bundles its own Java runtime — there is nothing to install first.
This repository distributes the built CLI. The application source lives elsewhere and is not public.
brew install bartwell/tap/wenderOr download wender-<version>.dmg from Releases.
scoop bucket add bartwell https://github.com/bartwell/wender-cli
scoop install wenderScoop is the smoother route: it strips the "downloaded from the internet" mark, so Windows does not warn about the program.
The .msi and the .zip from Releases work too,
but they are not code-signed, so SmartScreen shows "Windows protected your PC". Choose More info →
Run anyway, or unblock the file first:
Unblock-File .\wender-<version>.msiExtracting the zip in Explorer does not avoid this: the mark is copied onto the extracted files.
curl -fsSL https://bartwell.github.io/wender-cli/apt/wender.gpg \
| sudo tee /etc/apt/keyrings/wender.gpg > /dev/null
sudo tee /etc/apt/sources.list.d/wender.sources > /dev/null <<'EOF'
Types: deb
URIs: https://bartwell.github.io/wender-cli/apt
Suites: ./
Signed-By: /etc/apt/keyrings/wender.gpg
EOF
sudo apt update && sudo apt install wenderCovers amd64 and arm64, so 64-bit Raspberry Pi OS is included, and updates arrive with
apt upgrade like any other package. The repository carries the current release only; older
versions stay in Releases and install with
sudo dpkg -i wender_<version>_<arch>.deb.
32-bit Raspberry Pi OS (armhf) is not supported. 64-bit has been the default since Bookworm.
Every platform also ships a plain archive, for machines where you would rather not install anything:
tar xzf wender-<version>-linux-x64.tar.gz
./wender-<version>/wender/bin/wender --helpOn macOS the archive contains an app bundle, so the launcher is at
wender-<version>/wender.app/Contents/MacOS/wender.
Each release ships SHA256SUMS:
sha256sum -c SHA256SUMS --ignore-missingwender send --to <ip> [--name <name>] <path>... Send files or directories to a peer
wender receive [--out <dir>] [--name <name>] Wait for an incoming transfer
wender discover [--timeout <seconds>] List Wender devices on this network
Global options: --verbose prints library logs to stderr, plus --help and --version.
On the receiving machine:
wender receive --out ~/DownloadsIt prints the port it is listening on and waits. On the sending machine:
wender discover # find the other device's address
wender send --to 192.168.0.42 report.pdf photos/Directories are sent whole, and progress is shown while the transfer runs. Both commands exit non-zero if the transfer fails, so they compose in scripts.
Transfers use TCP port 2904, and discovery uses multicast on the same port. Two things commonly get in the way:
- A VPN. Multicast leaves through the tunnel interface instead of the LAN one, so
discoversilently finds nothing. Sending still works if you pass the address yourself with--to. - A firewall. On Windows, allow
wender.exeon private networks.
Guest and "client isolation" Wi-Fi networks block device-to-device traffic entirely; neither discovery nor transfer will work there.
Transfer history goes to the per-user data directory: ~/.local/share/wender on Linux (honouring
XDG_DATA_HOME), ~/Library/Application Support/Wender on macOS, %APPDATA%\Wender on Windows.
Set WENDER_DATA_DIR to put it somewhere else.