Reviving SyncTrayzor

So, it happened. As some folks have already noticed (Towards Syncthing 2.0 - #50 by DrSchnagels), SyncTrayzor won’t work with Syncthing 2.0. This was bound to happen at some point, given that there’s been basically no development on SyncTrayzor for 4 years now. The original project is also archived now, so there’s definitely no activity there going forward.

I’ve mentioned in the past (here and here) that I would consider forking SyncTrayzor at some point, if it became absolutetly necessary. Previously I’ve been mostly relying on that it “just works” despite being unmaintained. I don’t really wanted to take SyncTrayzor, because I’m already busy enough as it is :slight_smile:

However, with SyncTrayzor now descending into the void, I had a choice to make: Switch to something else or revive it. I had a look at some of the wrappers out there, but I didn’t find anything that seemed like a drop-in replacement for my SyncTrayzor needs. Specifically, the feature I like (or need) most about SyncTrayzor is it’s excellent conflict resolution tool. It both tells me - via notification/tray - if there are new conflicts, and also where they are. It can also auto-rename one of the two files and rename the other if you tell it which one. I haven’t really seen this feature replicated on another wrapper (if there’s one I’ve missed, feel free to tell me). There are also various other cool things about SyncTrayzor, and it generally worked really well.

As such, I’ve decided to dig into the codebase and see if I can modernize it. There’s a lot of ~10 year old .NET stuff in there that desperately wants to be updated. I’ve experimented a bit with it and so far I’ve managed to move the entire thing from .NET Framework 4.7 (where it currently is) to .NET 8 LTS and finally bring in a modern CEF that is less finicky than the current CEF 86 (DPI without hacks, yay).

While my experiments already work, there’s still a lot left to retouch and update. There are at least two features that I have to rewrite from scratch, as I need to get rid of the old COM-code. At the same time, my time is very limited, so this isn’t something that I can finish in a week or two. Therefore, I don’t have anything to show yet, unfortunately.

The long term goal is to bring the project up to speed, fix Syncthing incompatibilities, and then maintain it in a maintenance-only mode. While new features would be nice, I don’t think I will have the time for it, so the goal is to keep things running largely as-is. I do plan on providing binaries/installers and such. I currently imagine that the “new” SyncTrayzor will be largely compatible with the “old”, so existing users can decide to switch if they want. There can’t be an auto-upgrade as Antony controls the servers, but that’s fine - I wouldn’t want users to switch to a “random” fork without knowing anyway.


For now, my plans are to keep hacking on the codebase and bring stuff into this decade. I plan on showcasing more once I have that. Right now, I’m wondering about the naming: As the old SyncTrayzor is archived, it would make sense to give the “new” SyncTrayzor a new name to distinguish the two. Perhaps SyncTrayzorX or SyncTrayZ? If anyone has an idea for a name, please let me know.

Finally, I would like to thank @canton7 for their excellent work over the years. SyncTrayzor is a very cool project and I would like to see it live on.

15 Likes

Are you sure it needs a new name? It seems GermanCoding/SyncTrazor will differentiate it from cantor7/SyncTrazor. And since cantor7/SyncTrazor is now archived, it’s not really a conflict, per se, as cantor7 is asking people to fork.

Is this your fork here: https://github.com/GermanCoding/SyncTrayzor ?

2 Likes

Yes, that’s the fork. Technically the name could remain, but it may be confusing as over time, things will diverge and then there’s always the distinction between “new” and “old” SyncTrayzor, which can be avoided with a rebrand.

3 Likes

Maybe Canton7 could add a line saying that a supported version is at X?

I for one welcome your efforts to get Syntrayzor working again. I have been using Syncthing Tray and whilst it does what it needs to do well enough, I do miss the little things that trazor has that’s not in Tray.

If there were ever a chance to make a custom tweak to trazor, it would be that the popup monitor in the bottom corner had the ability to stay up rather than closing down at any opportunity. Maybe the coding gods will smile my way in the future (but not at the moment, just getting it back will give me deep joy!!!)

Thank you

2 Likes

Maybe SyncTrayzor 2.0? :slight_smile:

Thank you very much for doing this, by the way. To this day, SyncTrayzor remains the most beginner-friendly integration of Syncthing, so it will be great to have it still available, especially for the less tech-savvy group of users (but not only them, of course).

6 Likes

To keep the great onboarding experience that SyncTrazor has will be a challenge. But a good one. One task will be setting up build pipelines and replicating the “Check for updates” functionality.

Anyway, I have for a long time wanted to give something back to the project, and since dotnet is where I come from, this might be a good place. You can DM me @Nummer378 if you have any tasks you want an extra pair of hands on.

5 Likes

Just a small report that I have tried running Syncthing v2.0.0-rc.14 under the control of @Nummer378’s fork of Synctrayzor on a Windows 11 PC.

Syncthing converted my (smallish) database to v2 format in 0 seconds and it grew from 10MB to 40MB.

Next step will be to try it on the movie folder.

(n.b. Synctrayzor wasn’t installed, I ran it from my dev environment.)

2 Likes

Glad to see someone taking up the mantle. I stopped using Syncthing because SyncTrayZor stopped supporting newer versions… or something like that. It’s been several years, but the message I got was that things were falling apart.

I’m looking for file sync software again, and the entire internet is enamored with Syncthing (when I used it, almost no one had heard of it), which I find pretty strange.

I guess for now I’ll see how well SyncTrayZor works with the latest version of SyncThing and either use that or Resillio Sync.

1 Like

As of today, there are more than 1.1 million devices using Syncthing (and this excludes those that are either restricted to local network or don’t use the official discovery server). This number has grown exponentially in the last few years. With that many users, being a very popular piece of sofware, I think it’s quite natural that Syncthing is becoming a topic of interest for even more people :slight_smile:.

1 Like

This is mostly a proof-of-life post to note that work on SyncTrayzor is still ongoing. I’ve made good progress and SyncTrayzor v2 (which I’ve decided is how the fork differentiates itself) is running relatively smoothly in a modern environment.

All dependencies are upgraded, all features are working (hopefully; SyncTrayzor never had automated tests :sweat_smile:). There are still some things to do before I want to start the beta tests, but the core work is done I believe.

SyncTrayzor had translations on Transifex (which were never checked out in the source repo, but pulled during build). I’ve imported these into source code and am now trying to figure out if we can start a new localization project over on Weblate, as that’s also where syncthing is these days. Haven’t really figured this out yet, though. Until that stuff is figured out translations will just remain frozen.

Some bugs, including the annoying problem where a reinstallation resulted in a “config file version is newer than supported version” are hopefully fixed.

I expect to have working builds that you can try out within the next few weeks, unless life gets in the way :slight_smile:

5 Likes

I’d be happy to help integrating the translation into our existing project on Weblate. It makes it easier to cross reference strings and translations between Web GUI, Android, and finally SyncTrayzor.

It’s usually not a hard challenge, just need to figure out when I can look at it in the coming weeks.

1 Like

I am already running Synctrayzor straight from your main branch. The intention was to help you fins bugs, but I haven’t found a single one yet. :slight_smile:

3 Likes

Beta releases are here!

I’m happy to announce that SyncTrayzor v2 is now in beta!

Binaries can be downloaded from here:

A few things to consider:

  • SyncTrayzor v2 is built for syncthing v2. While SyncTrayzor v2 can interoperate with an existing v1 install, a fresh SyncTrayzor v2 beta install will force you onto a current syncthing v2 RC.

  • You can upgrade an existing SyncTrayzor v1 (64-bit only!) to v2. It will install itself to the same location. However, this results in a bit of a mess as v1 and v2 have different runtimes, which will both be merged. The uninstaller behaviour was also changed, but it won’t work properly for upgraded installs. For this reason I would suggest to uninstall SyncTrayzor v1 first - but be aware that this will result in SyncTrayzor v2 upgrading your syncthing install to syncthing v2.

  • The portable version can run side by side with any existing installed SyncTrayzor (v1 or v2). The portable version uses a locally-managed syncthing install (not your main config or database). If you just want to give v2 a spin, this may be a good approach.

  • SyncTrayzor v1 supported Windows Vista and higher. SyncTrayzor v2 requires Windows 10 or higher. It is technically infeasible to support < Win 10 with modern tools. Syncthing itself (all recent versions) will also not run on < Win 10.

  • SyncTrayzor v2 does not offer 32 bit builds at this time. It’s not so much that 32-bit is impossible to support, but it’s annoying to do. Windows 11 does not support 32-bit either. If there is true demand for 32-bit builds I can look into it, but I would rather not.

  • SyncTrayzor v2 has native binaries for Windows on ARM. These builds are entirely untested, because I do not have a suitable machine (I do have ARMv8 boxes, but they don’t run Windows :grinning:). Everyone is welcome to try them though.

  • Auto upgrades (+ checking for upgrades) are currently disabled, because I haven’t had time to setup the necessary server infrastructure required. You must manually upgrade to any subsequent beta/release version.

Some thoughts for the future

It briefly crossed my mind to have a cross-platform version of SyncTrayzor. With the migration to .NET Core, the base code is already cross-platform. Most platform-specific features could simply be disabled for other platforms.

Unfortunately, the UI code in SyncTrayzor is Windows Presentation Foundation (WPF). WPF is Windows-only. I’ve found one vendor (Avalonia) that offers a cross-platform bridge for WPF, but their pricing is quite hefty and not suitable for an open source project. I probably wont have the time to do a migration to another UI framework. As such, SyncTrayzor on Linux remains a distant dream for now, but it is in the back of my mind.

Binary size

You may notice that SyncTrayzor v2 is significantly larger (about 2x) than v1. This is partly due to SyncTrayzor v2 shipping the .NET runtime, while v1 required a system-wide install. Having the runtime bundled is a bit easier to manage upgrade-wise I think, but it’s an extra 50MB or so. But the main reason v2 is so much larger is that the embedded Chromium browser (CEF) has grown a lot over the past years. An minimal build of CEF is currently about 192MB (CEF Automated Builds). This annoys me a lot, but there’s not much I can do about this at the moment.

6 Likes

Hello Synctrayzor. I have missed you!!!

Thank you for doing this. So far all looks good. One ask for the future, can the little popup window from the bottom right corner be set to stay up? if I click away it clears. I quite like having it open as it’s a simple way of seeing all the activity. :heart_eyes:

1 Like

Windows ships with WebView2 which is effectively Chromium runtime used by Edge, so you could drop CEF and use WebView2.

1 Like

Yes I’ve already looked into WebView2, but there are various problems with this that do not make this a simple drop-in replacement:

  • WebView2 is available in two versions: “fixed” and “evergreen”. Fixed means that you bundle the browser, so in terms of size there’s no advantage over bundling CEF - you’re shipping a browser in both cases. With “Evergreen” you use an OS-provided version of the Edge runtime (which by the way isn’t a normal Edge, it’s a special build), which would be a huge size advantage. However, using evergreen also means that you have zero control over the version in use. Different Windows releases ship different versions, which update at arbitrary times. The internet is quite full of bug reports with the Evergreen version, and you have basically zero control over whether a user runs on a patched version or not.

  • WebView2 doesn’t support several features of CEF: It can’t do offscreen rendering, you can’t customize the renderer much and you can’t as easily inject JavaScript on the fly as with CEF. Neither of these is a hard blocker, but SyncTrayzor makes use of the above features so a switch to WebView2 would require a rewrite in how the browser window is currently managed. So it’s not a drop-in replacement, there’s a bunch of browser rendering logic that requires a rewrite, which is why I put the WebView2 idea on hold.

I’m not fully disregarding the idea of switching to WebView2, but with these issues it’s not something I’m looking to do for 2.0.0.

6 Likes

I went a bit back and forth on this. On one hand, a typical UX expectation is that popups go away if you don’t interact with them, but on the other hand the popup is actually more useful if it can just be tugged away in the corner while the user does something else.

I ended up implementing this as an optional setting, which is now part of beta 2.

Auto-upgrade infrastructure is now also in place. However, SyncTrayzor doesn’t understand pre-release prefixes, so I still can’t offer auto-upgrades in between beta releases. The betas will only upgrade to a version tagged as 2.0.1 or higher.

3 Likes

Thank you so much for the popup option. Very much appreciated

1 Like

I’ve noticed that the popup no longer shows the download progress, so an older trayzor…

v2…

1 Like

Thanks for reporting, fixed in beta.3:

3 Likes