A technology for bi-directional synchronization between at least two entities. Examples of entities include databases, operating system files, applications, email, etc. The two entities can communicate using any appropriate protocol and the two entities can be provided by different vendors using different designs. The synchronization technology includes an Application Programming Interface that enables developers to provide synchronization functionality as an integral part of their distributed applications. Additionally, conflict resolution during synchronization can be customized to suit the particular application. The synchronization technology allows for the management of data anywhere and enables developers to distribute application data and code across multiple tiered environments to applications and users located anywhere.