Why Syncthing Beats the Cloud for Private File Sync
Cloud sync services are convenient until they are not. Storage limits, monthly fees, and the nagging reality that your files live on someone else’s server are enough to push plenty of people toward self-hosted alternatives. Syncthing sits at the top of that list – it is free, open-source, peer-to-peer, and moves your files directly between devices without routing them through a third-party intermediary. No account required. No subscription. No upload cap.
Getting Syncthing running is straightforward, but the setup process has enough moving parts that a few missteps can leave you wondering why two devices refuse to talk to each other. This guide walks through installation, device pairing, folder sharing, and the configuration details that actually matter – so you end up with a sync setup that works reliably from day one.

Installing Syncthing on Your Devices
Syncthing runs on Windows, macOS, Linux, Android, and even some NAS devices. The installation method varies by platform, but the core application is the same everywhere. On Windows, the official installer from syncthing.net handles everything and places a tray icon in the system notification area. On Linux, most distributions carry Syncthing in their package repositories – running sudo apt install syncthing on Debian or Ubuntu is enough to get the binary. macOS users can install it through Homebrew with brew install syncthing, or grab a third-party wrapper like Syncthing-macOS that adds a menu bar icon for easier access.
Once installed, Syncthing starts a local web interface accessible at http://127.0.0.1:8384 by default. This is where all configuration happens. On Linux systems, you will likely want to enable Syncthing as a systemd service so it starts automatically at boot. The command sudo systemctl enable syncthing@yourusername followed by sudo systemctl start syncthing@yourusername takes care of that. On Android, the official Syncthing app from F-Droid or the Google Play Store includes its own interface and handles background operation through Android’s battery and sync permissions.
If you are installing on a headless Linux server or a Raspberry Pi, you will access the web UI from another machine on the same network. Open the Syncthing config file at ~/.config/syncthing/config.xml and change the GUI address from 127.0.0.1:8384 to 0.0.0.0:8384. This lets you reach the interface by navigating to the server’s local IP address in a browser from any other device. Set a strong GUI password immediately after – Syncthing’s web UI has no authentication by default, and leaving it open on a network address without a password is a real risk.
Pairing Devices and Sharing Folders
Syncthing identifies each device using a unique Device ID – a long alphanumeric string generated on first run. To connect two devices, open the web UI on each one, click Add Remote Device, and enter the Device ID from the other machine. Both sides need to accept the connection request before anything syncs. You can find your Device ID under Actions > Show ID in the top navigation bar. Once both devices show each other as connected, the pairing is done.
Folder sharing works the same way. On the device that holds the files, open the folder settings and enable sharing with the remote device. The other device will receive a pop-up prompting it to accept the shared folder and choose a local path where the files should land. From that point, Syncthing monitors both locations and syncs changes in near-real time. You can share as many folders as you need, and each folder can be shared with different sets of devices – useful when you want your work files on your laptop and your personal photos on your phone, but not vice versa.

Understanding Sync Types, Conflicts, and Versioning
Syncthing offers three folder types: Send & Receive (the default, bidirectional sync), Send Only, and Receive Only. The distinction matters more than it sounds. If you set a folder on your main computer as Send Only and the corresponding folder on a backup device as Receive Only, you get a one-directional flow that protects the source from accidental changes made on the backup machine. This is a better model than bidirectional sync for backup purposes, where you want the primary device to always be the authority.
File conflicts are handled gracefully. When two devices modify the same file before syncing, Syncthing keeps both versions. The conflicting copy gets renamed with a timestamp and the device name appended, so you can identify exactly where it came from and manually review the difference. This approach is less elegant than some tools that attempt automatic merge logic, but it is far safer – you never silently lose data because the software guessed wrong about which version to keep.
File versioning is one of the features that separates Syncthing from basic sync tools. Under each shared folder’s settings, you can enable File Versioning and choose from several modes. Trash Can moves deleted files to a hidden .stversions folder rather than deleting them permanently. Simple versioning keeps a set number of old copies before discarding them. Staggered versioning is the most sophisticated option – it retains hourly versions for the past day, daily versions for the past month, and weekly versions beyond that, automatically pruning older copies to manage disk space. For most home and small office setups, Staggered versioning gives you a practical safety net without requiring manual management.
One thing that trips people up is Syncthing’s handling of ignore patterns. Each folder can carry a .stignore file that tells Syncthing which files or directories to skip. The syntax is similar to .gitignore, and you can use wildcards. This is useful for excluding build artifacts, cache directories, or large files that you do not actually need synced across every device. A simple example: adding node_modules to your .stignore prevents developer dependency folders from bloating every machine that shares a code folder. The ignore patterns are evaluated on the device where the .stignore file lives, so each device can have its own rules independently.

Relay Servers, NAT Traversal, and Performance
Syncthing is built around direct device-to-device connections. When two devices are on the same local network, sync is fast because data moves without leaving that network at all. Things get more complicated when devices are on different networks – a home computer and a laptop at a coffee shop, for instance. Syncthing uses a combination of global discovery servers and relay servers to handle these situations. Discovery servers help devices find each other’s public addresses. If a direct connection cannot be established because of NAT restrictions on one or both sides, traffic falls back to a relay server run by the Syncthing project. This fallback keeps things working, but relay speeds are capped and noticeably slower than direct connections.
If you sync frequently between remote devices and want consistently fast transfers, running your own relay is an option, though it requires a public-facing server with a stable IP. Alternatively, if one of your devices lives on a network where you control the router, setting up port forwarding for Syncthing’s default port 22000 allows direct connections even across the internet. The web UI shows connection type in the device list – look for Direct (TCP) versus Relayed to confirm whether your traffic is taking the fast path. Adjusting this based on your setup can make a real difference in how quickly large file sets propagate across locations.
Syncthing does not try to be everything. There is no mobile web UI, no sharing links you can send to someone outside your device network, and no integration with services like Google Drive or Dropbox. What it does – private, direct, encrypted file sync between your own devices – it does with very little overhead and no ongoing cost. The encryption is handled using TLS with certificates generated per device, meaning traffic between devices is protected in transit even when passing through relay infrastructure. Whether that trade-off makes sense depends entirely on what you actually need to sync, and with whom.





