Thanks! The link does look relevant. I might submit something to that soon. I also used to think that the answer was to have a local database, a remote database, and then sync the two. The problem with relying on sync only is that 1) you make the user wait for the sync when they login (never goes down well these days) 2) syncing everything a user could ever access is likely to be a waste of bandwidth and storage.
What if an admin user with access to everything logs in? I think what is needed is
push (e.g. when the server has something that is likely relevant for a particular client, such as when the user has selected something that they want sync e.g. course, discussion topic, etc) and
pull (random access anytime for the results of a given query as/when the user accesses a particular screen). When data is pulled, it should be stored in the local database and available next time even if the network connection is gone.
I'm already using this with desktop/JVM apps 🙂 and right now building a Jetpack Compose desktop app. Door already generates JDBC code, which can be used in a desktop app via SQLite/JDBC. I also used Paging Multiplatform (
https://github.com/cashapp/multiplatform-paging ) - so the paging PagingSource is also ready to go for Compose desktop.