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://syncthing.net/

License

MPL-2.0

Created

26 Nov 13

Last Updated

05 Oct 24

Latest version

v1.28.0-rc.3

Primary Language

Go

Size

120,638 KB

Stars

64,327

Forks

4,249

Watchers

64,327

Language Usage

Language Usage

Star History

Star History

Recent Commits

  • Jakob Borg (04 Oct 24)

    chore(db): process "unchanged" files anyway (#9755) Skipping these makes the sequence numbering inconcistent; we've received a file and suppsedly added it to the database, but if you check the sequence number afterwards it didn't increase, i.e., we trigger [this failure condition](https://github.com/syncthing/syncthing/blob/47f48faed7331b7ba4ad3d6775d5cffacf8931b5/lib/model/indexhandler.go#L447-L459) and, similarly, a future update will look like there was a hole in the numbering. I propose to at least temporarily remove this optimisation in order for things to make more sense. Is there a reason to keep this beyond saving some database operations?

  • Jakob Borg (02 Oct 24)

    fix(upgrades): avoid clobbering cache when filtering (#9752) The slice is shared, can't overwrite elements of it. (Upgrade server only thing.)

  • Jakob Borg (02 Oct 24)

    build(deps): update dependencies (#9751)

  • tomasz1986 (30 Sept 24)

    chore(build): use conventional commit title in update script (#9747)

  • Jakob Borg (30 Sept 24)

    Merge branch 'infrastructure' * infrastructure: feat(ursrv): new metrics based approach

  • Jakob Borg (21 Sept 24)

    feat(ursrv): new metrics based approach

  • Syncthing Release Automation (30 Sept 24)

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

  • Jakob Borg (29 Sept 24)

    chore(model): improve tracking sentPrevSeq for index debugging (#9740)

  • Emil Lundberg (29 Sept 24)

    fix(model): prevent division by zero in numHashers (#9744) This should prevent the panic that occurred in this test run: https://github.com/syncthing/syncthing/actions/runs/11095876010/job/30825046810 ``` 2024-09-29T21:01:53.5425372Z === RUN TestIssue4357 2024-09-29T21:01:53.5505943Z panic: runtime error: integer divide by zero [recovered] 2024-09-29T21:01:53.5512200Z panic: runtime error: integer divide by zero 2024-09-29T21:01:53.5516633Z 2024-09-29T21:01:53.5523018Z goroutine 2655 [running]: 2024-09-29T21:01:53.5524157Z github.com/thejerf/suture/v4.(*Supervisor).runService.func2.2() 2024-09-29T21:01:53.5527176Z /home/runner/go/pkg/mod/github.com/thejerf/suture/[email protected]/supervisor.go:563 +0xd0 2024-09-29T21:01:53.5530556Z panic({0x1080d20?, 0x1851290?}) 2024-09-29T21:01:53.5564723Z /home/runner/go/pkg/mod/golang.org/[email protected]/src/runtime/panic.go:785 +0x132 2024-09-29T21:01:53.5566616Z github.com/syncthing/syncthing/lib/model.(*model).numHashers(0xc0006f6180, {0x117dc1a, 0x7}) 2024-09-29T21:01:53.5568061Z /home/runner/work/syncthing/syncthing/lib/model/model.go:2581 +0x210 2024-09-29T21:01:53.5569912Z github.com/syncthing/syncthing/lib/model.(*folder).scanSubdirsChangedAndNew(0xc00c38c808, {0x0, 0x0, 0x0}, 0xc0003fc060) 2024-09-29T21:01:53.5571612Z /home/runner/work/syncthing/syncthing/lib/model/folder.go:653 +0x250 2024-09-29T21:01:53.5573010Z github.com/syncthing/syncthing/lib/model.(*folder).scanSubdirs(0xc00c38c808, {0x0, 0x0, 0x0}) 2024-09-29T21:01:53.5574447Z /home/runner/work/syncthing/syncthing/lib/model/folder.go:512 +0xd0f 2024-09-29T21:01:53.5576011Z github.com/syncthing/syncthing/lib/model.(*folder).scanTimerFired(0xc00c38c808) 2024-09-29T21:01:53.5577367Z /home/runner/work/syncthing/syncthing/lib/model/folder.go:916 +0x46 2024-09-29T21:01:53.5579010Z github.com/syncthing/syncthing/lib/model.(*folder).Serve(0xc00c38c808, {0x1307650, 0xc0006a0910}) 2024-09-29T21:01:53.5580428Z /home/runner/work/syncthing/syncthing/lib/model/folder.go:205 +0xd7e 2024-09-29T21:01:53.5581624Z github.com/thejerf/suture/v4.(*Supervisor).runService.func2() 2024-09-29T21:01:53.5582978Z /home/runner/go/pkg/mod/github.com/thejerf/suture/[email protected]/supervisor.go:567 +0x249 2024-09-29T21:01:53.5584400Z created by github.com/thejerf/suture/v4.(*Supervisor).runService in goroutine 2651 2024-09-29T21:01:53.5585872Z /home/runner/go/pkg/mod/github.com/thejerf/suture/[email protected]/supervisor.go:541 +0x32a 2024-09-29T21:01:53.5661413Z FAIL github.com/syncthing/syncthing/lib/model 5.510s ``` ### Testing I have not been able to reproduce the panic throughout a few minutes of continuously running the test without this fix, but judging by the traceback it seems to only happen if the test happens to delete the folder from config at the same time `scanTimerFired` triggers.

  • Jakob Borg (29 Sept 24)

    chore(model): log sequence anomaly when update appears not to "take" (#9741) I hope this doesn't fire, but πŸ‘» I'm Seeing Things I Can't Explain πŸ‘»

  • maxice8 (29 Sept 24)

    docs(docker): add healthcheck to docker-compose (#9742) ### Purpose Syncthing had a healthcheck API for a while, and the example Dockerfile for it has it in the form of: HEALTHCHECK --interval=1m --timeout=10s \ CMD curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1 Let's add it to the docker-compose as well ### Testing I use this docker-compose.yml file to deploy via ansible (using community.docker.docker_compose_v2) to my machine with success, using `wait: true` in ansible for it to use `docker compose up --wait`. ```yml - name: Enable syncthing docker community.docker.docker_compose_v2: project_src: /srv/syncthing wait: true wait_timeout: 90 ```

  • Simon Frei (28 Sept 24)

    fix(ignore): ensure normalization of patterns and paths match (fixes #9597) (#9717) In ignores, normalize the input when parsing it. When scanning, normalize earlier such that the path is already normalized when checking ignores. This requires splitting normalization of the string from normalization of the file, as we don't want to attempt the latter if the file is ignored. Closes #9598 --------- Co-authored-by: Jakob Borg <[email protected]>

  • Jakob Borg (28 Sept 24)

    fix(ur): actually send usage report directly when enabled (#9736) There was a bug that the unique ID was not set when reporting was enabled, and thus the reports where rejected by the server. The unique ID got set only on startup, so next time Syncthing restarted. This makes sure to set the unique ID when blank.

  • Jakob Borg (28 Sept 24)

    chore(model): remove GUI/log warning on sequence anomaly (#9738) I can see already in our Sentry data that there are a fair amount of these warnings, and mostly the shape of it. Asking users to report them will likely cause a lot of reporting effort to fairly little additional value. We can do that when/if we have something more targeted to ask for.

  • Jakob Borg (26 Sept 24)

    Merge branch 'infrastructure' * infrastructure: feat(stupgrades): filter returned releases per compatibility

  • Jakob Borg (24 Sept 24)

    feat(stupgrades): filter returned releases per compatibility

  • Jakob Borg (25 Sept 24)

    refactor(upgrade): rename insecureGet which is no longer insecure (#9735)

  • Jakob Borg (25 Sept 24)

    chore: add more advanced policy configuration (#9726) This codifies a review policy which is closer to what I always envisioned, but which isn't expressible using the normal checks in the GitHub GUI. It would move the commit approval check from GitHub into the policy-bot check which is already present to enforce the conventional-commits standard. Approvals in general would still work the same -- it's just that the bot picks it up and toggles the status accordingly. From a GitHub side when this is enabled we'd remove the requires-review check from there and let the bot decide that part. We would still require builds and tests to pass of course. There are a couple of relexations from the current policy, details in the code but briefly: - Changes to translations or dependencies by a trusted person don't require review - Trivial changes by a trusted person, explicitly marked as such, don't require review This enables less bureaucracy for things like adding new translated languages and updating dependencies, and enables the trivial-change workflow to a larger audience than, like, me, who could always just bypass the rules by way of being admin.

  • Jakob Borg (24 Sept 24)

    chore: enable TLS client cache for HTTPS where appropriate (#9721) https://forum.syncthing.net/t/infrastructure-report-discovery-stuff/22819/4

  • Jakob Borg (23 Sept 24)

    fix(connections): announce PtP links again (fixes #9730) (#9731)

  • Syncthing Release Automation (23 Sept 24)

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

  • bt90 (22 Sept 24)

    chore(ursrv): add Nix detection (#9729) Classify the builder `nix@nix` as [Nix](https://nixos.org/) ![369684243-172cab09-df6f-449a-a638-1f0a0c080ab3](https://github.com/user-attachments/assets/37a6e0a5-bdcb-4b31-8b36-eaaa42423382)

  • bt90 (22 Sept 24)

    chore(ursrv): extend F-Droid detection (#9728) Our f-droid apps are currently built using `vagrant@bookworm`: ![grafik](https://github.com/user-attachments/assets/172cab09-df6f-449a-a638-1f0a0c080ab3)

  • Emil Lundberg (22 Sept 24)

    fix(gui): get version from header when not authenticated (#9724) ### Purpose Since #8757, the Syncthing GUI now has an unauthenticated state. One consequence of this is that `$scope.versionBase()` is not initialized while unauthenticated, which causes the `docsURL` function to truncate links to just `https://docs.syncthing.net`/, discarding the section path. This currently affects at least the "Help > Introduction" link reachable both while logged in and not. The issue is exacerbated in https://github.com/syncthing/syncthing/pull/9175 where we sometimes want to show additional contextual help links from the login page to particular sections of the docs. I don't think it's any worse to try to preserve the section path even without an explicit version tag, than to fall back to just the host and lose all context the link was attempting to provide. ### Testing - On commit b1ed2802fb944bb5e3dea3b4a80c05db3a9df7c3 (before): - Open the GUI, set a username and log out. - Open the "Help" drop-down. The "Introduction" item links to: https://docs.syncthing.net/ - Log in. - Open the "Help" drop-down. The "Introduction" item links to: https://docs.syncthing.net/v1.27.10/intro/gui - On commit 44fef317800ce1d0795b4e2ebfbd5e9deda849ef (after): - Open the GUI, set a username and log out. - Open the "Help" drop-down. The "Introduction" item links to: https://docs.syncthing.net/intro/gui - Log in. - Open the "Help" drop-down. The "Introduction" item links to: https://docs.syncthing.net/v1.27.10/intro/gui ### Screenshots This is a GUI change, but affecting only URLs in the markup with no visual changes. ### Drawbacks If a `docsURL` call generates a versionless link to a docs page that doesn't exist on https://docs.syncthing.net - presumably because Syncthing is not the latest version and links to a deleted page? - then this will lead to GitHub's generic 404 page with no link to the Syncthing docs root. Before, any versionless link would also be a pathless link, leading to the Syncthing docs root instead of a 404 page.

  • Jakob Borg (21 Sept 24)

    fix(connections): skip point-to-point interfaces when listing LANs (fixes #9719) (#9720) Point-to-point interfaces are typically VPNs and similar which, for our purposes, do not qualify as LANs.

  • Jakob Borg (21 Sept 24)

    build(deps): update all dependencies (#9723)

  • Sonu Kumar Saw (21 Sept 24)

    chore(connections): lower log level from INFO to DEBUG for "already connected to this device" messages (fixes #9715) (#9722) ### Purpose The primary aim of this change is to minimize log clutter in production environments. There are many lines in the logs coming from an expected race condition when two devices connect `already connected to this device`. These messages do not indicate errors and can overwhelm the log files with unnecessary noise. By lowering the logging level, we enhance the usability of the logs, making it easier for users and developers to identify actual issues without being distracted ### Testing 1. Build syncthing locally 2. Start two Syncthing instances ```bash ./syncthing -no-browser -home=~/.config/syncthing1 ./syncthing -no-browser -home=~/.config/syncthing2 ``` 3. Enable the DEBUG logs from UI for `connections` package 4. Connect the synching instances by adding remote devices from the UI 5. Observe the logs for the message `XXXX already connected to this device` ### Screenshots ![image](https://github.com/user-attachments/assets/882ccb4c-d39d-463a-8f66-2aad97010700) ## Authorship Your name and email will be added automatically to the AUTHORS file based on the commit metadata.

  • Jakob Borg (21 Sept 24)

    chore(cmd): clean up commands (#9705) Move infrastructure related commands to under `cmd/infra` and development stuff to `cmd/dev`. The default build command builds the regular user facing binaries: syncthing, stdiscosrv, and strelaysrv.

  • Simon Frei (18 Sept 24)

    chore(fs): put the caseFS as the outermost layer again (#9716) Reasoning in comments. The main motivation is to avoid all the case checks when walking the filesystem. "again" as we already tried once, but it caused a major issue ragarding mtimefs layer. The root of this problem has been fixed in the meantime in ac8b3342a

  • AndrΓ© Colomb (18 Sept 24)

    fix(meta): return read error in forbidden_words_test (#9706) When reading a file fails, the error is currently swallowed / hidden. Probably just a typo.

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 203,893,232
  • Stars 567
  • Date Created 14 Oct 15
  • Last Updated 28 days 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)