* figwheel -&gt; <a href="https:&#x2F;&#x2F;github.com&#x2F;adzerk-oss&#x2F;boot-reload" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;adzerk-oss&#x2F;boot-reload</a>
  It&#x27;s not as smart as figwheel because u can lose state, but it&#x27;s mostly enough. We are actually quite fine with reloading the page manually most of the time.<p>* uberjar: If you use <a href="http:&#x2F;&#x2F;boot-clj.com&#x2F;" rel="nofollow">http:&#x2F;&#x2F;boot-clj.com&#x2F;</a> instead of lein, you won&#x27;t have issues with left-over files, because boot allows every build step to create a unique temp dir which gets erased on next run. Content amongst these temp dirs can be shared by a git-like object store and build tasks pass a virtual <i>immutable</i> file-system (called a fileset) between each other.<p>* templating: <a href="http:&#x2F;&#x2F;hoplon.io&#x2F;" rel="nofollow">http:&#x2F;&#x2F;hoplon.io&#x2F;</a>
  Your page is not a big data structure. It&#x27;s an actual Clojure program, which generates DOM Elements directly. You can even call DOM Elements as functions to alter their attributes or their DOM children. Combined with <a href="https:&#x2F;&#x2F;github.com&#x2F;hoplon&#x2F;javelin" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;hoplon&#x2F;javelin</a> you get reactivity in an unobtrusive way. You can separate you app state with it, just like you put data into a spreadsheet and wire up a chart to it which will update automatically. Your DOM is the equivalent of that chart in this case.<p>* cljs repl -&gt; <a href="https:&#x2F;&#x2F;github.com&#x2F;adzerk-oss&#x2F;boot-cljs-repl" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;adzerk-oss&#x2F;boot-cljs-repl</a>
  but in practice it was hardly ever used by boot&#x2F;hoplon people, so it&#x27;s a bit neglected now.<p>* server-client state sharing: Hoplon + Javelin + <a href="https:&#x2F;&#x2F;github.com&#x2F;hoplon&#x2F;castra" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;hoplon&#x2F;castra</a>
  It&#x27;s a bit under-documented... probably because it&#x27;s so super simple... :)
  Castra does a remote function call via XHR and puts the result into a Javelin cell. If that cell is wired up to a DOM element (attribute or content), either directly or transformed by a formula cell, then your DOM updates automatically once the XHR call finishes. Errors are placed into an error cell, which can also be wired to the DOM...<p>* Falcor &#x2F; GraphQL ... I have NOT done this yet but I&#x27;m planning to &quot;just&quot; pass Datomic queries via Castra to the backend and that&#x27;s it. I can&#x27;t &quot;subscribe to live query&quot; this way, but that&#x27;s good enough for us. It&#x27;s also just 1 HTTP end-point. No more RESTful rigidity... ;)<p>* Vim&#x2F;REPL: We are just fine with the good old `(print)` and `(serve {:reload true})` from <a href="https:&#x2F;&#x2F;github.com&#x2F;pandeiro&#x2F;boot-http" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;pandeiro&#x2F;boot-http</a> on the backend. Also we just use Sublime Text with paredit and lispindent. It&#x27;s super fast even on 4-5 year old machines...<p>* Chestnut template &#x2F; plugin: With boot this problem set shrinks to a size where distinction between template and plugin vanishes. You can create a .jar which defines a boot task. That task either creates a template project or defines a build step which u can intermix with other build steps using plain-vanilla function composition.
  Your environments are also just tasks combining specific build steps with specific options. Nothing custom or magical.<p>* Om: Again: Try Hoplon. Fraction of the complexity.<p>* CLJSJS: Your worries regarding extern files and maintenance are not a problem in practice really. We are maintaining a Semantic UI package <a href="https:&#x2F;&#x2F;github.com&#x2F;exicon&#x2F;hoplon-semantic-ui" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;exicon&#x2F;hoplon-semantic-ui</a> and just the other day I whipped up externs files for Google Analytics (3 lines), HubSpot (5 lines), Inspectlet (6 lines). See <a href="https:&#x2F;&#x2F;github.com&#x2F;exicon&#x2F;homepage&#x2F;tree&#x2F;master&#x2F;src" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;exicon&#x2F;homepage&#x2F;tree&#x2F;master&#x2F;src</a><p>Disclaimer:<p>I&#x27;ve started using Clojure ~10month ago.<p>Never really used Lein but experienced all of its pains via Grunt and Gulp I suspect...<p>Trained ~8 people to work with Boot &amp; Hoplon during these months by pair programming with them. We don&#x27;t really miss anything else, though we looked into Emacs, Vim, IntelliJ, LightTable.<p>There are some rough edges and missing documentation, but <a href="http:&#x2F;&#x2F;hoplon.discoursehosting.net&#x2F;" rel="nofollow">http:&#x2F;&#x2F;hoplon.discoursehosting.net&#x2F;</a> and the #hoplon &amp; #boot channels on <a href="http:&#x2F;&#x2F;clojurians.net&#x2F;" rel="nofollow">http:&#x2F;&#x2F;clojurians.net&#x2F;</a> Slack and freenode IRC <a href="https:&#x2F;&#x2F;botbot.me&#x2F;freenode&#x2F;hoplon&#x2F;" rel="nofollow">https:&#x2F;&#x2F;botbot.me&#x2F;freenode&#x2F;hoplon&#x2F;</a> were more than sufficient.