Does it work on smartphones
post
Genuine question: How's this different to rsync?
I have rsync installed locally, but not remotely and I'm able to sync changes, so how does this differ?
Edit: ok, I read the article a bit further and found the rsync comparison
Great question! Let me sum it up here for others:
rsync is one-way only and has no memory between runs, every execution starts from scratch. Synchi is two-way, stateful (knows what changed since last sync), and content-aware (uses hashes, so no false positives from timestamp changes). It also handles conflicts explicitly instead of silently overwriting.
That said, rsync is still the better tool for backups and one-way mirroring. Synchi is for when you need true bidirectional sync.
Here is also a comparison with unison and syncthing: https://jakobkreft.github.io/synchi/why.html
Maybe I missed it, but you don't seem to mention anywhere sub-file sync (binary diffing) support (or presumably the lack of it), which is very important for fast syncing when files actually change!
You are correct! no sub-file sync / binary diffing at the moment. It was my deliberate choice to keep complexity down. In practice, text files where diffing helps are tiny and transfer instantly anyway, and large files like images and videos almost never change partially. The main case where it would matter is something like large database files or VM images. That said, it's not off the table for the future!
I love the concept for this. Syncthing is pretty good but it is annoying to have it running all the time on Android.
I'd love to use something like this to sync my Obsidian md files between computer and phone just when needed. I suspect this could be baked into to an Obsidian plugin to make it pretty seemless for folks.
This is exactly how I use Synchi! Same idea but I use Logseq instead of Obsidian (very similar open-source alternative, worth checking out). Works great for syncing markdown notes between computers and my phone on demand. Of course I need to remember to sync before switching devices, but I prefer this then constant running in the background.
Haven't thought about an Obsidian/Logseq plugin but honestly that sounds like a great idea... For now it's CLI only, but I can definitely see the value.
I will look at this as a replacement for Luckybackup.
Hi, nice project. I already use rclone in bisync mode, so it would be nice if you explained the differences.
Speed conpared to rsync? Hash speed and cpu load compared? Need shell access for ssh? What about two devices across firewalls and internet which you can't control? I think one of the usecase is only sync when you have WiFi. Still want android apk for my lazy ass. Good project
Thanks! I've done some testing, nothing scientific, but I can tell you it transfers at about the same speed as other tools I tested, usually limited by network speed. I spent quite some time optimizing how small files are packaged together for transfer, so there's no slowdown even with many small files compared to a single file of the same total size. Android APK idea is not bad though! I've published 2 Android apps before so will definitely look into it. Current Termux terminal approach is definitely not very user friendly.
Syncthing is pretty unmaintained now, community worries about it get abandoned multiple times. Stick around and introduce your app to those future post and your app will shine. If you are into serious backup, i would look at bareos,but it is way overkill for most ppl and old too, but very good backup pro sumer lvl open source solution. I once tried hard to shop around
Thanks for the kind words! To be fair, Syncthing itself is still actively maintained (they just released 2.0), it was the official Android app that got discontinued due to Google Play issues. Community forks still exist on F-Droid though.
But yeah, Syncthing and Synchi have different workflow. Syncthing needs daemons on all devices and can't sync to a mounted drive, NAS path, or local folders on the same machine. Synchi is on-demand and doesn't care where the two roots are. This is also why I started working on it. I used syncthing for a few years before that.
This might be good on Steam Deck for multiple games that have carry-over data. Just mirror the save data folder of one proton directory into that of the follow-up game’s directory. I assume you can go back to the first game to unlock more stuff to carry over, and not have to manually copy-paste the save folder each time. Just run a sync.
"Synchi does not try to be real-time, automatic, or invisible."
What would be the down side if I tried to automate the sync. Say every 5min on Linux to android.
Nothing wrong with that at all! You can set up a cron job to run Synchi every 5 minutes and it would work just fine. The only minor downside is some wasted compute since it rescans and hashes everything each run, even if nothing changed. For most files like text it's negligible though.
In the future I might look into a lightweight daemon that uses Linux filesystem notifications (inotify) to trigger a sync when something changes.
Syncthing was made for this and has been around for almost a decade now.
I used Syncthing for years, it's great (if you use it and you are happy, then you dont need to switch), but they are quite different. Syncthing requires daemons on all devices and can't sync two local folders on the same machine. Synchi is on-demand, runs only on one side, and doesn't care where the two root folders are.
I wrote a more detailed comparison here: https://jakobkreft.github.io/synchi/why.html
It detects conflicts, and lets you decide what to do.
does it continue to sync the rest on conflict or does it halt for user input?
It compares everything first (scan, diff, hash), then halts before any changes are made. You see a full summary of what will happen, and approve each category separately (copies, deletes). It's designed to be very transparent. Every change must be approved before anything is written.
Conflicts get their own interactive screen where you pick per-file: keep A, keep B, or skip. Nothing is written until you've resolved all of them.
If you want to skip the prompts, --yes flag auto-approves, but conflicts still halt for user input. Flags --force root_a or --force root_b are used for mirrors one way here conflicts are not possible.
but conflicts still halt for user input
i never understood this behavior. starting a large data transfer only to come back an hour later to find it halted at 5% due to some conflict. why not put those files at the end of the queue and resume with the rest?
It doesn't work that way. Conflicts are resolved before any transfer starts. The flow is:
Scan both sides and compare (compute file hashes or just compare mtime, no data transferred)
Show conflicts if any → you resolve them
Show copy/delete summary → you approve
Only then does the actual transfer begin. So you never come back to find it halted mid-transfer. All decisions happen upfront while it's just reading metadata, which is fast even for large trees.
Very nice! I'll keep using unison for now as I need something stable and reliable, but I'll keep an eye on the project and may switch to it eventually.
Totally fair, Unison is solid and I was inspired by it a lot, but its also the reason why I started working on my own version. I was frustrated with it because on Synology/SMB filesystems it kept seeing changed timestamps as modified files, so I'd constantly get fake changes and transfers. Synchi only treats a file as changed if the content hash actually differs.
Also, I once managed to delete my entire home folder because I tried syncing it with Unison to a server and it synced the empty remote folder back to my home, wiping everything. That's exactly the kind of human error Synchi tries to prevent by being very explicit and verbose about what it's about to do.
Thank you for keeping an eye on it!
Neat.
So what advantage does this have over other sync tools?
Compared to Syncthing or Resilio, it sounds like you need a VPN, otherwise it's LAN-only (this is the advantage of agent-based solutions like Syncthing).
Plenty of LAN-centric solutions exist, even a simple script. How does this compare to things like that?
all 26 comments