Thanks for all the direct and public replies so far, we take great reassurance from them.
Recapping the constraints:
We have an existing Java library, which is a collection of algorithms (Statistical inferencing stuff), architecturally they are stateless. Pass in a Map, and it returns a Map. There is a coordination layer which we have moved to Clojure, this just a Map/Reduce & transform router. For example, we would run a simulation a few alternative models concurrently. The Clojure code distributed work maps to threads and instances in different memory spaces and consolidated all the results as pour back in asynchronously. It handles failures and continuation etc. This part works fine. The difference of reimplementing this layer in Clojure is night and day, forget Java and Scala for this, the rewrite was painless and scaling options we have given ourselves are fantastic.
We still have Java dependencies, there in is the rub.
We want to move as much as this stuff client side as possible, Clojurescript and only leave the bounds of the customer's machine for certain operations where we need to offload these work maps to cloud bound processors.
In the perfect world, we would have an electron app with render processes handling the GUI elements and the primary process doing some light processing and distribution and coordination of the work maps. In fact, we have prototyped this, and it appears viable.
In the short term, we have running a JVM based server on the client machine as that is what host the algorithm library.
(By the way, this library will eventually be reimplemented in Clojure script, but as there is a need to for precision & correctness we currently have a test suit that 3x larger than the code base and we still trying to get our heads around the float points in JS)
The above is what motivated the question.
1. Cljs and Electron, Tick no problems.
2. Packaging up a web socket server in electron for deployment and later version updating? Has it been done, Clues thoughts, etc.?
3. Developer workflow, (Productivity).
a. Currently, we have the library, Java code, and Clojure layer in one code base and repository. Using Lein, and Cursive to hack on it. Which by itself is fine.
b. Bring 'Cljs' & electron into play, using ATOM with 'Dirac' and 'Cljs-oops' with 'Boot' starting becoming a lot more ergonomic and lighter then Intellij, Cursive and Lein.
We would like to unite these two worlds into one repository and one tool chain. From that one environment, we should be able to work on the GUI layer, live reload, inspect and tango on. (ATOM, Dirac and Boot). Then move without friction and context changes to hacking some Clojure, running some unit test and now specs with 1.9.0-alpha. Then back again, to the front.
The fact is all the above (Clj, Cljs, Electron and Java can work together, and deliver good results). But we have yet to find a unified tooling chain. Being an IDE/Editor, 'repl', build and dependency management. That handles the architectural options that 'Clj' and 'Cljs' is enabling.
Yes, 'lein' abstracts us from mistakes of past 'Maven' but it is not the promised landed. I want to write code executable testable code to manage my project, to extract what I need from the code base, compile and package into immutable file sets.
Darken by two decades of Java, Maven and dependence management yet not brave enough to ride the grunt while gulping down bower packages which are made by copy and paste mystery meats. I am thankful for the Google Closure Complier that tree shakes out some of the JS crap that always seems to find its way into JS apps. I am hoping that 'boot; will become the tool that bridges 'Clj' and 'Cljs'.
Please share your thoughts and wash apart any ignorance I have in this area. Indeed, if you have a directory structure and tooling around a unifying a 'Clj', 'Java', 'Cljs' and 'JS' project, please share.
Thanks again for the suggestions, I hope this post elaborate more upon what I mean when I say developer workflow, productivity and ergonomics.