My team has been using ClojureScript for about 2 years now, and I’m not sure I follow the problem with using Js libraries from ClojureScript. My experience has been that anything you can do in Vanilla Js, is also possible to achieve via ClojureScript via interop.

Using React components in Reagent is as simple as calling the adapt-react-class function. Any JavaScript React component can be used directly. My team is using the React-Bootstrap https://react-bootstrap.github.io/ library heavily in our projects.

Meanwhile, I’m quite happy with the lack of framework churn in ClojureScript land. Reagent has stayed the same while Js ecosystem continues to change. Even as React changes underneath, the Reagent API continues to be stable. All I have to do to get the performance benefits and fixes is to update the library version. This is a huge win from maintainability perspective where my team doesn’t have to keep chasing frameworks as they change from underneath us.

I also find ClojureScript tooling to be strictly superior to what I’ve seen in Js. The workflow provided by Figwheel and Leiningen is simply amazing in my opinion. On top of that, ClojureScript compiler does code pruning and minificaiton for free, so you end up with lean artifacts for deployment.

My team has now started using ClojureScript on the backend as well. I published the Macchiato project https://macchiato-framework.github.io/ based on the work we’ve done internally that provides a Ring style abstraction for Node. I was able to leverage both ClojureScript libraries such as Bidi and Timbre, as well as NPM modules benefitting from both ecosystem. It’s even possible to use Node middleware directly in Macchiato as seen here https://github.com/macchiato-framework/examples/blob/master/cljsbin/src/cljsbin/middleware.cljs

So, if you don’t want to use the JVM on the backend, it’s perfectly possible to continues using ClojureScript on the server. Lumo https://github.com/anmonteiro/lumo and Planck http://planck-repl.org/ are couple of other projects that facilitate tooling and scripting for the backend.

From what I’ve seen, ClojureScript has built up a lot of momentum in the past year. The tooling as improved dramatically, and and there are many solid libraries available. Many Clojure libraries now cross-compile to ClojureScript as well. I have yet to run into a situation where something was easier to accomplish using plain Js.

ClojureScript is also relatively mature with lots of companies using using it in production today. Personally, I can’t think of a better option to bet on at the moment.