cljsrn 2025-05-19

At the risk of asking an often asked question, what's the best way to build RN apps with Clojurescript these days? I'm not a mobile dev, but I'm wanting to get a poc built quickly. I'm also curious if ditching Clojurescript and just writing JavaScript may be a better way to take advantage of the tooling that's out there. Idk. I'm pretty ignorant about mobile dev, so I'm looking for perspective/advice.

For building a quick mobile, I will use https://docs.expo.dev/tutorial/create-your-first-app/. That will generate you a Typescript application with up to date dependency and make you familiar with the tool chain. Once you got that working, you can introduce shadow-cljs to replace typescript by ClojureScript.

I second Expo as an excellent source of information/docs regarding React Native. The React Native docs themselves are also quite excellent. Definitely bright spots in the whole JS land.

I think shadow-cljs is an often used option; probably less often used: figwheel https://figwheel.org/docs/react-native.html but I just used it very recently and it still works (with Expo, but can work without also) The famous problem of not being able to “easily” use JS packages with vanilla ClojureScript doesn’t really exist when using ReactNative / metro . Definitely less smooth than just going with Expo + JS but if you’re familiar with Clojure(Script) I would definitely consider it. For me the benefits of using ClojureScript after the initial 1-2 hour “setup” are worth it.

✅ 3

You definitely end up with some impedance mismatch when getting the toolchains working together to do CLJS+RN but for me state management is so much better in Clojure it’s worth it.

✅ 4

We started an app from uix expo template, and uix has worked for us really great We used a re-frame fork https://github.com/metosin/si-frame, since were a bit hesitant on reagent React 19 support. Si-frame uses metosin/signaali for reactivity, we haven't had any problems with it, I have good trust on @vincent.cantin on the work he has done with signaali :)