Learning syncthing?

I have two questions. First of all, I love syncthing, it has made my life tremendously easier and I’m sure I speak for many people. Looking back at what software or tools I used to do to keep files in sync was very painful. I would like to learn what it takes so I can contribute to this project in the future and make it even better. I am a programming noob, I know a little about navigating around linux internals in the terminal and that’s it. Which skills, languages, etc do I need to learn in order to contribute to syncthing.

Secondly I have this idea for syncthing. This is related to my first point, contributing, this is not a feature request, I have seen so many open source projects where people come in and say

“this text editor is great, could you please implement a bare metal hypervisor in it so I can edit my text files in the same app as running my virtual machine”

and the project maintainers go

“that’s a great idea, you should submit a pull request and we will submit your patches when you finish”

[radio silence]

So it’s just a showerthought. But do you think this is a good idea?

I imagine a new “pre-syncing” mode in syncthing that helps visualize exclusions and how they interact with the folder tree. How it works is like so. When a new folder is created in syncthing, before it starts syncing, it will show a two-pane window, the left will show a browseable tree of the folder’s contents and the right will show a blank text input field that accepts .stignore inputs. Like the syncthing documentation with all the (honestly a bit confusing) foo bar bazzle stuff, except dynamic. There will be real-time analysis of the ignoring inputs and the folder tree will be overlaid with perhaps icon overlays or tooltips, showing the state of each item and how it relates to the input on the right side (e.g. “this folder will be synced because of [line 1]”, “this item will be deleted if it prevents folder deletion because of [line 2]”, and also allowing multi-level analysis “this item will be excluded” and simultaneously “this item will still be synced despite previous exclusions because subfolder [name] matches [line 3]”

This pre-syncing mode will also extend to receiving folders from other devices, so after accepting the folder, syncthing will show the same pre-syncing exclusion tool, but this time the directory tree is not from not-yet-synced local files, but from the database received from other peers. Similar to the dropbox selective sync window that generates its contents from the cloud. And it is dynamic, so changes in the folder structure from other peers is immediately reflected in the folder tree. Finally applying the exclusions will start the sync.

1 Like

Development happens on GitHub, which uses Git as version control software. For development, syncthing has two basic components: The actual application (“backend”), which is written in Go, a modern programming language designed by Google. Other than that there is the frontend, which is the web interface you can access from your browser. This is written in the three common web components - html, css and javascript.

Syncthing’s documentation covers some of the things needed for development. In order to start “hacking” the code you need to have the source code and be capable of compiling syncthing yourself - the documentation covers this.

2 Likes

There was already a pull request by someone working on something similar, but it was never finished.

Anyways, if you are not a developer already I think it will be very hard to deliver this as your first pull request “while learning”.

It’s simply too big and complicated, as making directory browser is no trivial task.

1 Like

The mentioned PRs are https://github.com/syncthing/syncthing/pull/6288 and https://github.com/syncthing/syncthing/pull/6358.

I concur that this is likely too big a problem to start with. I’d at first decide on whether to put the focus on Go or frontend, then pick a few easy tasks to get yourself familiarized (and find out what you like to do).