syncthing/syncthing
Open Source Continuous File Synchronization
How syncthing is put together
Syncthing is a continuous peer-to-peer file synchronization program written almost entirely in Go. The repository contains the main syncthing daemon (cmd/syncthing) plus auxiliary services: a global discovery server (cmd/stdiscosrv) and a relay server (cmd/strelaysrv), each deployable via dedicated Dockerfiles. Core logic lives under lib/ (config, protocol, api, beacon, nat, relay/protocol, tlsutil) and internal/ (db, blob storage, slogutil, generated protobuf types). Data flow: devices announce addresses to the discovery server over TLS (identity derived from client certificates), connect directly or via relays using BEP over TCP/QUIC, and synchronize folder contents tracked in an SQLite-backed database, with a local web GUI served by lib/api.
Languages
Frameworks
Datastores
Infrastructure
Major components
cmd/syncthing
The main synchronization daemon entrypoint, including monitor process, crash/block/heap profiling, and platform-specific helpers.
cmd/stdiscosrv
Global discovery server that accepts device announcements over HTTPS/TLS and serves address lookups, backed by an in-memory database with periodic flushes.
cmd/strelaysrv
Relay server that proxies encrypted traffic between two clients via keyed sessions, with rate limiting, NAT traversal, and optional relay-pool joining.
lib/api
The REST/GUI web server including authentication (api_auth.go), CSRF protection (api_csrf.go), static asset serving, config handling, and support bundles.
lib/config
Configuration model, validation, migrations, and device/folder/GUI/LDAP configuration types.
lib/protocol
DeviceID derivation from certificates and wire-protocol primitives shared across all binaries.
lib/relay/protocol
Wire protocol messages (e.g., SessionInvitation) spoken between clients and the relay server.
internal/db and internal/blob
Database abstractions (typed stores, counts, observed records) and pluggable blob storage including an S3 backend.
A quiet week focused on housekeeping: outgoing network requests now identify themselves properly and documentation was refreshed.
5 weeksWeek of 2026-08-24
Week of 2026-08-24latest
A quiet week focused on housekeeping: outgoing network requests now identify themselves properly and documentation was refreshed.
Week of 2026-08-17
The project upgraded its underlying technology, moving to a newer version of the Go programming language and updating supporting libraries.
Week of 2026-08-10
Several fixes landed this week, including smoother behavior for the device-discovery service and a fix so relaunching the app opens its interface instead of showing an error.
Week of 2026-08-03
A bug-fix-heavy week addressing broken API responses, mishandled receive-only folders, and a potential deadlock in the sync engine.
Week of 2026-07-27
This week was all about making Syncthing faster, with several targeted performance optimizations to file syncing internals.
Over the past five weeks, Syncthing's development shifted from performance tuning and internal cleanups into a stretch of important bug fixes, particularly around the database, file syncing edge cases, and the web interface. The team also modernized the build by moving to Go 1.27 and refreshing dependencies, and made small reliability improvements to the discovery servers that help devices find each other.
Week by week
2026-08-24A quiet week focused on housekeeping: outgoing network requests now identify themselves properly and documentation was refreshed.latest2 changes
Chore
Outgoing requests now carry a proper User-Agent
All HTTP requests Syncthing sends out now include a User-Agent label identifying the app, which helps servers understand what software is contacting them.
Docs
Docs, translations, and contributor list updated
The user interface text, manual, and credits were refreshed with the latest translations and contributors.
2026-08-17The project upgraded its underlying technology, moving to a newer version of the Go programming language and updating supporting libraries.4 changes
Chore
Updated third-party dependencies
External code libraries the project relies on were brought up to their latest versions for security and stability.
Chore
Moved to Go 1.27 as the build standard
Syncthing is now built with Go 1.27, and computers running it need at least Go 1.26 if compiling from source.
Chore
Infrastructure updates merged
Behind-the-scenes infrastructure changes were folded into the main codebase.
Docs
Docs, translations, and contributors refreshed
Routine weekly update to documentation, translations, and the contributor list.
2026-08-10Several fixes landed this week, including smoother behavior for the device-discovery service and a fix so relaunching the app opens its interface instead of showing an error.5 changes
Fix
Discovery server announcements tuned
Devices re-announce their presence slightly less often and with better smoothing, reducing unnecessary chatter on the discovery service.
Fix
Server errors now logged properly
When the discovery server returns an error page, it also records a log entry so problems can be diagnosed later.
Fix
Clearer error responsibility on the global discovery server
Data problems reported to the central discovery server are now correctly attributed to misbehaving client devices rather than the server itself.
Fix
Relaunching the app now opens the web interface
Starting Syncthing again while it's already running now brings up the management screen instead of printing an error message.
Docs
Docs, translations, and contributors updated
Weekly refresh of documentation, translations, and the contributor list.
2026-08-03A bug-fix-heavy week addressing broken API responses, mishandled receive-only folders, and a potential deadlock in the sync engine.5 changes
Fix
Metrics and support bundle API fixed
The built-in web interface now correctly returns usage statistics and diagnostic support bundles when requested.
Fix
Receive-only folder changes handled correctly
Changes made inside folders marked 'receive-only' (where edits aren't supposed to propagate) are now handled properly instead of causing confusion.
Refactor
Code style cleanup from automated tooling
Standard automated style improvements were applied across the codebase with no functional change.
Fix
Database connections and syncing made more robust
Improved handling of database connections and how many files sync at once, fixing a situation where syncing could freeze entirely.
Docs
Docs, translations, and contributors updated
Weekly refresh of documentation, translations, and the contributor list.
2026-07-27This week was all about making Syncthing faster, with several targeted performance optimizations to file syncing internals.5 changes
Refactor
Local database stats included in performance reports
Performance diagnostics now include information about local database entries for better insight.
Refactor
Disk-saving operations optimized
The way Syncthing forces data to be safely written to disk was streamlined, reducing slowdowns during syncing.
Refactor
Filename case-handling cache sped up
The system that remembers whether filenames use upper or lower case got faster, helping on systems where filename casing matters.
Refactor
Rename detection no longer double-checks files
When detecting renamed files, existing files are no longer checked twice, saving wasted effort during syncing.
Docs
Docs, translations, and contributors updated
Weekly refresh of documentation, translations, and the contributor list.
Dependencies and code review
Dependency advisories
Security Watch
No known advisories across 0 scanned dependencies.
No known advisories in the scanned dependencies.
Code review
37 files reviewed; 0 of 1 claimed findings confirmed after verification.
Get this report every week for your repos.
GitZoid learns each repo, reports what changed, and flags what needs attention. One flat price for the whole team.
$19 a month, flat · First 10 outputs free · No card required