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

Syncthing: one folder, every device — No account. No cloud. The server is the always-on copy.

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

TaskWhat
Server installDocker compose below, web UI on :8384
Laptop/desktop installsyncthing.net downloads (or Syncthing Tray)
PhoneSyncthing-Fork (Android); Möbius Sync (iOS)
Pair devicesAdd Remote Device → paste the other device's ID
Share a folderAdd Folder → tick the devices to share with
Keep old versionsFolder → 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.

Call us