Syncthing

syncthing.net
Syncthing Icon

Continuous file synchronization between 2 or more clients. It is simple, yet powerful, and fully-encrypted and private. Syncthing can be deployed with Docker, and there are native clients for Windows, Mac, Linux, BSD and Android.

Open Source

Syncthing Source Code

Author

syncthing

Description

Open Source Continuous File Synchronization

#go#p2p#peer-to-peer#synchronization

Homepage

https://forum.syncthing.net/

License

MPL-2.0

Created

26 Nov 13

Last Updated

18 May 24

Latest version

v1.27.7

Primary Language

Go

Size

121,252 KB

Stars

59,952

Forks

4,023

Watchers

59,952

Language Usage

Language Usage

Star History

Star History

Recent Commits

  • luchenhan (16 May 24)

    lib/db: Correct function name in comments (#9520)

  • WangXi (16 May 24)

    lib/connections: Use proper errors.Is check (#9538)

  • dependabot[bot] (16 May 24)

    build(deps): bump github.com/quic-go/quic-go from 0.42.0 to 0.43.0 (#9522) Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.42.0 to 0.43.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/quic-go/quic-go/releases">github.com/quic-go/quic-go's releases</a>.</em></p> <blockquote> <h2>v0.43.0</h2> <h2><em>quic-go.net</em>: Launching a new Documentation Site</h2> <p>With this release, we're launching a new documentation site for the quic-go projects (quic-go itself, HTTP/3, webtransport-go, and soon, masque-go): <a href="https://quic-go.net">quic-go.net</a>.</p> <p>The documentation site aims to explain QUIC concepts and how they are made accessible using quic-go's API. This site replaces the wiki, and the ever-growing README files.</p> <p>A lot of work has gone into the documentation already, but we're by no means done yet. The entire source is public in <a href="https://github.com/quic-go/docs/">https://github.com/quic-go/docs/</a>, and we're happy about community contributions.</p> <h2>HTTP Datagrams (RFC 9297)</h2> <p>This release adds support for HTTP Datagrams (<a href="https://datatracker.ietf.org/doc/html/rfc9297">RFC 9297</a>), both on the client and on the server side (<a href="https://redirect.github.com/quic-go/quic-go/issues/4452">#4452</a>). HTTP Datagrams are used in WebTransport in CONNECT-UDP (<a href="https://datatracker.ietf.org/doc/html/rfc9298">RFC 9298</a>), among others.</p> <p>The new API for HTTP Datagrams is described on the new documentation page: <a href="https://quic-go.net/docs/http3/datagrams/">HTTP Datagrams</a>. The integration of HTTP Datagram support necessitated a comprehensive refactor of the HTTP/3 package, resulting in several breaking API changes listed below.</p> <h2>Breaking Changes</h2> <ul> <li>quicvarint: functions now return an <code>int</code> instead the internal <code>protocol.ByteCount</code> (<a href="https://redirect.github.com/quic-go/quic-go/issues/4365">#4365</a>)</li> <li>http3: <code>Server.SetQuicHeaders</code> was renamed to <code>SetQUICHeaders</code> (<a href="https://redirect.github.com/quic-go/quic-go/issues/4377">#4377</a>)</li> <li>http3: <code>Server.QuicConfig</code> was renamed to <code>QUICConfig</code> (<a href="https://redirect.github.com/quic-go/quic-go/issues/4384">#4384</a>)</li> <li>http3: <code>RoundTripper.QuicConfig</code> was renamed to <code>QUICConfig</code> (<a href="https://redirect.github.com/quic-go/quic-go/issues/4385">#4385</a>)</li> <li>http3: <code>RoundTripOpt.CheckSettings</code> was removed (<a href="https://redirect.github.com/quic-go/quic-go/issues/4416">#4416</a>). Use the new<code>SingleDestinationRoundTripper</code> API instead.</li> <li>http3: the <code>HTTPStreamer</code> interface is now implemented by the <code>http.ResponseWriter</code> (and not the <code>http.Request.Body</code>) (<a href="https://redirect.github.com/quic-go/quic-go/issues/4469">#4469</a>)</li> <li>include the maximum payload size in the <code>DatagramTooLargeError</code> (<a href="https://redirect.github.com/quic-go/quic-go/issues/4470">#4470</a>)</li> </ul> <h2>Other Notable Changes</h2> <ul> <li>GSO and ECN is disabled on kernel versions older than 5 (<a href="https://redirect.github.com/quic-go/quic-go/issues/4456">#4456</a>)</li> <li>http3: logging can be controlled using an <code>slog.Logger</code> (<a href="https://redirect.github.com/quic-go/quic-go/issues/4449">#4449</a>)</li> <li>http3: HEAD requests can now be sent in 0-RTT (<a href="https://redirect.github.com/quic-go/quic-go/issues/4378">#4378</a>)</li> <li>http3: duplicate QPACK encoder and decoder streams are not rejected as required by the RFC (<a href="https://redirect.github.com/quic-go/quic-go/issues/4388">#4388</a>)</li> <li>http3: Extended CONNECT are blocked until the server's SETTINGS are received, as required by the RFC (<a href="https://redirect.github.com/quic-go/quic-go/issues/4450">#4450</a>)</li> <li>http3: HTTP/3 client connections aren't removed if <code>RoundTrip</code> errors due to a cancelled context (<a href="https://redirect.github.com/quic-go/quic-go/issues/4448">#4448</a>). Thanks to <a href="https://github.com/GeorgeMac"><code>@​GeorgeMac</code></a>!</li> <li>http3: sniff Content-Type when flushing the ResponseWriter (<a href="https://redirect.github.com/quic-go/quic-go/issues/4412">#4412</a>). Thanks to <a href="https://github.com/WeidiDeng"><code>@​WeidiDeng</code></a>!</li> <li>The <code>Context</code> exposed on the <code>quic.Stream</code> is now derived from the connection's context (<a href="https://redirect.github.com/quic-go/quic-go/issues/4414">#4414</a>)</li> <li>The UDP send and receive buffer size was increased to 7 MiB (<a href="https://redirect.github.com/quic-go/quic-go/issues/4455">#4455</a>). Thanks to <a href="https://github.com/bt90"><code>@​bt90</code></a>!</li> </ul> <h2>Clarifications on the QUIC Stream State Machine</h2> <h3>Calling CancelWrite after Close</h3> <p>After a long and fruitful discussion (<a href="https://redirect.github.com/quic-go/quic-go/issues/4404">#4404</a>), we decided to clarify that calling <code>CancelWrite</code> after <code>Close</code> on a <code>SendStream</code> (or a bidirectional stream) should cause a state transition from the &quot;Data Sent&quot; to the &quot;Reset Sent&quot; state, as described in <a href="https://datatracker.ietf.org/doc/html/rfc9000#section-3.1">section 3.1 of RFC 9000</a>. This matches the current behavior of quic-go, however, it didn't match the API documentation (fixed in <a href="https://redirect.github.com/quic-go/quic-go/issues/4419">#4419</a>).</p> <p>This means that stream data will not be delivered reliably if <code>CancelWrite</code> is called, and that this applies even if <code>Close</code> was called before.</p> <h3>Garbage Collection of Streams</h3> <p>This release also changes the way streams are garbage-collected (and the peer is granted additional limit to open a new stream), once they're not needed anymore, in a subtle way:</p> <ul> <li>for the send direction of streams: <a href="https://redirect.github.com/quic-go/quic-go/issues/4445">#4445</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/quic-go/quic-go/commit/93c4785521c0622e7c4e04d681404f1c802e18c4"><code>93c4785</code></a> http3: sniff Content-Type when flushing the ResponseWriter (<a href="https://redirect.github.com/quic-go/quic-go/issues/4412">#4412</a>)</li> <li><a href="https://github.com/quic-go/quic-go/commit/c0250ce82459ebdc60cc95c39dffed7ee0c0ec6b"><code>c0250ce</code></a> include the maximum payload size in the DatagramTooLargeError (<a href="https://redirect.github.com/quic-go/quic-go/issues/4470">#4470</a>)</li> <li><a href="https://github.com/quic-go/quic-go/commit/34f4d1443f97c3b09e34023cbb912a8a803829a6"><code>34f4d14</code></a> http3: implement on the HTTPStreamer on the ResponseWriter, flush header (<a href="https://redirect.github.com/quic-go/quic-go/issues/4469">#4469</a>)</li> <li><a href="https://github.com/quic-go/quic-go/commit/083ceb42f29c7d25d86e221e5a7a22eb6af1c006"><code>083ceb4</code></a> http3: rename Settings.EnableDatagram to EnableDatagrams (<a href="https://redirect.github.com/quic-go/quic-go/issues/4466">#4466</a>)</li> <li><a href="https://github.com/quic-go/quic-go/commit/e1e5b6294d2cca73f0664f879889780cfa2ae51d"><code>e1e5b62</code></a> README: link to the new documentation site (<a href="https://redirect.github.com/quic-go/quic-go/issues/4464">#4464</a>)</li> <li><a href="https://github.com/quic-go/quic-go/commit/2a37c531438f0d1512f39be9c768c363389be1ae"><code>2a37c53</code></a> http3: add support for HTTP Datagrams (RFC 9297) (<a href="https://redirect.github.com/quic-go/quic-go/issues/4452">#4452</a>)</li> <li><a href="https://github.com/quic-go/quic-go/commit/11b11594b249517098aeabfebb3797e85719dd25"><code>11b1159</code></a> http3: fix race condition in client unit test (<a href="https://redirect.github.com/quic-go/quic-go/issues/4463">#4463</a>)</li> <li><a href="https://github.com/quic-go/quic-go/commit/4b87539b1efd2ffd05996fb2b9a7519a9cdb9cd2"><code>4b87539</code></a> delay completion of the receive stream until the reset error was read (<a href="https://redirect.github.com/quic-go/quic-go/issues/4460">#4460</a>)</li> <li><a href="https://github.com/quic-go/quic-go/commit/bff131e546ad5861fa1ae77766776d08bec9f3bc"><code>bff131e</code></a> delay completion of the send stream until the reset error was delivered (<a href="https://redirect.github.com/quic-go/quic-go/issues/4445">#4445</a>)</li> <li><a href="https://github.com/quic-go/quic-go/commit/12aa63824c7f91d7925bfc0bdb78ae0ad942b3bf"><code>12aa638</code></a> disable GSO and ECN on kernels older than version 5 (<a href="https://redirect.github.com/quic-go/quic-go/issues/4456">#4456</a>)</li> <li>Additional commits viewable in <a href="https://github.com/quic-go/quic-go/compare/v0.42.0...v0.43.0">compare view</a></li> </ul> </details> <br /> [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/quic-go/quic-go&package-manager=go_modules&previous-version=0.42.0&new-version=0.43.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • Syncthing Release Automation (13 May 24)

    gui, man, authors: Update docs, translations, and contributors

  • Jakob Borg (08 May 24)

    build: Use Go 1.22.3 at minimum

  • André Colomb (07 May 24)

    gui: Add Hindi (hi) translation template (#9530) Based on user request from Weblate, user @Scrambled777. Looks promising based on the profile: https://hosted.weblate.org/user/Scrambled777/

  • Syncthing Release Automation (06 May 24)

    gui, man, authors: Update docs, translations, and contributors

  • DerRockWolf (04 May 24)

    lib/connections: Add syncthing_connections_active metric (fixes #9527) (#9528) ### Purpose Adds a new metric `syncthing_connections_active` which equals to the amount of active connections per device. Fixes #9527 <!-- Describe the purpose of this change. If there is an existing issue that is resolved by this pull request, ensure that the commit subject is on the form `Some short description (fixes #1234)` where 1234 is the issue number. --> ### Testing I've manually tested it by running syncthing with these changes locally and examining the returned metrics from `/metrics`. I've done the following things: - Connect & disconnect a device - Increase & decrease the number of connections and verify that the value of the metric matches with the amount displayed in the GUI. ### Documentation https://github.com/syncthing/docs/blob/main/includes/metrics-list.rst needs to be regenerated with [find-metrics.go](https://github.com/syncthing/docs/blob/main/_script/find-metrics/find-metrics.go) ## Authorship Your name and email will be added automatically to the AUTHORS file based on the commit metadata. --------- Co-authored-by: Jakob Borg <[email protected]>

  • otbutz (01 May 24)

    etc: Use 7MiB buffer size (#9524) ### Purpose In preparation for quic-go v0.43.0. see https://github.com/quic-go/quic-go/pull/4455

  • Severin von Wnuck-Lipinski (01 May 24)

    gui: Fix Firefox bookmark favicon (fixes #9506) (#9507) ### Purpose Firefox uses the last specified favicon link for bookmarks, but only if it is available on initial page load. Remove the second link and use ng-href to change the icon instead. I'm not really familiar with AngularJS, feel free to offer suggestions for improvements. ### Testing Briefly tested on Firefox 124.0.2 and Chrome 123.0.6312.105.

  • Syncthing Release Automation (29 Apr 24)

    gui, man, authors: Update docs, translations, and contributors

  • Syncthing Release Automation (22 Apr 24)

    gui, man, authors: Update docs, translations, and contributors

  • Syncthing Release Automation (15 Apr 24)

    gui, man, authors: Update docs, translations, and contributors

  • Jakob Borg (11 Apr 24)

    lib/nat: Don't crash on empty address list (fixes #9503) (#9504)

  • Jakob Borg (08 Apr 24)

    lib/db: Drop indexes for outgoing data to force refresh (ref #9496) (#9502) ### Purpose Resend our indexes since we fixed that index-sending issue. I made a new thing to only drop the non-local-device index IDs, i.e., those for other devices. This means we will see a mismatch and resend all indexes, but they will not. This is somewhat cleaner as it avoids resending everything twice when two devices are upgraded, and in any case, we have no reason to force a resend of incoming indexes here. ### Testing It happens on my computer...

  • tomasz1986 (07 Apr 24)

    gui: Fix missing link to device editor for names with superscript (ref #9472) (#9494) The commit 7e4e65ebf53dd98f0fee3f021c399b12f5966f12 added links to devices listed in the Shared With list in the folder info. However, it only added them to those that had no superscript next to them. With this change, the links are added to all devices regardless of whether they have the superscript next to their names or not. The commit also simplifies the code by using anchors directly instead of wrapping them in spans. Signed-off-by: Tomasz Wilczyński <[email protected]>

  • Jakob Borg (05 Apr 24)

    lib/db: Hold update lock while taking snapshot (#9496)

  • Jakob Borg (05 Apr 24)

    build: Update dependencies (#9497)

  • Syncthing Release Automation (01 Apr 24)

    gui, man, authors: Update docs, translations, and contributors

  • Syncthing Release Automation (25 Mar 24)

    gui, man, authors: Update docs, translations, and contributors

  • Tim Nordenfur (22 Mar 24)

    Removed no longer relevant Bountysource link (#9480) ### Purpose Bountysource no longer exists and the readme link 404s. This removes the Bountysource link and corresponding readme section. Perhaps the section should instead be replaced by other instructions for voting on features.

  • Jakob Borg (21 Mar 24)

    lib/api: Missing return after HTTP error

  • Emil Lundberg (21 Mar 24)

    lib/api: Extract session store (#9425) This is an extract from PR #9175, which can be reviewed in isolation to reduce the volume of changes to review all at once in #9175. There are about to be several services and API handlers that read and set cookies and session state, so this abstraction will prove helpful. In particular a motivating cause for this is that with the current architecture in PR #9175, in `api.go` the [`webauthnService` needs to access the session](https://github.com/syncthing/syncthing/pull/9175/files#diff-e2e14f22d818b8e635572ef0ee7718dee875c365e07225d760a6faae8be7772dR309-R310) for authentication purposes but needs to be instantiated before the `configMuxBuilder` for config purposes, because the WebAuthn additions to config management need to perform WebAuthn registration ceremonies, but currently the session management is embedded in the `basicAuthAndSessionMiddleware` which is [instantiated much later](https://github.com/syncthing/syncthing/pull/9175/files#diff-e2e14f22d818b8e635572ef0ee7718dee875c365e07225d760a6faae8be7772dL371-R380) and only if authentication is enabled in `guiCfg`. This refactorization extracts the session management out from `basicAuthAndSessionMiddleware` so that `basicAuthAndSessionMiddleware` and `webauthnService` can both use the same shared session management service to perform session management logic. ### Testing This is a refactorization intended to not change any externally observable behaviour, so existing tests (e.g., `api_auth_test.go`) should cover this where appropriate. I have manually verified that: - Appending `+ "foo"` to the cookie name in `createSession` causes `TestHtmlFormLogin/invalid_URL_returns_403_before_auth_and_404_after_auth` and `TestHtmlFormLogin/UTF-8_auth_works` to fail - Inverting the return value of `hasValidSession` cases a whole bunch of tests in `TestHTTPLogin` and `TestHtmlFormLogin` to fail - (Fixed) Changing the cookie to `MaxAge: 1000` in `destroySession` does NOT cause any tests to fail! - Added tests `TestHtmlFormLogin/Logout_removes_the_session_cookie`, `TestHTTPLogin/*/Logout_removes_the_session_cookie`, `TestHtmlFormLogin/Session_cookie_is_invalid_after_logout` and `TestHTTPLogin/200_path#01/Session_cookie_is_invalid_after_logout` to cover this. - Manually verified that these tests pass both before and after the changes in this PR, and that changing the cookie to `MaxAge: 1000` or not calling `m.tokens.Delete(cookie.Value)` in `destroySession` makes the respective pair of tests fail.

  • Syncthing Release Automation (18 Mar 24)

    gui, man, authors: Update docs, translations, and contributors

  • Jaspitta (17 Mar 24)

    gui: Open devices on click in Shared With list in folder info (fixes #8972) (#9472)

  • Simon Frei (11 Mar 24)

    lib/model: Don't bump seq on error in index handler (#9459)

  • Simon Frei (10 Mar 24)

    lib/model: Prevent infinite index sending loop (fixes #9407) (#9458) Explanation of what/why in a code comment. Fixes https://github.com/syncthing/syncthing/issues/9407

  • Simon Frei (05 Mar 24)

    lib/scanner: Fix ticker leak in scanner (fixes #9417) (#9451) Move the ticker closer to where it's used and defer stop it to avoid missing a branch. Fixes regression introduced in https://github.com/syncthing/syncthing/commit/2f3eacdb6c1c33650ccdd91f42e842c116200d92 Fixes https://github.com/syncthing/syncthing/issues/9417

  • Jakob Borg (04 Mar 24)

    build: Update dependencies (#9448)

  • Syncthing Release Automation (04 Mar 24)

    gui, man, authors: Update docs, translations, and contributors

Syncthing Website

Website

Syncthing

Redirects

Does not redirect

Security Checks

All 66 security checks passed

Server Details

  • IP Address 185.199.109.153
  • Hostname cdn-185-199-109-153.github.com
  • Location California, Pennsylvania, United States of America, NA
  • ISP GitHub Inc.
  • ASN AS54113

Associated Countries

  • US
  • NL

Saftey Score

Website marked as safe

100%

Blacklist Check

syncthing.net was found on 0 blacklists

  • ThreatLog
  • OpenPhish
  • PhishTank
  • Phishing.Database
  • PhishStats
  • URLhaus
  • RPiList Not Serious
  • AntiSocial Blacklist
  • PhishFeed
  • NABP Not Recommended Sites
  • Spam404
  • CRDF
  • Artists Against 419
  • CERT Polska
  • PetScams
  • Suspicious Hosting IP
  • Phishunt
  • CoinBlockerLists
  • MetaMask EthPhishing
  • EtherScamDB
  • EtherAddressLookup
  • ViriBack C2 Tracker
  • Bambenek Consulting
  • Badbitcoin
  • SecureReload Phishing List
  • Fake Website Buster
  • TweetFeed
  • CryptoScamDB
  • StopGunScams
  • ThreatFox
  • PhishFort

Website Preview

Syncthing Docker

Container Info

syncthing

Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes.

#Backup#Cloud#Other#Tools

DockerHub Metrics

  • Pull Count 202,947,313
  • Stars 545
  • Date Created 14 Oct 15
  • Last Updated 2 months ago

View on DockerHub

linuxserver/syncthing

Run Command

docker run -d \ 
  -p 8384:8384/tcp \
  -p 21027:21027/udp \
  -p 22000:22000/tcp \
  -e PUID=${PUID} \
  -e PGID=${PGID} \
  -v /portainer/Files/AppData/Config/Syncthing:/config \
  -v undefined:/sync \
  --restart=unless-stopped \
  linuxserver/syncthing:latest

Compose File

version: 3.8
services:
  syncthing:
    image: linuxserver/syncthing:latest
    ports:
      - 8384:8384:tcp
      - 21027:21027:udp
      - 22000:22000:tcp
    environment:
      PUID: 1000
      PGID: 100
    volumes:
      - /portainer/Files/AppData/Config/Syncthing:/config
      - undefined:/sync
    restart: unless-stopped

Environment Variables

  • Var Name Default
  • PUID 1000
  • PGID 100

Port List

  • 8384:8384/tcp
  • 21027:21027/udp
  • 22000:22000/tcp

Volume Mounting

  • /portainer/Files/AppData/Config/Syncthing /config
  • /sync

Permissions

  • read ✅ Yes
  • write ✅ Yes
  • admin ✅ Yes

Syncthing Reviews

More Backup and Sync

  • SeaFile Icon

    SeaFile

    seafile.com

    An open source cloud storage and sync solution. Files are grouped into Libraries, which can be individually encrypted, shared of synced. Docker image available for easy deployment, and native clients for Windows, Mac, Linux, Android and iOS.

  • NextCloud Icon

    NextCloud

    nextcloud.com

    Feature-rich productivity platform, that can be used to backup and selectively sync encrypted files and folders between 1 or more clients. A key benefit the wide range of plug-ins in the NextCloud App Store, maintained by the community. NextCloud was a hard fork off OwnCloud.

About the Data: Syncthing

API

You can access Syncthing's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/productivity/backup-and-sync/syncthing

The REST API is free, no-auth and CORS-enabled. To learn more, view the Swagger Docs or read the API Usage Guide.

About the Data

Beyond the user-submitted YAML you see above, we also augment each listing with additional data dynamically fetched from several sources. To learn more about where the rest of data included in this page comes from, and how it is computed, see the About the Data section of our About page.

Share Syncthing

Help your friends compare Backup and Sync, and pick privacy-respecting software and services.
Share Syncthing and Awesome Privacy with your network!

View Backup and Sync (3)