-
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
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives
-
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)
-
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...
-
```
XSLT work is all based off of a repository someone wrote with a grug brain explainer:
https://github.com/pacocoursey/xslt
-
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.
-
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
-
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
-
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
-
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.