How does upgrades.syncthing.net work

In the documentation it is not stated who runs the https://upgrades.syncthing.net/meta.json service and if it hosts the executables or it is just a redirect to the github release files.

It is not listed in the docs: https://docs.syncthing.net/dev/infrastructure.html

For my syncthing-macosx wrapper I’m writing a custom upgrade server (sparkle framework appcast.xml) which can track the number of downloaded updates and polling on the update file. Which makes it usefull in a anonymous way how many people actually have installed it.

It’s a virtualhost on www.syncthing.net that just serves a static copy of the corresponding GitHub releases API, updated every now and then by a cron:d curl.

(But, if needs be, we could tweak it to tailor responses as necessary. That has been necessary in the past before we had the capability, when we fucked up the upgrade code Syncthing-side. Now that we can, we haven’t needed to.)

1 Like

So you are just translating the github releases to a JSON file which can syncthing read, or is it just a static dump of the github releases JSON response?

That’s not a bad idea, maybe I also run a normal webserver with a cron refreshed github releases -> appcast (with rewritten urls for upgrade download tracking). And then trace the HTTP GET requests and put them in a graph. Which is far easier then maintaining a custom HTTP golang server.

No translation at all, it is the GitHub releases API response - although Syncthing only cares about a small subset of the returned data. We used to talk to the API directly, but this gives more flexibility for the future.

In the past, for example, it would have been nice to be able to return one response to version 1.2.3 clients (buggy) and a different response to 1.2.4 etc clients (normal). We could do that today based on user agent headers.

Good, thats clear. Only the mac updater (sparkle framework) only understands appcast.xml so I have build a translator. Thank you for the answer.

1 Like

For the people who read this forum post, I have updated the documentation accordingly with this PR https://github.com/syncthing/docs/pull/406.

2 Likes