The nice thing about egotists is that they don't talk about other people.

--Lucille S. Harper

When said there are no working implementations, this is not fully true. There are two library frameworks that implement the SyncML protocol to some extent. Let us take a look at them:

Sync4j is an approach to create a free implementation of the SyncML protocol in Java. It can be found at It is still in an alpha / planning state, so the things mentioned here might already be incorrect or out of date.

Sync4j has a layered architecture. The layers are: core layer, transport layer, framework layer, and application layer

The core layer is responsible for the actual SyncML handling. It takes care of XML parsing and conversion of the SyncML markup to an internal object representation. It can also reverse this and convert this internal object representation to SyncML text. During this process it makes sure the SyncML protocol syntax and semantics are correct. It also defines a standard set of exceptions.

The transport layer defines standard transport interfaces. Transports can be added by implementing these interfaces. The standards transports, HTTP, OBEX, and WSP, will be implemented in the future.

The framework layer contains two frameworks for building SyncML applications: One for servers and one for clients.

The application layer implements both frameworks. This gives example applications that use sync4j for the actual synchronization.

Although the sync4j project has not actually published any source, it is still under active development.

The sync4j concept seems well thought-through. Although it is in a very alpha stage the development plan is clearly laid out. I hope this toolkit will be available soon for everyone to develop cross-platform SyncML applications with Java.

This might actually happen very soon: On April 8th two students from the University of Fribourg forked from the original project and try to work on a complete solution as a diploma thesis and a semester project. I am looking forward to test my software with theirs!

Unfortunately the Java environment is what keeps me from using sync4j. Java has been known to be very slow and consume much memory. This is a shortcoming on thin clients such as PDAs and servers with heavy load.