1. A method for sharing and synchronizing data across a plurality of client devices, the method comprising: providing a client application on each of the client devices; and providing a server application on a server; wherein each client application on a client device monitors a datastore on such client device for any changes, and, in response to a change in the datastore on such client device, the client application automatically notifies the server application of the change; wherein each client application, when running on a client device that is online and connected via a network with the server, opens a connection with the server application and registers for notices of changes to data in which such client application is interested; wherein the server application maintains a copy of each client devices' datastore on the server and is able to receive a notification from client applications of changes to datastores on client devices; and wherein, in response to receiving a notification from a client application of a change to a datastore on a client device, the server application updates the server's copy of the datastore with the change, determines if there are any other client applications with open connections to the server that have registered for notices related to the data that was changed in the data store, and, if one or more of such other client applications exist, immediately pushes notice of the change to such other client application(s).