• 3 Posts
  • 10 Comments
Joined 5 months ago
cake
Cake day: October 22nd, 2025

help-circle
  • 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!


  • 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.



  • 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!



  • 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




  • 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.


  • 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.