Syncthing

Last updated
Syncthing
Original author(s) Jakob Borg
Developer(s) Jakob Borg et al. [1]
Initial releaseDecember 15, 2013;10 years ago (2013-12-15)
Stable release 1.27.4 [2]   OOjs UI icon edit-ltr-progressive.svg (5 March 2024;40 days ago (5 March 2024)) [±]
Preview release 1.23.5-rc.1 (9 May 2023;11 months ago (2023-05-09) [3] ) [±]
Repository
Written in Go
Operating system Linux, macOS, Windows, Android, BSD, Solaris
Available in38 languages [4]
List of languages
English, German, Greek, Spanish, French, Italian, Polish, Portuguese, Russian, Swedish, Norwegian
Type File synchronization
License MPL 2.0 [5]
Website 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. [6] 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. [7]

Contents

Technology

Syncthing is written in Go and implements its own, equally free Block Exchange Protocol. [8]

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. [9] [10]

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. [11] 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, [12] block re-use [13] and lightweight scanning [14] for changed files, once a full hash has been computed and saved. Syncthing offers send-only and receive-only folder types [15] where updates from remote devices are not processed, various types of file versioning [16] (trash can, simple or staggered versioning, and handing versioning to an external program or script) and file/path ignore patterns. [17] Two different SHA256 hash implementations are currently supported, the faster of which is used dynamically after a brief benchmark on startup. [18] Moving and renaming files and folders is handled efficiently, with Syncthing intelligently processing these operations rather than re-downloading data from scratch. [19]

Infrastructure

Device discovery is achieved via publicly-accessible discovery servers hosted by the project developers, [20] local (LAN) discovery via broadcast messages, device history and static host name/addressing. The project also provides the Syncthing Discovery Server [21] 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. [22]

Syncthing can be used without any connection to the project or community's servers: [23] 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 must be configured via a web browser either locally or remotely (and supports access via proxy server), the REST and Events APIs or one of the community-contributed wrapper programs. [24] 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

History

Syncthing version history (part)
DateVersionMajor Changes
2023-09-251.25.0 [32]
2022-05-041.20.0 [32]
2021-04-061.15.0 [32]
2020-09-151.10.0 [32]
2020-04-211.5.0 [32]
2019-10-011.3.0 [33]
  • New parameter for adjusting database size
  • Better database performance
2019-07-091.2.0 [34]
  • New transport protocol (QUIC)
  • Automatic crash reporting
2019-05-091.1.3 [35]
  • Hotfix for release to fix a panic bug on Windows
2019-04-021.1.1 [36]
  • Add support for TLS1.3
2019-04-221.1.0 [37]
  • User/group ownership follows parent dir
  • Fix hashing performance
2019-01-011.0.0 [38]
  • Limit max simultaneous scans
  • Show limit locally changed files for receive only folders
2016-06-190.14 "Dysprosium Dragonfly" [39]
  • new, extensible sync protocol (full rehashing of folder contents will happen on first restart)
2016-05-170.13 "Copper Cockroach" [40]
  • Serve files while downloading them
  • Unique folder ID separate from label
2015-11-050.12 "Beryllium Bedbug" [41]
  • Connection Relaying
  • Device Discovery over HTTPS

The initial public binary release (v0.2) was made on 30 December 2013. [42]

In October 2014 it was announced by the original author that Syncthing was being rebranded as "Pulse". [43] 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. [44]

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. [45] 0.11 is not backwards compatible with older versions of Syncthing. [45] 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. [45]

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. [46]

1.0.0, codenamed Erbium Earthworm, [47] 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. [48] [49] Despite the change in the major number Jakob Borg, the lead developer, stated that it was otherwise identical to 0.14.55-rc.2 [47]

Alongside the 1.0.0 release the team introduced a new semver-like versioning system with the following criteria: [50]

In 1.1.0 syncthing adopted Go 1.12 and as such loses compatibility with Windows XP and Windows Server 2003 [51]

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. [52]

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. [53]

1.9.0 introduced the option caseSensitiveFS that allowed users to disable the newly added handling for case insensitive filesystems. [54]

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. [55]

See also

Related Research Articles

<span class="mw-page-title-main">ARP spoofing</span> Cyberattack which associates the attackers MAC address with the IP address of another host

In computer networking, ARP spoofing, ARP cache poisoning, or ARP poison routing, is a technique by which an attacker sends (spoofed) Address Resolution Protocol (ARP) messages onto a local area network. Generally, the aim is to associate the attacker's MAC address with the IP address of another host, such as the default gateway, causing any traffic meant for that IP address to be sent to the attacker instead.

The landscape for instant messaging involves cross-platform instant messaging clients that can handle one or multiple protocols. Clients that use the same protocol can typically federate and talk to one another. The following table compares general and technical information for cross-platform instant messaging clients in active development, each of which have their own article that provide further information.

The Web Server Gateway Interface is a simple calling convention for web servers to forward requests to web applications or frameworks written in the Python programming language. The current version of WSGI, version 1.0.1, is specified in Python Enhancement Proposal (PEP) 3333.

A source-code-hosting facility is a file archive and web hosting facility for source code of software, documentation, web pages, and other works, accessible either publicly or privately. They are often used by open-source software projects and other multi-developer projects to maintain revision and version history, or version control. Many repositories provide a bug tracking system, and offer release management, mailing lists, and wiki-based project documentation. Software authors generally retain their copyright when software is posted to a code hosting facilities.

<span class="mw-page-title-main">Zotero</span> Open-source reference management software

Zotero is free and open-source reference management software to manage bibliographic data and related research materials, such as PDF and ePUB files. Features include web browser integration, online syncing, generation of in-text citations, footnotes, and bibliographies, integrated PDF, ePUB and HTML readers with annotation capabilities, and a note editor, as well as integration with the word processors Microsoft Word, LibreOffice Writer, and Google Docs. It was originally created at the Center for History and New Media at George Mason University and, as of 2021, is developed by the non-profit Corporation for Digital Scholarship.

This is a comparison of notable web frameworks, software used to build and deploy web applications.


This is a comparison of notable free and open-source configuration management software, suitable for tasks like server configuration, orchestration and infrastructure as code typically performed by a system administrator.

<span class="mw-page-title-main">Sandboxie</span> Open-source sandboxing computer program

Sandboxie is an open-source OS-level virtualization solution for Microsoft Windows. It is a sandboxing solution that creates an isolated operating environment in which applications can run without permanently modifying the local system. This virtual environment allows for controlled testing of untrusted programs and web surfing.

This is a comparison of online backup services.

The following is a comparison of RSS feed aggregators. Often e-mail programs and web browsers have the ability to display RSS feeds. They are listed here, too.

This is a list of file synchronization software for which there are Wikipedia articles.

Intel Quick Sync Video is Intel's brand for its dedicated video encoding and decoding hardware core. Quick Sync was introduced with the Sandy Bridge CPU microarchitecture on 9 January 2011 and has been found on the die of Intel CPUs ever since.

<span class="mw-page-title-main">FuelPHP</span>

FuelPHP is an open-source web application framework written in PHP which implements the HMVC pattern.

<span class="mw-page-title-main">InterPlanetary File System</span> Content-addressable, peer-to-peer hypermedia distribution protocol

The InterPlanetary File System (IPFS) is a protocol, hypermedia and file sharing peer-to-peer network for storing and sharing data in a distributed file system. IPFS uses content-addressing to uniquely identify each file in a global namespace connecting IPFS hosts.

<span class="mw-page-title-main">Zephyr (operating system)</span> Real-time operating system

Zephyr is a small real-time operating system (RTOS) for connected, resource-constrained and embedded devices supporting multiple architectures and released under the Apache License 2.0. Zephyr includes a kernel, and all components and libraries, device drivers, protocol stacks, file systems, and firmware updates, needed to develop full application software.

<span class="mw-page-title-main">Wiki.js</span> Wiki engine written in JavaScript

Wiki.js is a wiki engine running on Node.js and written in JavaScript. It is free software released under the Affero GNU General Public License. It is available as a self-hosted solution or using "single-click" install on the DigitalOcean and AWS marketplace.

<span class="mw-page-title-main">ActivityPub</span> Decentralized social networking protocol

ActivityPub is an open, decentralized social networking protocol based on Pump.io's ActivityPump protocol. It provides a client/server API for creating, updating, and deleting content, as well as a federated server-to-server API for delivering notifications and content.

MQTT is an ISO standard publish–subscribe-based messaging protocol. It works on top of the Internet protocol suite TCP/IP. It is designed for connections with remote locations where a "small code footprint" is required or the network bandwidth is limited. The publish-subscribe messaging pattern requires a message broker.

References

  1. "AUTHORS" . Retrieved 7 April 2016 via GitHub.
  2. Error: Unable to display the reference properly. See the documentation for details.
  3. "Releases" . Retrieved 2020-06-03 via GitHub.
  4. "The syncthing translation project on Transifex". www.transifex.com. Retrieved 24 August 2020.
  5. "LICENSE" . Retrieved 7 April 2016 via GitHub.
  6. Wallen, Jack (5 January 2016). "Let Syncthing turn your desktop into a local cloud for your mobile device". TechRepublic . CBS Interactive.
  7. "Syncthing 1.0.0 released as open-source P2P sync tool, finally leaves beta". BetaNews. 2019-01-03. Retrieved 2023-10-18.
  8. "Block Exchange Protocol v1" . Retrieved 7 April 2016.
  9. "Security Principles — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  10. "Relaying — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  11. "FAQ — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  12. "FAQ — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  13. "Understanding Synchronization — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  14. "Understanding Synchronization — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  15. "Folder Types" . Retrieved 2020-07-09.
  16. "File Versioning — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  17. "Ignoring Files — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  18. "cmd/syncthing: Add selectable sha256 package (fixes #3613, fixes #3614)". Github.com. 2016-09-22. Retrieved 2017-01-04.
  19. "FAQ — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  20. "Understanding Device IDs — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  21. "Syncthing Discovery Server — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  22. "Relaying — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  23. "Security Principles — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  24. "Community Contributions — Syncthing v0.14 documentation". Docs.syncthing.net. Retrieved 2017-01-04.
  25. "Security Now! Episode 456". Grc.com. Retrieved 4 November 2014.
  26. "Security Now! Episode 603". Grc.com. Retrieved 7 February 2019.
  27. "Security Now! Episode 698". Grc.com. Retrieved 7 February 2019.
  28. "Security Now! Episode 727". Grc.com. Retrieved 14 August 2019.
  29. "Security Now! Episode 734 on YouTube". YouTube.com. Retrieved 3 October 2019.
  30. "Security Now! Episode 781 on YouTube". YouTube.com. Retrieved 1 September 2020.
  31. "Syncing all the things" . Retrieved 7 September 2021.
  32. 1 2 3 4 5 "Versions & Releases — Syncthing documentation". docs.syncthing.net. Retrieved 2023-10-18.
  33. v1.3.0, The Syncthing Project, 2019-10-01
  34. v1.2.0, The Syncthing Project, 2019-07-09
  35. v1.1.3, The Syncthing Project, 2019-05-31
  36. v1.1.1, 2019-05-31
  37. v1.1.0, 2019-05-31
  38. v1.0.0, 2019-05-31
  39. "0.14". Github.com. 19 June 2016.
  40. "0.13". Github.com. 17 May 2016.
  41. "0.12". 14 April 2016.
  42. "Releases". 30 December 2013 via GitHub.
  43. Borg, Jakob (9 October 2014). "Introducing Pulse, and ind.ie" . Retrieved 7 April 2016.
  44. Borg, Jakob (17 November 2014). "Syncthing is still Syncthing" . Retrieved 7 April 2016.
  45. 1 2 3 "Syncthing v0.11.0 Release Notes". Syncthing Community Forum. 14 April 2015. Retrieved 15 October 2020.
  46. "Release v0.13.0 · syncthing/syncthing". GitHub. Retrieved 15 October 2020.
  47. 1 2 "Syncthing graduation day". Syncthing Community Forum. 1 January 2019. Retrieved 15 October 2020.
  48. "Release v1.0.0 · syncthing/syncthing". GitHub. Retrieved 15 October 2020.
  49. "Syncthing 1.0.0 released as open-source P2P sync tool, finally leaves beta". BetaNews. 3 January 2019. Retrieved 15 October 2020.
  50. "Versions & Releases — Syncthing v1 documentation". docs.syncthing.net. Retrieved 15 October 2020.
  51. "Release v1.1.0 · syncthing/syncthing". GitHub. Retrieved 15 October 2020.
  52. "Release v1.2.0 · syncthing/syncthing". GitHub. Retrieved 15 October 2020.
  53. "Release v1.8.0 · syncthing/syncthing". GitHub. Retrieved 15 October 2020.
  54. "Release v1.9.0 · syncthing/syncthing". GitHub. Retrieved 15 October 2020.
  55. "Release v1.10.0 · syncthing/syncthing". GitHub. Retrieved 15 October 2020.