Agreed, but uhtml-ssr looks a bit dated. If you want a html tagged template literal lib with no dependencies, see for example:
implementation: https://github.com/mastrojs/mastro/blob/main/src/core/html.t...
HN user
http://github.com/mb21
hacking on https://mastrojs.github.io
Agreed, but uhtml-ssr looks a bit dated. If you want a html tagged template literal lib with no dependencies, see for example:
implementation: https://github.com/mastrojs/mastro/blob/main/src/core/html.t...
No dependencies. No build step. Just a simple web framework. Implemented in just ~800 lines of TypeScript.
Some people even like stinky!
This. Cannot believe it too so long for somebody to finally mention progressive enhancement.
Backend and UI communication goes through in-process channels, not socket-based IPC
Are they running the frontend and backend in the same process? Sounds a bit dangerous security-wise?
This. "No loading animations" works if you rely on the browser's loading indicators that all users will be familiar with.
@OP, if you're up for a rewrite of the frontend, happy to help you get started with https://mastrojs.github.io
the achilles heel of SPAs everywhere.
right? or give me GitHub issues before the React rewrite – at least they loaded fast...
What AI is doing to the jobs of programmers feels very familiar to a lot of us frontend developers – because it has happened to us before.
Yeah, while you certainly can write semantic HTML with Tailwind, it absolutely doesn't encourage it. It's funny how Tailwind is conceptually going back to inline styles.
But sure, if you have <Title>, <Header> and <Button> components etc. instead of using HTML elements <h1>, <header>, <button> etc. directly, then why not stuff the CSS into the components as well? It all depends on whether you prefer to use components, HTML elements or a combination as your favourite abstraction.[0]
[0] https://mastrojs.github.io/blog/2025-11-27-why-not-just-use-...
Sounds similar to https://nightride.com ?
That's because Apache is basically what today's JS crowd would call a "file-based router", and then the app implements the actual routing in that index.php file. Just like early SPA stored the route in a hash. It's funny how history repeats itself.
I've gone back and forth on file-based vs programmatic routing. But each has pros and cons, so in the end I implemented both in Mastro: https://mastrojs.github.io/docs/routing/
What's the main motivation for considering Rust?
For what it's worth, in my last experience with Bun[0] I ran into a couple of bugs where it seemed Rust could have helped, e.g. using Bun.write
[0] https://mastrojs.github.io/blog/2025-10-29-what-struggled-wi...)
Agree that TypeScript is nice, especially for sharing templates and types between server and client. But you can still use TypeScript on the server without sending it all to the client, and without a complex and insecure protocol like RSC. I’m working on making this as simple and dependency-free as possible: https://mastrojs.github.io
That was exactly my experience as well, hence I created a "Minimal Astro": https://mastrojs.github.io
Yeah, for that a git-based CMS like Sveltia is really nice.
And for people that actually want to learn a bit of HTML, CSS and JavaScript, Mastro JS is as simple a static site generator as I could make it.
if you're not using CSS modules, why would you import the css file into your javascript? But anyway, I think we agree. Feel free to read the linked blog post ;-)
button, .button { /* my button styles */ }
If everything in your code is a React component, I get why you would just want to write the styles right there.[0] Then again, why write `<Button>` if you could just write `<button>` and style it with standard CSS.
[0] https://mastrojs.github.io/blog/2025-11-27-why-not-just-use-...
In Unix, everything is a file. In Mastro, everything is an HTTP route. You use the standards-based Request/Response-API not only for writing your server, but also for static site and asset generation. And it's beautiful.
Tell me you're nostalgic for Win95 without telling me...
As company size grows, managers want to settle on a "standardized" tech stack that doesn't get in the way when they want to hire and fire people at will.
Nobody was ever fired for choosing React (or IBM). But everyone can get fired when they're working on a React app.
That's a very nice pattern indeed. If you add signals, the update function even gets called automatically. That's basically what we do in [Reactive Mastro](https://mastrojs.github.io/reactive/) ;-)
that very much depends on your definition of "modern web framework".
Congrats to Fred and team! Developing and maintaining a complex framework takes lots of funding, and I’m glad Astro found a new home that provides that.
With [Mastro], we have a different approach. The name originally stood for "minimal Astro", and we’re staying true to that. At just ~700 lines of TypeScript, Mastro will always be easily maintainable – even if by just a single person. And it's amazing how much you can do if you're very deliberate in your API's design.
[Mastro]: https://mastrojs.github.io/
It even loads the code snippets in separate HTTP requests :-( But the snippets themselves are really good! I'm going to update mine on https://mastrojs.github.io
The simplest web framework and site generator yet – no leaky abstractions between you and the high-performance engine that is a modern browser.
This. Or use ts-blank-space if you prefer TypeScript over JSDoc. That's what we do in https://mastrojs.github.io
It has data-drupal attributes in the source. Not sure where the Perl and Java things would have come from.
I totally agree that the goal should be teaching. But I do wonder which code someone is more likely to actually read and understand: the LLM-generated one in their own codebase, or the one hidden in some npm package they installed to just ship things. I honestly don’t know. Careless devs probably won’t read either as long as it seems to work
I’ve been trying to encourage forking my libraries, or have people just copy them into their codebase and adapt them, e.g. https://github.com/mastrojs/mastro/ (especially the “extension” libs.) But it’s an uphill battle against the culture of convenience over understanding.