Syncthing
Syncthing keeps a folder identical across two or more of your own devices, without routing that data through a company’s cloud first. There’s no account and no central server in the middle: your laptop, phone, and home server talk directly to each other over an encrypted connection, and a file dropped into a shared folder on one shows up on the others within seconds. Dropbox and Google Drive sell you cloud storage with sync bundled on top; Syncthing does only the sync part, peer-to-peer, on hardware you already own.
License: Syncthing is licensed under the Mozilla Public License 2.0 (MPL-2.0), confirmed directly from the LICENSE file in the syncthing/syncthing GitHub repo, not assumed from a badge.
Quick facts: Official site syncthing.net · GitHub syncthing/syncthing, 85,000+ stars · Docker image syncthing/syncthing on Docker Hub, also mirrored to ghcr.io/syncthing/syncthing · Web GUI on port 8384, sync protocol on port 22000.
How Syncthing works: no server involved
Most self-hosted file tools, Nextcloud included, run a server: install it once, and every device connects to that instance. Syncthing skips the server. Each device generates its own TLS certificate on first start and gets a Device ID, the SHA-256 fingerprint of that certificate. Add another device’s ID on both ends and the two instances connect directly, verify each other against that fingerprint, and sync over TLS 1.2/1.3. There’s no password to steal in transit, because there’s no account layer to attack.
Syncing is incremental: only changed blocks in a file cross the wire, not the whole file every time. Local discovery finds devices on your LAN with no internet needed; global discovery does the same over the internet, encrypted. When a direct connection isn’t possible, community relay servers pass traffic through instead, still end-to-end encrypted, just slower. All three are opt-out, documented on Syncthing’s own security principles page.
Installing Syncthing with Docker
The official syncthing/syncthing image builds from the project’s own Dockerfile, on Docker Hub and mirrored to ghcr.io/syncthing/syncthing. One container is the entire install: no database, nothing else to babysit.
services:
syncthing:
image: syncthing/syncthing
container_name: syncthing
hostname: syncthing
environment:
- PUID=1000
- PGID=1000
volumes:
- ./syncthing-config:/var/syncthing
network_mode: host
restart: unless-stopped
Use host networking, not the default bridge. Docker’s default bridge hides the container behind an internal 172.17.0.0/16 address, breaking LAN discovery and quietly pushing transfers onto a slower relay instead. Syncthing’s own Docker documentation calls host networking “strongly recommended” for this reason. Without it, at minimum publish 8384/tcp for the GUI and 22000/tcp plus 22000/udp for sync.
PUID and PGID set which user and group the container writes files as (1000 matches the first regular user on most Linux distributions). Adjust them, then bring the stack up:
docker compose up -d
Syncthing setup: pairing your first two devices
- Open the web GUI on each device: http://server-ip:8384 for the Docker host, http://localhost:8384 if Syncthing runs natively on the second machine.
- On each device, open Actions, then Show ID, to get its Device ID.
- On device A, click Add Remote Device and paste device B’s ID.
- Repeat in reverse on device B. Connections are always mutual.
- Once connected, usually within a minute, share a folder from one side; the other device gets a popup to accept it, and syncing starts.
The container’s GUI listens on 0.0.0.0:8384 by default, reachable from anything on the network, more exposed than the native binary’s localhost-only default. Set a GUI username and password under Actions, then Settings, and don’t forward port 8384 through your router. Reach it over Tailscale or a reverse proxy instead.
Syncthing vs Nextcloud
Syncthing and Nextcloud get compared constantly, though they solve different problems more often than they compete. Nextcloud is client-server: install it once, and every device connects to that instance for files, calendars, contacts, and chat. Syncthing only keeps folders identical across devices you own; there’s no server to browse from a friend’s computer, no public link to email someone. Where they overlap, Syncthing tends to be faster and lighter, since it isn’t running a web app, database, and job queue underneath the sync feature.
| Syncthing | Nextcloud | |
|---|---|---|
| Architecture | Peer-to-peer, no central server | Client-server, one instance to maintain |
| Best at | Keeping folders identical across your own devices | Files, calendar, contacts, chat, and office docs together |
| Public link sharing | Not built in, no server to host one | Yes, with passwords and expiry dates |
| Resource footprint | One lightweight Go binary, no database | PHP, a database, and Redis beyond a toy install |
| Mobile access | Community Android and iOS apps (original Android app discontinued) | Official iOS and Android apps with remote browsing |
Syncthing: pros and cons
- No account and no central server; nobody but you holds a copy of your files
- Incremental, block-level sync makes catching up after time offline fast
- Runs comfortably on a Raspberry Pi or the smallest box in a homelab
- Traffic is TLS-encrypted device to device, even through a relay
- No public link sharing or web file browser away from a device you control
- The original official Android app was discontinued; mobile now runs on community apps
- Pairing by Device ID is a different mental model than logging into a website
- Nothing to browse from someone else’s computer without installing Syncthing there too
Hardware: a single, dependency-free Go binary, comfortable on a Raspberry Pi or whatever’s left running in a closet. The real bottleneck is usually disk I/O and bandwidth on the initial sync of a large library, not CPU. Our homelab setup guide for beginners covers the trade-offs between a Pi, a mini PC, and a repurposed old machine.
If typing docker compose commands isn’t appealing, Portainer gives the container a point-and-click restart button and log viewer instead.
FAQ
Is Syncthing free?
Yes, fully. Open source under the Mozilla Public License 2.0, no paid tier, no feature paywall anywhere in the project.
Is Syncthing safe to use?
The sync connection is solid: TLS 1.2/1.3 between devices, mutual authentication by certificate fingerprint, no account database to breach. The web GUI is the part worth watching, since the Docker image exposes it on every interface by default. Set a GUI password immediately.
Do I need to open ports on my router?
Only for two devices on different networks to connect directly at full speed: forward 22000/TCP and 22000/UDP. Without it, Syncthing falls back to relay servers automatically, slower but working.
Can Syncthing back up my phone’s photos automatically?
Yes, a community Android app can watch your camera folder and sync new photos as they’re taken, but it won’t do face recognition or search by content. For that, Immich is built around AI-powered photo search and backup.
What’s the real difference between Syncthing and Nextcloud?
Syncthing keeps folders identical across your own devices and stops there. Nextcloud is a full platform, files plus calendar, contacts, and chat, accessed through one central server from anywhere. Plenty of homelabs run both: Syncthing for fast device-to-device sync, Nextcloud for anything needing a proper web interface or sharing with other people.
Syncthing earns its place in a homelab by doing one thing well and staying out of the way otherwise. Our homelab setup guide for beginners covers the hardware it needs, and if a fuller collaboration suite is what you’re after, Nextcloud is the natural next stop.