Syncthing

{{Short description|Free and open-source peer-to-peer file synchronization application}}

{{Infobox software

| name = Syncthing

| title = Syncthing

| logo = File:SyncthingLogoHorizontal.svg

| logo caption =

| screenshot = Syncthing-screenshot-dark.png

| caption = Syncthing Web Interface

| collapsible =

| author = Jakob Borg

| developer = Jakob Borg et al.{{cite web|url=https://github.com/syncthing/syncthing/blob/main/AUTHORS|title=AUTHORS|via=GitHub|access-date=7 April 2016}}

| released = {{start date and age|2013|12|15}}

| discontinued =

| programming language = Go

| operating system = Linux, macOS, Windows, Android, BSD, Solaris

| platform =

| size =

| language = English, German, Greek, Spanish, French, Italian, Polish, Portuguese, Russian, Swedish, Norwegian

| language count = 38

| language footnote = {{cite web |title=The syncthing translation project on Transifex |url=https://www.transifex.com/syncthing/syncthing/ |website=www.transifex.com |access-date=24 August 2020 |language=en}}

| genre = File synchronization

| license = MPL 2.0{{cite web|url=https://github.com/syncthing/syncthing/blob/main/LICENSE|title=LICENSE|via=GitHub|access-date=7 April 2016}}

| alexa =

| website = {{URL|https://syncthing.net/}}

}}

Syncthing is a free and open source peer-to-peer file synchronization application available for Windows, macOS, Linux, Android, Solaris, Darwin, and BSD.{{cite web|url=http://www.techrepublic.com/article/let-syncthing-turn-your-desktop-into-a-local-cloud-for-your-mobile-device/|title=Let Syncthing turn your desktop into a local cloud for your mobile device|first=Jack|last=Wallen|date=5 January 2016|website=TechRepublic|publisher=CBS Interactive}} It can sync files between devices on a local network, or between remote devices over the Internet. Data security and data safety are built into its design. Version 1.0 was released in January 2019 after five years in beta.{{Cite web |date=2019-01-03 |title=Syncthing 1.0.0 released as open-source P2P sync tool, finally leaves beta |url=https://betanews.com/2019/01/03/syncthing/ |access-date=2023-10-18 |website=BetaNews |language=en}}

Technology

Syncthing is written in Go and implements its own, equally free Block Exchange Protocol.{{cite web|url=https://docs.syncthing.net/specs/bep-v1.html|title=Block Exchange Protocol v1|access-date=7 April 2016}}

It is a BYO cloud model where users provide the hardware it runs on. It supports IPv6 and, for those on IPv4 networks, NAT punching and relay. Devices that connect to each other require explicit approval (unless using the Introducer feature) which increases the security of the mesh. All data, whether transferred directly between devices or via relays, is encrypted using TLS.{{cite web|url=https://docs.syncthing.net/users/security.html |title=Security Principles — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}}{{cite web|url=https://docs.syncthing.net/users/relaying.html#security |title=Relaying — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}}

Conflicts are handled with the older file being renamed with a "sync-conflict" suffix (along with time and date stamp), enabling the user to decide how to manage two or more files of the same name that have been changed between synching.{{cite web|url=https://docs.syncthing.net/users/faq.html?highlight=conflict#what-if-there-is-a-conflict |title=FAQ — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} GUI Wrappers can use these files to present the user with a method of resolving conflicts without having to resort to manual file handling.

Efficient syncing is achieved via compression of metadata or all transfer data,{{cite web|url=https://docs.syncthing.net/users/faq.html?highlight=compression#why-does-it-use-so-much-cpu |title=FAQ — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} block re-use{{cite web|url=https://docs.syncthing.net/users/syncing.html?highlight=block#blocks |title=Understanding Synchronization — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} and lightweight scanning{{cite web|url=https://docs.syncthing.net/users/syncing.html?highlight=block#scanning |title=Understanding Synchronization — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} for changed files, once a full hash has been computed and saved. Syncthing offers send-only and receive-only folder types{{cite web |title=Folder Types |url=https://docs.syncthing.net/users/foldertypes.html |access-date=2020-07-09 }} where updates from remote devices are not processed, various types of file versioning{{cite web|url=https://docs.syncthing.net/users/versioning.html |title=File Versioning — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} (trash can, simple or staggered versioning, and handing versioning to an external program or script) and file/path ignore patterns.{{cite web|url=https://docs.syncthing.net/users/ignoring.html |title=Ignoring Files — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} Two different SHA256 hash implementations are currently supported, the faster of which is used dynamically after a brief benchmark on startup.{{cite web|url=https://github.com/calmh/syncthing/commit/dda6a84cadcb71fe18f8d6693b23554a1711e5b4 |title=cmd/syncthing: Add selectable sha256 package (fixes #3613, fixes #3614) |website=Github.com |date=2016-09-22 |access-date=2017-01-04}} Moving and renaming files and folders is handled efficiently, with Syncthing intelligently processing these operations rather than re-downloading data from scratch.{{cite web|url=https://docs.syncthing.net/users/faq.html#is-synchronization-fast |title=FAQ — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}}

Infrastructure

Device discovery is achieved via publicly-accessible discovery servers hosted by the project developers,{{cite web|url=https://docs.syncthing.net/dev/device-ids.html?highlight=discovery#connection-establishment |title=Understanding Device IDs — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} local (LAN) discovery via broadcast messages, device history and static host name/addressing. The project also provides the Syncthing Discovery Server{{cite web|url=https://docs.syncthing.net/users/stdiscosrv.html |title=Syncthing Discovery Server — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} program for hosting one's own discovery servers, which can be used alongside or as a replacement for the public servers.

The network of community-contributed relay servers allows devices behind different IPv4 NAT firewalls to communicate by relaying encrypted data via a third party. The relay is similar to the TURN protocol, with the traffic TLS-encrypted end-to-end between devices (thus even the relay server cannot see the data, only the encrypted stream). Private relays can also be set up and configured, with or without public relays, if desired. Syncthing automatically switches from relaying to direct device-to-device connections if it discovers a direct connection has become available.{{cite web|url=https://docs.syncthing.net/users/relaying.html |title=Relaying — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}}

Syncthing can be used without any connection to the project or community's servers:{{cite web|url=https://docs.syncthing.net/users/security.html#information-leakage |title=Security Principles — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} upgrades, opt-in usage data, discovery and relaying can all be disabled or configured independently, thus the mesh and its infrastructure can all be run in a closed system for privacy or confidentiality.

Configuration and management

Syncthing can be configured via a web browser either locally or remotely (and supports access via proxy server), but it is also possible to edit the configuration file directly. The REST and Events APIs or one of the community-contributed wrapper programs.{{cite web|url=https://docs.syncthing.net/users/contrib.html#gui-wrappers |title=Community Contributions — Syncthing v0.14 documentation |website=Docs.syncthing.net |date= |access-date=2017-01-04}} Links to Docker images are also provided on the community contributions page, as well as links to supported configuration management solutions such as Puppet, Ansible and others.

Reception

  • In episode 456 of SecurityNow!, host Steve Gibson praised Syncthing as a potential open-source replacement for BitTorrent Sync,{{cite web|url=https://www.grc.com/sn/sn-456.htm|title=Security Now! Episode 456|publisher=Grc.com|access-date=4 November 2014}} and again referenced it in episodes 603,{{cite web|url=https://www.grc.com/sn/sn-603.htm|title=Security Now! Episode 603|publisher=Grc.com|access-date=7 February 2019}} 698,{{cite web|url=https://www.grc.com/sn/sn-698.htm|title=Security Now! Episode 698|publisher=Grc.com|access-date=7 February 2019}} 727,{{cite web|url=https://www.grc.com/sn/sn-727.htm|title=Security Now! Episode 727|publisher=Grc.com|access-date=14 August 2019}} and in more detail in episodes 734 and 781.{{cite web|url=https://www.youtube.com/watch?v=ogrQgb0csoU&t=5613|title=Security Now! Episode 734 on YouTube|date=October 2019 |publisher=YouTube.com|access-date=3 October 2019}}{{cite web|url=http://www.youtube.com/watch?v=MvOVPE-nCSs&t=89m57s|title=Security Now! Episode 781 on YouTube|date=25 August 2020 |publisher=YouTube.com|access-date=1 September 2020}}
  • A reviewer in LWN writes{{cite web|url=https://lwn.net/Articles/861978/|title=Syncing all the things|access-date=7 September 2021}} "Syncthing leaves a favorable impression. The developers seem to have done the work to create a system that is capable, reliable, secure, and which performs reasonably well. But they have also done the work to make it all easy to set up and make use of — the place where a lot of free-software projects seem to fall down. It is an appealing tool for anybody wanting to take control of their data synchronization and replication needs."

History

class="wikitable mw-collapsible mw-collapsed" style="width:100%"
style="text-align:center;" colspan="3"|Syncthing version history (part)
DateVersionMajor Changes
2023-09-25

|1.25.0{{Cite web |title=Versions & Releases — Syncthing documentation |url=https://docs.syncthing.net/users/releases.html |access-date=2023-10-18 |website=docs.syncthing.net}}

|

2022-05-04

|1.20.0

|

2021-04-06

|1.15.0

|

2020-09-15

|1.10.0

|

2020-04-21

|1.5.0

|

2019-10-011.3.0{{Citation|title=v1.3.0|url=https://github.com/syncthing/syncthing/releases/tag/v1.3.0|publisher=The Syncthing Project|date=2019-10-01}}* New parameter for adjusting database size

  • Better database performance
2019-07-091.2.0{{Citation|title=v1.2.0|url=https://github.com/syncthing/syncthing/releases/tag/v1.2.0|publisher=The Syncthing Project|date=2019-07-09}}* New transport protocol (QUIC)
  • Automatic crash reporting
  • 2019-05-091.1.3{{Citation|title=v1.1.3|url=https://github.com/syncthing/syncthing/releases/tag/v1.1.3|publisher=The Syncthing Project|date=2019-05-31}}* Hotfix for release to fix a panic bug on Windows
    2019-04-02

    |1.1.1{{Citation|title=v1.1.1|url=https://github.com/syncthing/syncthing/releases/tag/v1.1.1|date=2019-05-31}}

    |

    • Add support for TLS1.3
    2019-04-22

    |1.1.0{{Citation|title=v1.1.0|url=https://github.com/syncthing/syncthing/releases/tag/v1.1.0|date=2019-05-31}}

    |

    • User/group ownership follows parent dir
    • Fix hashing performance
    2019-01-01

    |1.0.0{{Citation|title=v1.0.0|url=https://github.com/syncthing/syncthing/releases/tag/v1.0.0|date=2019-05-31}}

    |

    • Limit max simultaneous scans
    • Show limit locally changed files for receive only folders
    2016-06-190.14 "Dysprosium Dragonfly"{{cite web|url=https://github.com/syncthing/syncthing/releases/tag/v0.14.0|title=0.14|website=Github.com|date=19 June 2016}}* new, extensible sync protocol (full rehashing of folder contents will happen on first restart)
    2016-05-170.13 "Copper Cockroach"{{cite web|url=https://github.com/syncthing/syncthing/releases/tag/v0.13.0|title=0.13|website=Github.com|date=17 May 2016}}* Serve files while downloading them
  • Unique folder ID separate from label
  • 2015-11-050.12 "Beryllium Bedbug"{{cite web|url=https://forum.syncthing.net/t/syncthing-syncthing-v0-12-0-beryllium-bedbug/6026|title=0.12|date=14 April 2016}}* Connection Relaying
  • Device Discovery over HTTPS
  • The initial public binary release (v0.2) was made on 30 December 2013.{{cite web|url=https://github.com/syncthing/syncthing/releases?after=v0.4.0|title=Releases|date=30 December 2013|via=GitHub}}

    In October 2014 it was announced by the original author that Syncthing was being rebranded as "Pulse".{{cite web|url=https://forum.syncthing.net/t/archived-introducing-pulse-and-ind-ie/1074|title=Introducing Pulse, and ind.ie|first=Jakob|last=Borg|date=9 October 2014|access-date=7 April 2016}} However, on November 17, the developer decided not to change Syncthing to Pulse and is no longer working with ind.ie. Ind.ie's Pulse is now an officially sanctioned fork of Syncthing.{{cite web|title=Syncthing is still Syncthing|url=https://forum.syncthing.net/t/syncthing-is-still-syncthing/1372|first=Jakob|last=Borg|date=17 November 2014|access-date=7 April 2016}}

    On 22 April 2015, 0.11.0 was released and it introduced conflict handling, language selection in the UI, CPU usage and synching speed improvements, Long filename support on Windows, automatic restarting when there is a problem for example the drive being inaccessible, and support for external versioning software.{{cite web |title=Syncthing v0.11.0 Release Notes |url=https://forum.syncthing.net/t/syncthing-v0-11-0-release-notes/2426 |website=Syncthing Community Forum |access-date=15 October 2020 |date=14 April 2015}} 0.11 is not backwards compatible with older versions of Syncthing. Because of changes to the REST API Syncthing clients that were on 0.10.x wouldn't automatically update to 0.11 as it wasn't compatible with a lot of the 3rd party integrations at the time of its release.

    0.13.0 like many of the older releases of Syncthing is incompatible with clients that are running version 0.12.x and below. 0.13.x separates the folder ids from folder labels. It also now has the ability to serve parts of the file that have already been downloaded to other clients while it is still downloading.{{cite web |title=Release v0.13.0 · syncthing/syncthing |url=https://github.com/syncthing/syncthing/releases/tag/v0.13.0 |website=GitHub |access-date=15 October 2020 |language=en}}

    1.0.0, codenamed Erbium Earthworm,{{cite web |title=Syncthing graduation day |url=https://forum.syncthing.net/t/syncthing-graduation-day/12617 |website=Syncthing Community Forum |access-date=15 October 2020 |date=1 January 2019}} didn't really bring any major changes to the table. It was more of a reflection by the developers on the widespread use of the program and the fact that it had already been in development for almost 5 years at that point.{{cite web |title=Release v1.0.0 · syncthing/syncthing |url=https://github.com/syncthing/syncthing/releases/tag/v1.0.0 |website=GitHub |access-date=15 October 2020 |language=en}}{{cite web |title=Syncthing 1.0.0 released as open-source P2P sync tool, finally leaves beta |url=https://betanews.com/2019/01/03/syncthing/ |website=BetaNews |access-date=15 October 2020 |language=en |date=3 January 2019}} Despite the change in the major number Jakob Borg, the lead developer, stated that it was otherwise identical to 0.14.55-rc.2

    Alongside the 1.0.0 release the team introduced a new semver-like versioning system with the following criteria:{{cite web |title=Versions & Releases — Syncthing v1 documentation |url=https://docs.syncthing.net/users/releases.html |website=docs.syncthing.net |access-date=15 October 2020}}

    • A new version which is protocol incompatible with the previous one would constitute as a major version.
    • A new version which has changes in the REST API or has database or configuration changes which would not allow downgrading would constitute a minor version.
    • If there are no specific concerns as above, it is a new patch version.

    In 1.1.0 syncthing adopted Go 1.12 and as such loses compatibility with Windows XP and Windows Server 2003{{cite web |title=Release v1.1.0 · syncthing/syncthing |url=https://github.com/syncthing/syncthing/releases/tag/v1.1.0 |website=GitHub |access-date=15 October 2020 |language=en}}

    1.2.0 introduces support for QUIC, can now perform automatic crash reporting and deprecates small / fixed blocks. 1.2.0 also dropped support for communicating with Syncthing clients that are running 0.14.45 or older.{{cite web |title=Release v1.2.0 · syncthing/syncthing |url=https://github.com/syncthing/syncthing/releases/tag/v1.2.0 |website=GitHub |access-date=15 October 2020 |language=en}}

    1.8.0 adds an experimental folder option that allows users to specify how file changes should be saved on Copy-on-write file systems and also adds TCP hole punching support.{{cite web |title=Release v1.8.0 · syncthing/syncthing |url=https://github.com/syncthing/syncthing/releases/tag/v1.8.0 |website=GitHub |access-date=15 October 2020 |language=en}}

    1.9.0 introduced the option caseSensitiveFS that allowed users to disable the newly added handling for case insensitive filesystems.{{cite web |title=Release v1.9.0 · syncthing/syncthing |url=https://github.com/syncthing/syncthing/releases/tag/v1.9.0 |website=GitHub |access-date=15 October 2020 |language=en}}

    The 1.10.0 release gave users the ability to toggle whether they would like LAN IPs to be broadcast to the global discovery network.{{cite web |title=Release v1.10.0 · syncthing/syncthing |url=https://github.com/syncthing/syncthing/releases/tag/v1.10.0 |website=GitHub |access-date=15 October 2020 |language=en}}

    See also

    References

    {{Reflist|30em}}