Updated October 2026 for Syncthing 2.1.
Syncthing is a decentralized file sync tool. It does what Dropbox or Google Drive do, but it’s self-hosted and doesn’t need a central server to work. These tips come from running it day to day, from file versioning to the hidden folders it drops into your shares.
We covered installation and network design in another blog post. This one is the condensed version for first-time users.
Setup
On Linux servers, install Syncthing from the official apt repository at apt.syncthing.net (use the stable-v2 channel) or from the release tarball. For desktops, grab a build from syncthing.net. The other post has the full commands for Debian 12, Ubuntu 24.04 and AlmaLinux 9.
Once it’s running, the web UI is at http://127.0.0.1:8384/. That’s plain HTTP and localhost only by default. Set a GUI user and password under Actions > Settings > GUI before you change the listen address for remote access, or just reach it through an SSH tunnel.
When you set up your first shared folder, two identifiers matter.
Folder IDs
The Folder ID is the identity of a shared folder. Syncthing generates a random one when you click Add Folder, and every device sharing that folder has to use the exact same ID. It’s case sensitive and never changes for the life of the folder. The Folder Label is different: it’s just a display name, and it can differ on each device.
To find the ID of an existing folder, click the folder in the web UI to expand it, or open Edit and look at the General tab.
Device IDs
The Device ID is the identity of the Syncthing install itself, so it identifies a computer or other device you want to share with. It’s generated on first start with no input from you, and it stays the same as long as that install’s keys exist.
You need your peers’ device IDs before you can share folders with them. Get yours from Actions > Show ID in the upper right corner of the web UI. On a headless server, syncthing device-id prints it.
What the .stfolder folder is
Every shared folder gets a small .stfolder directory in its root. It’s a marker. Syncthing checks for it to make sure the folder is actually present and readable on disk. If it vanishes, say because an external drive didn’t mount, Syncthing stops syncing that folder with a “folder marker missing” error instead of deciding you deleted everything. Leave it alone.
Global Settings
Automatic Updates
How Syncthing updates depends on how you installed it.
- apt.syncthing.net packages: apt does the upgrading. Syncthing’s own auto-upgrade is disabled in these builds, and the setting shows as unavailable.
- Downloaded builds: auto-upgrade is on by default and checks every 12 hours. Change it under Actions > Settings > General > Automatic upgrades. “Stable releases only” is the right choice for almost everyone. If the binary lives somewhere the Syncthing user can’t write, like a root-owned
/usr/local/bin, pick “No upgrades” and upgrade by hand.
Release candidates always auto-upgrade, so don’t run the candidate channel on a box you care about.
Bandwidth Limiting
Sometimes Syncthing shares a connection with traffic that matters more. On a residential connection you probably don’t have much upload bandwidth, and Syncthing pushing out file changes might matter less to you than keeping your Netflix stream from buffering.
Set incoming and outgoing limits under Actions > Settings > Connections. The fields are Incoming Rate Limit and Outgoing Rate Limit, in KiB/s. A good starting point is to run a speed test and set the outgoing limit to 80% or less of your typical upload speed. That’s usually enough to avoid saturating the link.
No limits are set on a fresh install. Limits also skip LAN traffic unless you tick Limit Bandwidth in LAN, which is what you want most of the time.
Folder Defaults
If you add folders often, set your preferences once. Actions > Settings > General > Edit Folder Defaults sets the versioning, rescan interval and other options every new folder starts with.
Shared Folders
Folder Types
Each device picks a folder type in the folder’s Advanced tab, and different devices can use different types for the same folder.
| Folder type | What it does | Good for |
|---|---|---|
| Send & Receive | Sends local changes and applies changes from other devices. The default. | Everyday shared folders |
| Send Only | Ignores changes from other devices. If they drift, the Override Changes button pushes this device’s state to everyone. | A master copy that only one device should edit |
| Receive Only | Applies changes from other devices and passes them on, but local changes aren’t sent out. Revert Local Changes undoes them. | Mirrors, backup targets, an always-on server |
| Receive Encrypted | Stores only encrypted data, for devices you don’t fully trust. Still marked beta in the docs, and it can only be set when the folder is added. | Off-site copies on someone else’s hardware |
Be careful with Revert Local Changes on a Receive Only folder. It deletes files that were added locally and re-syncs anything modified or deleted, so make sure nothing you need lives only on that device.
Rescan Interval
Older Syncthing versions found changes mainly by rescanning on a timer, so a short rescan interval on a big folder meant constant disk load. Current versions turn on Watch for Changes by default: the filesystem tells Syncthing what changed, and it picks changes up within seconds. The full rescan still runs as a safety net, hourly by default.
With the watcher on, you can safely raise the full rescan interval on a large folder. Click Edit on the folder, open the Advanced tab and change Full Rescan Interval (s). If you raise it and need something out now, the Rescan button on the folder starts a scan immediately.
On Linux, the watcher needs one inotify watch per directory. If a folder has tens of thousands of directories, check fs.inotify.max_user_watches. The Syncthing FAQ suggests raising it to 204800.
Ignore Patterns
Each folder can have a .stignore file in its root, and you can edit it from the Ignore Patterns tab in the folder’s Edit dialog. The file itself never syncs, so every device keeps its own list. If you want one shared list, put the patterns in a normal file inside the folder and pull it in with #include. That file does sync.
Ignore patterns fix a problem I’ve run into more than once. If you download something straight into a synced folder, Syncthing can pick up the half-finished file and send it out, then send the full file again when the download completes. That wastes bandwidth and leaves junk versions on any peer that keeps versions. Ignore the partial-download extensions:
// Partial downloads and temp files
*.part
*.crdownload
*.tmp
// OS clutter, removable if it blocks a directory delete
(?d).DS_Store
(?d)Thumbs.dbA few rules worth knowing. * doesn’t cross directory separators but ** does. A leading ! un-ignores something. (?i) makes a pattern case-insensitive. The first pattern that matches a file wins, so put your ! exceptions above the broader patterns they override. On a new folder, the Ignore Patterns tab only becomes editable after you save the folder once.
File Versioning
Short answer first. Syncthing file versioning is off by default and is set per folder on each device. When it’s on, and a change from another device replaces or deletes a file, Syncthing moves the old copy into a .stversions folder in the folder root instead of throwing it away. Changes you make on the device itself are not versioned there. It’s similar to the revision history in Dropbox, except you choose how much to keep.
You’ll find it under Edit > File Versioning on the folder. In older versions it was buried in the Advanced settings; it has its own tab now. There are four types:
| Type | What it keeps | Main setting (GUI default) |
|---|---|---|
| Trash Can | Moves replaced or deleted files into .stversions | Clean out after (days), 0 keeps them forever (default 0) |
| Simple | Date-stamped copies, a fixed number per file | Keep Versions (default 5), plus an optional clean-out age |
| Staggered | Thins versions out over time: one every 30 seconds for the first hour, hourly for the first day, daily for the first 30 days, then weekly | Maximum Age (default 365 days) |
| External | Whatever your command does with the file | Command, using %FOLDER_PATH% and %FILE_PATH% |
Two more settings apply to all of them. Cleanup Interval controls how often old versions are pruned (3600 seconds by default). Versions Path lets you keep versions somewhere other than .stversions, such as a second disk.
I use Staggered File Versioning and it’s the one I’d pick. Recent edits are covered in fine detail and old ones thin out on their own. For the details on each type, see the Syncthing versioning documentation.
Restoring is easy. Click the Versions button on the folder (it shows up for every type except External), find the file and pick the revision. You can also browse .stversions directly. Simple and Staggered versions keep the original name with a date stamp added, like report~20261001-142233.docx.
Here’s the part most guides skip. Because only changes from other devices are versioned, the device that sees everyone’s edits as remote changes is the one nobody edits on directly: an always-on node. Run Syncthing on a dedicated server, share every folder with it, turn on Staggered versioning there and maybe make it Receive Only. That one box then holds old versions of every change from every member, and it’s online even when all the laptops are asleep. Give it enough disk for a full copy plus versions.
Versioning still isn’t a backup. The Syncthing FAQ says so directly, because modifications and deletions propagate to every device. Back up the server’s copy separately.
Devices
Introducers
Marking a peer as an “Introducer” is very handy when used right. You’ll find the checkbox in the Sharing tab when you edit a device.
Say you share some files with John, and John wants to share the same files with his friend Sally. You don’t know Sally, but you don’t mind John’s friends connecting to you as a peer, since more peers make transfers faster and more reliable. Instead of Sally sending you her device ID, you mark John as an introducer. Any device John shares those folders with automatically becomes your peer too.
It cuts both ways. If John removes a device, it’s removed from your list too the next time you connect to him. If you remove an introduced device yourself, John re-adds it as long as he’s still marked as your introducer. So to get rid of a dead peer, remove it on the introducer first, or untick Introducer while you clean up.
Most of Syncthing is easy to figure out by clicking around, but these are the spots that cost me time early on. When you hit something that isn’t covered here, the Syncthing documentation is detailed and really worth a look.
Need a server for an always-on Syncthing node? Ask us for a quote.