Joplin built-in synchronization function

As the title says, I hope you can consider launching this feature if you have the opportunity.
(I only have ideas and will not implement them, but I share my ideas and I will abide by the author's decision whether they are adopted or not)
The idea of ​​this function is roughly the synchronization function built directly into JoplinApp
Not through other servers, mainly for synchronization between intranets
It is a decentralized synchronization concept (similar to the concept of Syncthing)
When Joplin is turned on between devices, other trusted devices can be synchronized with each other based on the settings.
The setting can be based on IP or Hostname (if DNS can be resolved). After setting, the device itself should have a UUID or Token as a unique identification.
Therefore, when the IP or Hostname is different, since the UUID/Token is the same, it will not be recognized as a new device, avoiding trouble caused by renaming the device or different IPs issued by DHCP.
I'm not sure what Joplin prefers to use for the synchronization protocol. I think it should be HTTPS and each device has a self-signed certificate, which also corresponds to what I said in the previous sentence that each device can be identified (because the PrivateKey will be different)
The synchronization speed should be faster because each device knows its last synchronized status, so the synchronization method is not limited by the API restrictions of other cloud vendors, because everything is fully controlled by JoplinApp and can be obtained faster. Different content, faster synchronization of different content
As for if the notes are encrypted, you can also use HTTPS to securely transmit the plaintext ciphertext, which can reduce the time required for another decryption by other devices (if the original device already has plaintext and ciphertext data, I think the secure transmission over HTTPS Under the agreement, there should be no need to ask another device to decrypt again. After all, decryption will take a lot of time, if there are a lot of notes)

advantage:

  • Can increase synchronization speed
  • No need for any additional servers to store synchronized content
  • Same as above, no need for additional App intervention e.g. syncthing
  • Same as above, since syncthing is not used, the problem of IOS being unable to use local file synchronization can be solved
  • There is no need to prepare other cloud space or create a server by yourself (which also requires space) for processing. After all, not everyone can build a server by themselves.
  • No cloud server is required, making it easier to complete synchronization that only requires an intranet or a trusted network

shortcoming:

  • Joplin seems to be unable to synchronize in the background, so a Joplin App must be open at all times during this synchronization process (it is recommended that users of the computer version open the computer version to synchronize with each other)
  • Some people may not know how to find out the intranet IP or Hostname of their own device (not sure if there is technology that can automatically discover the device)
1 Like

I was about to look into what it would take to implement something like this.

My current sync solution is to run a local micro-server with Nextcloud running on it, but maintaining that server has proven to be really complicated and it is the weakest link in my overall personal data management strategy.

If possible I would like to not need any central server and for each of my devices to be totally self-sustaining using decentralized solutions like Syncthing. However, Syncthing does NOT work well in conjunction with Joplin. Somehow, Joplin instances between devices don't consistently find new or updated notes that are synced with syncthing, and they seem to spend a lot of time trying to re-assess the database of notes, which requires constant restarts and updates and is generally very unreliable. The only other solution I could conceive of is of Joplin itself had some form of peer-to-peer decentralized sync option built in that would work across Linux, Windows, and Android, which does not require any other software.

This a known problem with the filesystem sync.

Unless you script and apply one of the workarounds listed there, I think you will still be better and have reliable sync running your own server…

After reading through that Github thread I still feel like adding a built-in decentralized sync option directly to Joplin would be better than relying on an external file sync or trying to fix Joplin to work better with file sync. The github thread seems to show that there are and always will be inherent issues with the filesystem sync strategy.