csync has similar features, however, for now csync doesn’t ask the user when there are conflicts.
A merge algorithm is used (most recent file). When working alone on files, this is generally not a problem, however if 2 different persons add some changes to one file in both directories, one version will be lost.

csync stores history in a central database in ~/.csync
bsync stores history directly in the directories (git like).

I loved bsync. It is easy to use and has distributed database, and written in Python.

There is a problem:
1. What if DIRX is a ssh location on a different port other than 22? What is the syntax?

There is my WISH/TODO list:
1. When about to sync directories, change list should be redisplayed briefly. If I expect “there should be no copy from DIR1 to DIR2″, I should see it in the last part, before “yes/no” prompt, something like:
…
file copies –> : 3
file copies <– : 89
yes/no?

2. Database should keep a track of mount information. If any of the directories was mounted before and not now, sync should be canceled.

3. There should be a versioning option. This will be good for safety and other usages.

1. What if DIRX is a ssh location on a different port other than 22? What is the syntax?

I just commited a patch a few days ago, you should be able to use the -p flag for that.

1. When about to sync directories, change list should be redisplayed briefly. If I expect “there should be no copy from DIR1 to DIR2″, I should see it in the last part, before “yes/no” prompt, something like:
…
file copies –> : 3
file copies < – : 89
yes/no?

2. Database should keep a track of mount information. If any of the directories was mounted before and not now, sync should be canceled.

I’m not sure bsync should be aware of mount points (do you expect rsync to be aware of that ?). But if any mount point changes, the user should see the problem in the transfer summary and cancel it.
With the summary feature you just asked it should be ok no ?
What you could also do is make a bash wrapper script around bsync that exports the mount points before each sync, and exits if a mount point changes.

3. There should be a versioning option. This will be good for safety and other usages.

If you need full versioning, you can use git for that. But we may have an option like the –backup flag of rsync.

I love Unison. But it’s not under active development. So I’m always for trying something new. So far nothing has come close to Unison’s “perfection”. So I like your project’s description giving credit to Unison. I need Unison because my university only allow SSH from outside. Even Syncthing’s relays fail there.

The question: is there an option to always prefer the newer when in conflict? I usually sync from work to home, work at home, and sync back to work. So there’s not much conflict. And almost always the solutions is to prefer the newer. If you don’t have this option, I’ll probably stick to unison, since I can run it non-interactively.

Extra question: I know it is hard to do a dropbox-like behavior. My guess is that it would require something like inotify to run periodically on all machines and propagate when needed. Any plans in this direction?