Contributed on 08.05.2006 by Todd Pytel based on an early 0.4 CVS snapshot.

The Horde framework includes a SyncML component compatible with SyncEvolution and other SyncML clients. This component is built in to the core framework and does not need to be separately installed. For synchronization to work, you need to do a few things....

  1. Use fresh Horde sources: Many SyncML changes are applied only to Horde's CVS HEAD branch. The stable branch does include some SyncML support, but it's not as complete as what's found in CVS HEAD. If you really don't want to use CVS HEAD sources entirely, you might be able to get away with updating just the files /horde/rpc.php and /horde/turba/lib/api.php. Try the versions from the stable CVS branch first before trying HEAD, and don't complain if they don't work correctly on top of a release installation. Much better to just use CVS HEAD altogether.
  2. Configure authentication: On the Horde server, the only thing that might require configuration is authentication. By default, SyncEvolution will use md5 authentication, which is nice when you're using HTTP rather than HTTPS. Support for md5 was very recently added to Horde, and will almost certainly have changed by the time you read this. At the moment, see the comments in SyncML/Backend.php around line 404 for details. Alternatively (and more easily), run SyncML over HTTPS and tell SyncEvolution to use basic, non-md5 authentication, by adding
    clientAuthType = syncml:auth-basic serverAuthType = syncml:auth-basic
    to the ~/.sync4j/evolution/horde/spds/syncml/config.txt file (see below).
  3. Configure SyncEvolution: Read the generic SyncEvolution docs, then come back here. Copy one of the prepackaged configuration directories (like etc/scheduleworld_1) to ~/.sync4j/evolution/horde as a starting point. It doesn't matter much which template directory you use. They're not very different, and there's not much to configure. You need to modify (or create) the following items. In ~/.sync4j/evolution/horde/spds/syncml/config.txt:
    syncURL = https://your.horde.site.com/horde/rpc.php [/codefilter_code] Adjust http/https appropriately and make sure the address matches the webroot configuration on the server.
    deviceId = sc-api-nat-<identifier>
    Each computer/username combo that syncs should have a different identifier, for example, using an identifier like "home-myusername" makes sense. The username and password lines should match your Horde username and password. Add the AuthType lines from #2, if you don't want md5 authentication. Next, decide which Evolution databases you want to synchronize. I use only the addressbook, but the others should be similar. In ~/.sync4j/evolution/horde/spds/sources/addressbook_1/config.txt set
    uri = contacts
    That's it. The other components use "calendar" (Kronolith), "notes" (Mnemo), and "tasks" (Nag). If you don't want to synchronize a particular database, be sure to set "sync = none" in its config file.
  4. Try it out:
    syncevolution horde
    If you get errors, check out the Horde Sync wiki for more information on debugging. The sync@lists.horde.org mailing list is also very useful. Check the archives there, to see if there's any info about your problem.
  5. Enhancement (Note: This may be unnecessary when Turba 3 is released.)

    The default configuration for Turba (Horde's address book component) is less than ideal for SyncML, because the turba_objects database table is somewhat oversimplified (for example, all components of an address are combined in a single field). This leads to vcards that are missing some fields when they're synced between Horde and Evolution. Fortunately, Turba is very clever, when it comes to reading its database, and can automagically adjust to many nondefault configurations. If you're creating a fresh Turba installation, you can improve its SyncML capabilities greatly by using this custom sources.php file. If you do this, then you'll also need to make sure the appropriate fields are available in the turba_objects table in your database. Using this postgres script, instead of the one included with Horde, will create an appropriate turba_objects from scratch. For MySQL, there is no such script available, so make the changes manually. Nothing else needs to be done with Turba, apart from using the custom sources.php and creating an appropriate turba_objects table. The Turba code will automatically recognize the new fields and use them correctly in SyncML transactions. Thanks to Karsten Fourmont for providing this solution.


Thanks for the instructions. I'm using syncevolution from ubuntu 10.04 and I read, that the uris in the corresponding config.ini are: uri = ./contacts|./notes|./tasks|./calendar I don't understand the way, these are translated into information to access the Kolab folders via the horde-rpc.php. Is there some deep black magic involved or did I simply miss that part in the documentation?

Just got it to work on Ubuntu 10.04 with Horde (www.contribs.org SME8b6)

All I had to do was set the following as it did not like the SSL Certificates. There might be a neater or more secure way, but it works for me :

SSLVerifyServer = 0 SSLVerifyHost = 0

It didn't like the default sync to start with so I did this :

syncevolution --sync refresh-from-server MyProfile

After that I can just do

syncevolution MyProfile

Make sure in Evolution in Calendar you have the 'Personal' box ticked under 'On this Computer'. On my netbook with 10.10 it was checked by default but not on 10.04 on my desktop.

horde and syncevolution (with genesis-sync)

Install packages add source then

aptitude install syncevolution-evolution

sudo apt-add-repository ppa:genesis-devs/stable
sudo aptitude install genesis-sync

make it start at startup: add genesis sync to System->Preferences-> startup applications

setup the account in evolution then:

syncevolution --template ? lists templates

syncevolution --configure --sync-property "username=yourusername@hordeinstall_fqd"  --sync-property "password=****" scheduleworld creates template which we will then copy and modify

then copy

cd ~/.config/syncevolution/default/peers
sudo cp -a scheduleworld horde

nano horde/config.ini syncURL = https://domain/horde_install_dir/rpc.php password = *****

cd sources

edit connection strings

nano addressbook/config.ini


nano calendar/config.ini


nano memo/config.ini


nano todo/config.ini


Then start up genesis-sync configure synchronisation change or edit sync-service urn off "send changes to horde" for the moment, to do one way sync

run the sync and it gets imported into evolution!

I created a specifc guide for the above combination. I provide the url, but if there is need to integrate it in this wiki it's fine and i may do that on request. The guide should work with any device that runs maemo actually. Here the link:


I think that i would be nice to have a template for horde, that at least, in my verion 1.1.x with frontend 0.9. is not available.

Suggestions are more than welcome to make the procedure as easy as possible.

Best Regards