Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

It is actually a great choice for unopinionated server-side web development.

Frontend development is simply awesome in ClojureScript. Give me Reagent + Shadow CLJS over plain React (or React Native) any day.



>Frontend development is simply awesome in ClojureScript

Is that still tied to that google closure abomination ? I've not been in CLJ ecosystem for >5 years now but last time I used CLJS I remember they went all in on google Closure and it was a major PITA to use the rest of JS ecosystem because of it.

Every time I use React I think how it would be great to use Clojure for that, but last time I tried the tooling overhead just killed it for me.


> Is that still tied to that google closure abomination ? I've not been in CLJ ecosystem for >5 years now but last time I used CLJS I remember they went all in on google Closure and it was a major PITA to use the rest of JS ecosystem because of it.

This has been solved now--there's a blessed CLJS solution[1][2] as well as a third-party compiler with NPM support[3] which many prefer.

[1]: https://clojurescript.org/news/2017-07-12-clojurescript-is-n...

[2]: https://cljs.github.io/api/compiler-options/npm-deps

[3]: https://shadow-cljs.github.io/docs/UsersGuide.html#npm


Shadow-cljs makes everything very easy these days.


Yes, ClojureScript is definitely on my learning list, we however decided to avoid one more transpilation tool, and accepted the fact that we have to write typescript.

> Give me Reagent + Shadow CLJS over plain React (or React Native) any day.

So that is for heavy js based applications, not for something light like rails + stimulus.js, right?


For you and anyone else with experience, is that the most common/battle-tested cljs stack?

What about servers-side, any equivalent Django or FastAPI?


The cljs stack I hear about a lot (and use) is ShadowCLJS with reagent (https://reagent-project.github.io/) and re-frame (https://day8.github.io/re-frame/). ShadowCLJS is more of a build tool, but is really well documented and easy to use. Reagent is basically react but a simpler API, and re-frame is a layer on top of that kinda like redux. It's overkill for some apps but I find it's actually super easy to work with and not as much complexity as I thought.

For backend there is luminus (https://luminusweb.com/) or Kit (https://kit-clj.github.io/). They are basically project templates that wire together a ton of popular solutions for various things - database access, migrations, security, html templating, etc. Also includes frontend frameworks like re-frame if you want.

edit: forgot to mention fulcro (https://fulcro.fulcrologic.com/) which is an interesting full stack solution. I haven't used it though so can't comment, but it sure seems documented well!


Thank you. What about leiningen vs boot vs deps.edn? Did any of this come ahead as a winner in the recent years? It's been a while since I've looked into this.


No one uses Boot.

The choice is between Leiningen and deps.edn AKA the official Clojure CLI. Personally, I switched to deps.edn back in 2020 and haven't looked back. I like that it's simpler/does less out of the box and I also use the Git dependency feature all the time (you can reference a git sha as a dependency, not just Maven coordinates).

Something like 90% of it is just listing dependencies (the same packages as it's all just Maven anyway) and for the remaining 10% of configuration there's plenty of resources available for both. They can also interop to some extent.

Other ecosystems have it much worse than Clojure in this regard.


Boot died, sadly. There was some talk of a Boot 3.0 but it never materialized. I think deps.edn took all the steam out of it. Duplicated a lot of functionality and none of the esoteric-ness.


If you want a complete, integrated "stack" that stitches some of the most common libraries together in a uniform structure you might have a look at kit:

https://kit-clj.github.io/


If you're coming to Kit from Luminus make sure you understand Kit's use of Integrant which involves passing `query-fn` down from the route to every function which accesses SQL. It was a deal-breaker for me.


I recently have been building a internal web app for managing customers and am super happy with shadow-cljs (develop/build) + reagent (view) + re-frame (state/events) + garden (css).

I especially like how easy shadow-cljs makes it to utilize both clojars and npm pacakges. I have been using JS/TS for a long time and feel like any webdev without npm packages would not be worth my time, especially for projects at work.

Re-frame has a very robust api for dealing with events, side effects, and state. Once I got used to the concepts in the documentation, very good docs but a little goofy, It has quickly become the most efficient and fun tool I have ever used to prototype complex frontend interfaces :)

Glad to be using cljs at work, but I'm not sure I would use this stack for non-internal tooling though.


Nice to hear a current user! The last part is a bit scary, what would push you against using it for external facing products?


No affiliation, but I think this is a great example CRUD API.

https://github.com/dharrigan/startrek




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: