Reagent and Re-Frame are close conceptually to React and Redux. Their general approach is more or less along the lines of what a React programmer would expect, except that functional programming is more built in to the ClojureScript language. The learning curve is a lot lower than Om Next or Fulcro.

Om Next and Fulcro, on the other hand, are big paradigm shifts. They use co-located queries to keep components relatively self contained. Components just say what they need. They’re able to take a tree of data and convert it to a normalized database using idents. On larger projects that use Redux, you can face decisions about whether to duplicate data in one of your reducers (decoupling and denormalizing them) or use Redux’s connect function to reach out across your application to get data from a reducer for another feature. But then you’ve tied two far-flung parts of your application together. Using Om Next or Fulcro allow you to think more locally within your components.

I’ve also noticed that Om Next and Fulcro also use the code-as-data approach more heavily, which pays off in terms of simplifying client-server communication. Om Next and Fulcro require a stronger knowledge of ClojureScript than Reagent/Re-frame, since things like syntax quoting and multi-methods tend to be used more.

Fulcro is built on Om Next, and it takes care of a lot of things you would need to do yourself if you were to use Om Next. It’s a bit more opinionated. But it also has much more extensive documentation and a nice template with dev tools and a backend server. One misconception I had early on was that Om/Om Next was tied to Datomic, which caused me to look elsewhere for a while. But that is fortunately not true. Works great with Postgres and Walkable.

Rum looks nice, but when I tried to use it, I ran right into an open bug around controlled inputs which I needed for my use case.

It’s probably evident that I really like Fulcro/Om Next. But I would recommend using Reagent to anyone getting started with Clojure(Script).