Hey @jiyinyiyong, I finally had a chance to have a better look at this. It looks pretty cool! I’ve been thinking a lot about what my dream Clojure/ClojureScript stack would look like, and the one part where I just can’t decide what the right way forward is is server/client sync.
I have to admit I also haven’t had enough of a chance to experiment with what’s out there.
I like what Christopher Small is doing with Datsys, it uses Datomic and DataScript, and keeps server and clients synced through a re-frame like event loop over a websocket. It does feel a bit overengineered, and it assumes the client is allowed to see the full database which is a bit of a blocker, but still this general approach I find very appealing.
Then there’s GraphQL / om.next style “let the UI ask for what it needs”. I always stayed clear of om.next because its documentation is just too confusing, but I heard the defn episode about Fulcro recently (used to be Untangled), and that seems to be designed to take the pain out of om.next.
Then there’s the CRDT approach (Conflict-free Replicated Data Type) taken by Replikativ, which is based on some very solid CS foundations.
The main problem for me is that all of these have a pretty steep learning curve. Just to get to the point where you understand how one of these works, have built a demo app, and understand the trade-offs will take several full days.