Have simple re-frame like state management facilities for building web apps with Rum for Clojure and ClojureScript while leveraging its API – Citrus (by Roman Liutikov).

From its documentation:


  • o Decoupled application state in a single atom
  • o No global state, everything lives in Reconciler instance
  • o A notion of a controller to keep application domains separate
  • o Reactive queries
  • o Side-effects are described as data
  • o Async batched updates for better performance
  • o Server-side rendering with convenient state hydration

How it works

With Citrus you build everything around a well known architecture pattern in modern SPA development:

  • o Model application state (with reconciler)
  • o Dispatch events (with dispatch!, dispatch-sync!, broadcast! and broadcast-sync!)
  • o Handle events (with :controllers functions)
  • o Handle side effects (with :effect-handlers functions)
  • o Query state reactively (with subscription, rum/react and rum/reactive)
  • o Render (automatic & efficient ! profit +1)

RealWorld example appl

There is a cljs-rum-realworld-example-app on GitHub.