What should a native DOM templating API look like?

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  1. amrita

    Discontinued Amrita is a dependency for Kwala, but it did not work so well with Ruby 1.8.6. This is a small cleanup effort. (by rud)

    My favorite templating library has always been amrita[0]. I really don't like template languages that try to mix code and elements into a single block of text. It mixes together two concerns and creates exceptionally fragile blobs that generally need to be fully rewritten to extend their functionality. Whereas with amrita you can generally keep the two entirely separate which makes a huge difference in practice.

    These PHP style template ideas I have never understood. I thought we all agreed 30 years ago that while exceptionally function for a "quick and dirty" idea they are horrible for long term product or application development.

    You have a DOM. Use it as such.

    [0]: https://github.com/rud/amrita

  2. SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
  3. joystick

    Discontinued The full-stack JavaScript framework for SaaS apps. [GET https://api.github.com/repos/cheatcode/joystick: 404 - Not Found // See: https://docs.github.com/rest/repos/repos#get-a-repository]

    I think I've cracked this [1]. A lot of the popular frameworks just copy each other by using funky attributes, templating hacks, and compilers. You don't need that (yes, they have certain positives and negatives but you don't need them).

    Instead, what's hinted at in this article (using a plain HTML string) works great. Add in a little abstraction for the sake of structure and simplicity and you've got a surprisingly robust UI framework without a ton of complexity.

    [1] https://cheatcode.co/joystick (a full-stack JS framework that has its own components API)

  4. xee

    XPath, XSLT

    Eh, I also thought that at one point (regarding XSLT 3.0), but it turns out that parts of it are an underspecified mess. E.g., you can specify static parameters to be supplied to the document, but it has nothing on when or how any type-conversion errors would be signaled [0]. And in general, it has very imperative features like shadow attributes that purists would turn up their noses at. I don't see it becoming widespread anytime soon.

    [0] https://github.com/Paligo/xee/issues/32#issuecomment-2762343...

  5. xslt

    Native web build system (XML+XSLT)

    ```

    XSLT work is all based off of a repository someone wrote with a grug brain explainer:

    https://github.com/pacocoursey/xslt

  6. zipadee

    A simple Node HTTP server with middleware

    Interesting server framework! It looks very similar in some ways to a server I started last year out of frustration with Koa and Express called Zipadee: https://github.com/justinfagnani/zipadee?tab=readme-ov-file#...

    The templates look basically identical. html-tagged template literals that support streaming and async values and automatically escape values.

    What Koa does will allowing strings by be returned with a default HTML mimetype is security malpractice, IMO. It's way to easy to just interpolate user-controlled values.

  7. dom-expressions

    A Fine-Grained Runtime for Performant DOM Rendering

    The author of the article mentions this very briefly, where he writes "For JSX-style references you would need to use binding syntax like <${MyComponent}>". The Preact author's htm tagged template library uses this convention as well [2].

    [1] https://github.com/ryansolid/dom-expressions/tree/7fd9f86f1b...

    [2] https://github.com/developit/htm

  8. htm

    Hyperscript Tagged Markup: JSX alternative using standard tagged templates, with compiler support.

    The author of the article mentions this very briefly, where he writes "For JSX-style references you would need to use binding syntax like <${MyComponent}>". The Preact author's htm tagged template library uses this convention as well [2].

    [1] https://github.com/ryansolid/dom-expressions/tree/7fd9f86f1b...

    [2] https://github.com/developit/htm

  9. signals

    Manage state with style in every framework

    JSX was also created with the intention of using traditional conditional/looping constructs, but that hasn't stopped Solid and Preact from repurposing it for fine grained reactivity. Preact's signal implementation has Solid-like Show/For components [1].

    I won't speak for author of the post, but given that Lit itself has special control flow mechanisms for conditionals and loops (the cache and repeat directives respectively [2][3]), I can't imagine the proposal being too opposed to these mechanisms.

    [1] https://github.com/preactjs/signals/blob/eae850a9f3aa62e505a...

    [2] https://lit.dev/docs/templates/conditionals/#caching-templat...

    [3] https://lit.dev/docs/templates/lists/#the-repeat-directive

  10. hyperspan

    Hyperspan Web Framework 🚀 Full TypeScript Dynamic Web Framework with Client Islands built with Bun

    I checked your approach. My first attempt looked a _lot_ like yours, but I used an AsyncGenerator. Then I benchmarked it and found out it was slow as heck.

    Iterables/Generators seem like they work well for this problem and it's the first thing I reached for too, but out-of-order streaming is _really hard_ to do with the generator yield syntax. I wound up radically simplifying my template function to just return { content: string, asyncContent: Promise[] } instead and then made different render strategies that handle the resolution of the asyncContent differently: https://github.com/vlucas/hyperspan/blob/main/packages/html/...

    I'd love to chat about the approach I used. My email is on my website.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • Can Claude Code migrate VanillaJS/HTML/CSS to Preact/Tailwind?

    1 project | dev.to | 20 Apr 2026
  • Shopify App: October 2025 Updates

    1 project | dev.to | 6 Oct 2025
  • Spin up Bun + Preact full-stack app in minutes 🚀

    1 project | dev.to | 14 Sep 2025
  • This Is Tuple Context Pattern

    3 projects | dev.to | 5 Apr 2025
  • sizereport.config.js in Preact source code.s

    2 projects | dev.to | 6 Mar 2025

Did you know that JavaScript is
the 5th most popular programming language
based on number of references?