August 22, 2026
Syncthing: P2P Sync That Is Not a Backup
Synchronizing files between devices peer-to-peer with in-transit encryption, no cloud and no account — plus its honest limits: syncing is not a backup, and data at rest on devices is not encrypted.
The most basic homelab need is often a single answer: how to get the same files on many devices without routing them through somebody else’s cloud? Syncthing answers it: synchronization runs directly between devices, called peers, with no third-party intermediary storage. Understood from the start: this is a sync tool, not a backup.
Why Syncthing
Syncthing keeps files identical across several connected devices. It keeps my notes and a few other directories that travel with me; changes propagate while the devices are alive and connected. No fees, no quotas, no third party reading your files.
How it works: the peer-to-peer model
The most fundamental difference from cloud storage is the model. Every device runs its own copy of Syncthing, and these instances connect directly to each other to form a mesh network, which is why they are called peers.
Device identity is guaranteed by digital certificates; the device ID shown is the SHA-256 fingerprint of that certificate, and all traffic is protected by TLS 1.2/1.3. Two devices connect only when both sides approve each other’s device ID.
Transfers are block-based: only changed parts are sent. When direct connection fails, Syncthing falls back to a public relay — data stays encrypted, but the relay learns the device IDs.
Deployment with Docker Compose
services:
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: syncthing
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Jakarta
volumes:
- ./config:/config
- ./sync:/sync
ports:
- "8384:8384" # Web UI
- "22000:22000/tcp" # Sync traffic
- "22000:22000/udp"
- "21027:21027/udp" # Local discovery
restart: unless-stopped
Save it as docker-compose.yml, then run:
docker compose up -d
The config directory holds configuration and device identity; sync is the sync-folder root. Port 8384 serves the web UI, 22000 carries sync traffic, and 21027 handles local discovery.
Initial setup
Open the web UI at http://<host-address>:8384 and set up a user account first — never leave it unauthenticated.
Next steps:
- Add a remote device from the Add Remote Device menu using its device ID.
- Create a folder to sync and share it with the target device.
- Approve the share on the target device to link the folder.
- Watch the two sides handshake and the status turn green.
Security and Operations
- Protect the web UI with a strong password, or hide it behind an encrypted connection.
- Do not expose these ports to the open internet without protection.
- Guard the TLS keys and the
configdirectory — anyone holding them can impersonate the device. - Update the image regularly for security fixes.
Folder types restrict sync direction: Send & Receive (default), Send Only for reference copies, Receive Only for replication — local changes stay local.
Backup & Recovery: why sync is not backup
Syncing is not backup. If a file is deleted or overwritten, that change propagates everywhere. Without file versioning, the good copy can vanish at once.
File versioning archives old versions into .stversions, using trash can, simple, staggered, or external strategies. Notes: off by default, and it only archives changes received from other devices — local deletions or overwrites are not archived.
All configuration lives in config, so moving to a new host means restarting the container with the same directory. When restoring from backup, stop syncing first — restoring into an active directory can trigger deletions or overwrites.
Cons and limitations
- No encryption at rest. Only in transit; anyone with disk or key access can read the contents.
- Versioning does not cover every case. Off by default, and local changes are not archived; without a strategy, no old copy exists.
- Devices must be online. There is no central server; changes only spread when the receiving device is connected.
- Metadata leaks to discovery and relays. Global discovery maps device IDs to IP addresses, and public relays learn the device IDs involved, even though the payload stays encrypted.
- Conflict copies propagate. Files named
<name>.sync-conflict-...are treated as regular files and get synced too. - Case-sensitive names.
file.txtandFILE.txtcan conflict on case-insensitive systems like Windows and macOS.
Troubleshooting
- Devices cannot find each other — ensure ports
22000and21027are open and not firewall-blocked. - Container not starting — check the logs with
docker compose logs syncthingfor errors.
Conclusion
Syncthing solves one problem well: files available on many devices with no cloud and no account. For a single-machine homelab with limited storage, it is light and easy to maintain from the web UI.
But it is not a backup replacement: all devices share the same failure domain. Pair it with a real, separate backup, and enable file versioning on important folders.
