cross-posted from: https://lemmy.ml/post/44815211

Two-way file sync, no remote agent needed

Today Synchi is finally public! It’s designed for syncing files between two locations (local or over SSH). It detects conflicts, and lets you decide what to do.

Why not rsync/Unison/Syncthing?

  • rsync has no memory between runs and is one-way
  • Unison needs to be installed on both sides
  • Syncthing requires always-on daemons

Synchi runs on demand, works over SSH, and only transfers what actually changed.

I use it daily for syncing a shared folder between my machines and an android phone. Works great in combination with Tailscale/WireGuard so that you can sync files remotely.

  • grapemix@lemmy.ml
    link
    fedilink
    arrow-up
    1
    ·
    5 days ago

    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

    • jak0b@lemmy.mlOP
      link
      fedilink
      arrow-up
      1
      ·
      4 days ago

      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.

      • grapemix@lemmy.ml
        link
        fedilink
        arrow-up
        1
        ·
        11 hours ago

        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

        • jak0b@lemmy.mlOP
          link
          fedilink
          arrow-up
          1
          ·
          7 hours ago

          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.

  • OliMoli2137@piefed.social
    link
    fedilink
    English
    arrow-up
    1
    ·
    5 days ago

    Hi, nice project. I already use rclone in bisync mode, so it would be nice if you explained the differences.

  • SayCyberOnceMore@feddit.uk
    link
    fedilink
    English
    arrow-up
    2
    ·
    6 days ago

    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

    • jak0b@lemmy.mlOP
      link
      fedilink
      arrow-up
      2
      ·
      6 days ago

      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

      • BB_C@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        6 days ago

        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!

        • jak0b@lemmy.mlOP
          link
          fedilink
          arrow-up
          1
          ·
          6 days ago

          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!

    • jak0b@lemmy.mlOP
      link
      fedilink
      arrow-up
      1
      ·
      6 days ago

      Yes! On android with Termux terminal.

      (note: If you sync between computer and phone you don’t need to install it on your phone. One side only is enough.)

        • jak0b@lemmy.mlOP
          link
          fedilink
          arrow-up
          1
          ·
          6 days ago

          iOS is tricky since there’s no easy way to set up SSH access to the filesystem like you can on Android with Termux. So unfortunately not really supported at the moment. If you have a jailbroken device it might be possible, but that’s not something I’ve tested.

    • jak0b@lemmy.mlOP
      link
      fedilink
      arrow-up
      1
      ·
      6 days ago

      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