Nix has made setting up the project much easier for new comers, but there are still some serious rough edges.
Currently our tool stack is quite complicated. In cljs world alone we use a dependency called clj-rn which used to be maintained by Julien and is now kind of abandoned. Then have some complex dev setup that starts figwheel together with re-frisk to get hot reloading and some HUD for debugging. Re-frisk easily crashes the repl whenever it encounters custom types which happens every time you use chats in debug.
Implementation
We can replace re-frisk with re-frame latest debug features, and all the rest with shadow-cljs.
Shadow-cljs takes care of compiling only the right files through dependency graph, which allows us to have a simpler code base. It takes care of hot reloading and will replace clj-rn entirely, so we will also have a simpler tool stack.
It makes npm imports much easier through a nice syntax and provides tooling to determine which parts of js dependencies are used, allowing selective imports which avoid bundling a lot of js in the final package.
Finally it is actually maintain and we could approach it's maintainer to help us improve our code base and use of it.
WIP branch https://github.com/status-im/status-react/tree/shadow-cljs
Problem
Nix has made setting up the project much easier for new comers, but there are still some serious rough edges.
Currently our tool stack is quite complicated. In cljs world alone we use a dependency called clj-rn which used to be maintained by Julien and is now kind of abandoned. Then have some complex dev setup that starts figwheel together with re-frisk to get hot reloading and some HUD for debugging. Re-frisk easily crashes the repl whenever it encounters custom types which happens every time you use chats in debug.
Implementation
We can replace re-frisk with re-frame latest debug features, and all the rest with shadow-cljs. Shadow-cljs takes care of compiling only the right files through dependency graph, which allows us to have a simpler code base. It takes care of hot reloading and will replace clj-rn entirely, so we will also have a simpler tool stack. It makes npm imports much easier through a nice syntax and provides tooling to determine which parts of js dependencies are used, allowing selective imports which avoid bundling a lot of js in the final package. Finally it is actually maintain and we could approach it's maintainer to help us improve our code base and use of it.
Future Steps