A method implemented by one or more data processing apparatus, the method comprising: receiving, from a client device, a request for updates to a client version of a database stored on the client device, the client version of the database corresponding to a version of the database that is locally stored on the client device and locally mutable by the client device independent of other versions of the database, the request including i) a client database version number for the client version of the database and ii) a first cursor specifying a logical position that indicates a particular database entity included in the client version of the database as a starting point for an update; accessing a remote version of the database that is remote from the client device, the remote version of the database including a plurality of database entities (420, 430, 440), each database entity having a remote entity version number that is assigned to the database entity in a monotonically increasing manner between the plurality of database entities (420, 430, 440) for the database each time any database entity is updated in the database; for each respective database entity of a plurality of the database entities (420, 430, 440) included in an ordered subset of database entities that begins with a database entity that matches the particular database entity indicated by the first cursor: determining, based on a comparison of the remote entity version number of the respective database entity and the client database version number, whether the respective database entity has been updated; and when the respective database entity has been updated, providing an entity update (422, 432) to the client device that includes the remote entity version number of the respective database entity; and providing a remote database version number to the client device with at least one provided entity update (422, 432), the remote database version number equal to a highest remote entity version number from among all the database entities (420, 430, 440) in the remote version of the database and being higher than the remote entity version number included with each provided entity update (422, 432), wherein the subset of database entities does not include every database entity in the remote version of the database. receiving, from a client device, a request for updates to a client version of a database stored on the client device, the client version of the database corresponding to a version of the database that is locally stored on the client device and locally mutable by the client device independent of other versions of the database, the request including i) a client database version number for the client version of the database and ii) a first cursor specifying a logical position that indicates a particular database entity included in the client version of the database as a starting point for an update; accessing a remote version of the database that is remote from the client device, the remote version of the database including a plurality of database entities (420, 430, 440), each database entity having a remote entity version number that is assigned to the database entity in a monotonically increasing manner between the plurality of database entities (420, 430, 440) for the database each time any database entity is updated in the database; for each respective database entity of a plurality of the database entities (420, 430, 440) included in an ordered subset of database entities that begins with a database entity that matches the particular database entity indicated by the first cursor: determining, based on a comparison of the remote entity version number of the respective database entity and the client database version number, whether the respective database entity has been updated; and when the respective database entity has been updated, providing an entity update (422, 432) to the client device that includes the remote entity version number of the respective database entity; and determining, based on a comparison of the remote entity version number of the respective database entity and the client database version number, whether the respective database entity has been updated; and when the respective database entity has been updated, providing an entity update (422, 432) to the client device that includes the remote entity version number of the respective database entity; and providing a remote database version number to the client device with at least one provided entity update (422, 432), the remote database version number equal to a highest remote entity version number from among all the database entities (420, 430, 440) in the remote version of the database and being higher than the remote entity version number included with each provided entity update (422, 432), wherein the subset of database entities does not include every database entity in the remote version of the database.