Enlive and related libraries for Clojure, Lift for Scala, and heist for Haskell use node transformation. I know that there are a few others I&#x27;m forgetting. Basically given a fragment of an HTML 5 or XML document, your view functions transform it into a different fragment. E.g. in Lift, given<p><pre><code>    &lt;div class=&quot;greeting-container&quot; data-lift=&quot;SayHello&quot;&gt;&lt;span class=&quot;greeting&quot;&gt;lorem ipsum&lt;&#x2F;span&gt;&lt;&#x2F;div&gt;
</code></pre>
And a transformation:<p><pre><code>    &quot;.greeting *&quot; #&gt; &quot;Hello World&quot;
</code></pre>
The output will be:<p><pre><code>     &lt;div class=&quot;greeting-container&quot;&gt;&lt;span class=&quot;greeting&quot;&gt;Hello World&lt;&#x2F;span&gt;&lt;&#x2F;div&gt;
</code></pre>
See <a href="http:&#x2F;&#x2F;exploring.liftweb.net&#x2F;master&#x2F;index-5.html#entry-CSS-Transforms-0" rel="nofollow">http:&#x2F;&#x2F;exploring.liftweb.net&#x2F;master&#x2F;index-5.html#entry-CSS-T...</a> et alia<p>With this technique, your designers can create pure HTML and assets, with no logic in the templates. Basically they create static mock-ups and then the developers &quot;enliven&quot; them.<p>I prefer this but I don&#x27;t imagine it will ever become mainstream.<p>React&#x27;s JSX is also (as far as I can tell) node based, but with a lot less power (you can really only do insert operations, and the operations don&#x27;t really compose well).