LocalGo is a high-performance, cross-platform implementation of the LocalSend protocol. This guide will help you get up and running quickly.
Download the latest release for your platform from the Releases page.
Linux/macOS:
tar -xzf localgo_Linux_x86_64.tar.gz
sudo mv localgo /usr/local/bin/# User installation (installs to ~/.local/bin)
./scripts/install.sh
# System-wide with systemd service
sudo ./scripts/install.sh --mode system --service --create-userRequirements: Go 1.19+
git clone https://github.com/bethropolis/localgo.git
cd localgo
make buildgo install github.com/bethropolis/localgo/cmd/localgo@latestbrew install bethropolis/localgo/localgo yay -S localgo-binpodman run -d \
--name localgo \
--network host \
-v $(pwd)/downloads:/app/downloads:z \
-v $(pwd)/config:/app/config:z \
-e LOCALSEND_ALIAS="My Server" \
ghcr.io/bethropolis/localgo:latestensure the mounted
downloadsandconfigdirectories exist and have the correct permissions. for more information see container documentation
Start the server. It will automatically discover your network interface and start listening for incoming transfers.
localgo serveYou are now visible to other LocalSend devices on your network.
localgo discoverIf multicast is blocked on your network, use the HTTP scanner instead:
localgo scanOr list the most recently seen devices (fast 2s scan):
localgo deviceslocalgo send --file photos.zip --to "QuickShare"You can send multiple files at once:
localgo send --file image.jpg --file document.pdf --to "MyPhone"Start a share server so other devices can pull files from you:
localgo share --file document.pdfShare multiple files, protected by a PIN:
localgo share --file report.pdf --file data.csv --pin 1234Check your current configuration (alias, fingerprint, port, etc.):
localgo infoIf you are running LocalGo on a VPS or a Raspberry Pi without a display:
- Enable Quiet Mode to avoid cluttering logs.
localgo serve --quiet & - Disable clipboard since there is no display server — incoming text will be saved as a
.txtfile.localgo serve --no-clipboard
- Run as a Service: See the Deployment Guide.
LocalGo is JSON-friendly — pipe output into jq or grep for automation:
# Check if "MyPhone" is online
if localgo scan --json | grep -q "MyPhone"; then
echo "Phone is online!"
fi
# Get device list as JSON
localgo devices --json | jq '.[].alias'For unattended setups where you trust senders on the network:
localgo serve --auto-accept --quietOr set it permanently via an environment variable:
export LOCALSEND_AUTO_ACCEPT=true
localgo serve --quiet- Encryption: All transfers are encrypted using TLS 1.2+ with on-the-fly generated certificates.
- PIN Protection: Enforce a PIN for incoming transfers.
The sender will be prompted to enter this PIN.
localgo serve --pin 12345
- Configuration Guide - Deep dive into all flags and env vars.
- CLI Reference - Full command and flag documentation.
- Library Guide - Embed LocalGo in your own Go apps.
- Code Walkthrough - Step-by-step guide to the codebase.