About free software.

Feb 9

Desktop Syncing with ownCloud

A lot of interest was shown for a desktop client that synchronises data between the local machine and ownCloud. Talking about synchronising means that the software tries to keep the content of a local directory on the same current state as one on ownCloud. Whenever a file becomes more recent on one of the both sides its its going to be updated on the other quickly.

As I am currently working on the syncing I thought I could share the plan.

Where we come from

I am working on a desktop client based on a program called mirall. Mirall was started by Duncan Mac Vicar (github) and I joined the development (github) a couple of month ago. Mirall is witten in C++, currently Qt based.

Mirall uses csync, a universal file syncronizer written by Andreas Schneider as a backend. That works great for local and ftp attached storages, but as ownCloud is webDAV based, and csync was not supporting webDAV, we had to further investigate. In an SUSE sponsored hackweek I did some experiments with an external tool called sitecopy and implemented a sitecopy based backend for mirall.

That works nice for a one-way usecase of syncing - whenever something on your local disk changes, it gets automatically pushed to the ownCloud. Together with a fetch functionality which gets all content from the ownCloud that already covers a lot.

But of course the target is to get a fully functional two way syncing.

Improve csync

The decision now is to improve csync and fade off the sitecopy backend, for this

  • Mirall already utilizes csync with good results for local directories and
    ftp servers. csync has proofed to implement the syncing algorithm very well.
  • csync comes with a shared library to link from applications in opposite to the
    sitecopy solution which means calling an external script.
  • the csync library offers a natural interface for people who want to write an
    additional client, for example based on a different gui toolkit.
  • csync offers a command line client! That means that syncing ownCloud from command line comes for free.
  • csync has a clean modular plugin system for the backends.

So as a result the idea is to create a WebDAV backend plugin for csync. To manage
the WebDAV communication, libneon is used. This is work in progress, currently
happing in a dev branch in csync upstream.

Mirall improvements

The work on mirall happens together with miralls upstream. As the ownCloud community is aiming for a specific ownCloud client I will work out options together with Duncan how we can give mirall different names (ownCloud and mirall obviously) and maybe themes and such.

We will target for a system tray tool that allows to manage syncronized folders for the first release, not much more fancy stuff planned now.

Mirall currently is plain Qt, but on the longer run it will get KDE improvements such as KWallet integration to be compiled in optionally on platforms where it makes sense.

Mirall will be available on Linux, Windows and MacOS.


We plan for a beta version of the ownCloud client for early march, at least on  Linux. A first stable version will be released with ownCloud4, again at least for Linux, with second priority Windows.

Other Sync Clients

There is work going on on other desktop sync clients. I know its good to combine efforts in FOSS, but I apologise for staying on the mirall path, I already have been on it for too long. On the other hand I don’t  think its a problem to have more than one client driven by community. Diversity is one of the strength of FOSS.


Already now, even if there is nothing released yet, a big thanks goes to Duncan Mac Vicar, the initial author of mirall, for beeing very cooperative with mirall as well as to Andreas Schneider, the founder of csync, who actively helps to get webDAV support into csync. Both are very enthusiastic about ownCloud which is great and motivating :-)

Many others send in patches, help compiling on other platforms, test and give suggestions. Many thanks for that, your contribution is very appreciated.