How to Sync Files Between Devices with Syncthing (No Cloud Needed)

Nextcloud (tutorial 32) is a whole platform. If all you want is "this folder on my laptop should also be on my desktop and the server, always", Syncthing does exactly that and nothing else. Devices talk to each other directly, encrypted, with no account and no server in the middle. Your home server is the member that's always on, so changes made on the laptop are waiting when the desktop wakes up.
Quick reference
| Task | What |
|---|---|
| Server install | Docker compose below, web UI on :8384 |
| Laptop/desktop install | syncthing.net downloads (or Syncthing Tray) |
| Phone | Syncthing-Fork (Android); Möbius Sync (iOS) |
| Pair devices | Add Remote Device → paste the other device's ID |
| Share a folder | Add Folder → tick the devices to share with |
| Keep old versions | Folder → File Versioning → Staggered |
1. Install on the server
mkdir -p ~/docker/syncthing && cd ~/docker/syncthing
nano compose.yaml
services:
syncthing:
image: syncthing/syncthing:latest
container_name: syncthing
hostname: homeserver
environment:
PUID: 1000
PGID: 1000
ports:
- "127.0.0.1:8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
- "21027:21027/udp"
volumes:
- ./config:/var/syncthing/config
- /mnt/data/sync:/var/syncthing/data
restart: unless-stopped
Port 22000 is the sync traffic; 21027 lets devices find each other on the local network. The web UI is bound to localhost — reach it through an SSH tunnel (ssh -L 8384:127.0.0.1:8384 john@server, then http://localhost:8384) or the reverse proxy.
docker compose up -d
sudo ufw allow 22000
sudo ufw allow 21027/udp
2. Install on your other devices
Download from syncthing.net (Windows, Mac, Linux) or the app stores. Each one opens a local web page at http://localhost:8384.
3. Pair the devices
Every device has an ID (Actions → Show ID). On the laptop, Add Remote Device, paste the server's ID, name it. The server's UI then shows a prompt to accept the laptop. Accept. Do the same for each device — or pair everything with the server only; it relays between them.
4. Share a folder
On the laptop, Add Folder: choose C:\Users\You\Documents\Projects, give it a label, and under Sharing tick the server. The server shows "new folder" — accept it and choose where it lands (inside /var/syncthing/data). Within a minute the folder exists on both and stays identical.
Set the server's copy to Receive Only if the server should never change things, or leave both as Send & Receive for a true two-way sync.
5. Keep old versions
Sync means a deleted file is deleted everywhere. On the server's copy of each folder, Edit → File Versioning → Staggered. Changed and deleted files go into .stversions and are kept for 30 days by default. Combined with the nightly backup (tutorial 23), that's belt and braces.
Phones
Syncthing-Fork on Android can sync the camera folder to the server (one-way, send only) — a simpler Immich. iOS is more limited; Möbius Sync works but only syncs while open.
Away from home
Devices find each other through Syncthing's public discovery and relay servers, so it works across the internet without port forwarding, just slower via relay. Forward 22000 for direct connections, or run Tailscale on everything.
Troubleshooting
Devices never connect. Firewall on one side, or the IDs were mistyped. Both devices should show each other as "Connected" in the UI.
"Out of sync" with conflict files. Both sides changed the same file while offline. Syncthing keeps both; look for .sync-conflict in the name and keep the one you want.
Permissions errors on the server. PUID/PGID must match the owner of /mnt/data/sync (id and ls -ld).
Sync stuck on a huge file. Normal; it does block-level transfer. Check the folder's progress in the UI.
Wrapping up
Install everywhere, exchange IDs, share a folder, turn on versioning on the server. No account, no cloud, no monthly fee, and the server is the copy that's always awake.
