Google Closure is usable, but only if you write your app in a way that is google closure compatible, the same goes for any dependencies you pull in. In clojurescript, all code you write, and any pure cljs library, is google closure compatible.<p>Immutable.js is great, but your libraries probably doesn&#x27;t use it, and you have to make sure you use it everywhere as well. This can lead to subtle bugs that boils down to using .value instead of .get(&#x27;value&#x27;), a problem you&#x27;ll rarely encounter in cljs where everything is immutable by default.<p>I haven&#x27;t used systemjs&#x2F;jspm, so I can&#x27;t say anything about that. I can only say that I have yet to encounter a case where figwheel doesn&#x27;t successfully reload my code, whereas I encounter this in webpack&#x2F;react-hot-loader all the time.<p>ES6&#x2F;ES7&#x2F;Typescript are great improvements over ES5. But you have to pair it with Immutable.js for it to be comparable to the offering that cljs provides. Even then, when you have a setup that gives many of the same benefits as cljs, you&#x27;ll have written way more code, and you need to be a bit paranoid to make sure you&#x27;re using the correct API at the correct place, and that you don&#x27;t have any libraries that are incompatible with your setup.<p>In short. While you can have a setup that gives you all the advantages of cljs+om&#x2F;reagent, it&#x27;s just a lot easier to do it in clojurescript.