Hacker News
Show HN: µJS, a 5KB alternative to Htmx and Turbo with zero dependencies
It intercepts links and form submissions, fetches pages via AJAX, and swaps fragments of the DOM. Single <script> tag, one call to `mu.init()`. No build step, no dependencies.
Key features: patch mode (update multiple fragments in one request), SSE support, DOM morphing via idiomorph, View Transitions, prefetch on hover, polling, and full HTTP verb support on any element.
At ~5KB gzipped, it's smaller than HTMX (16KB) and Turbo (25KB), and works with any backend: PHP, Python, Go, Ruby, whatever.
Playground: https://mujs.org/playground
Comparison with HTMX and Turbo: https://mujs.org/comparison
About the project creation, why and when: https://mujs.org/about
GitHub: https://github.com/Digicreon/muJS
Happy to discuss the project.
josephernest
|next
[-]
If you want something even more minimalistic, I did Swap.js: 100 lines of code, handles AJAX navigation, browser history, custom listeners when parts of DOM are swapped, etc.
https://github.com/josephernest/Swap.js
Using it for a few production products and it works quite well!
nattaylor
|next
|previous
[-]
htmz is a minimalist HTML microframework for creating interactive and modular web user interfaces with the familiar simplicity of plain HTML.
recursivedoubts
|next
|previous
[-]
i have added it to the htmx alternatives page:
oso2k
|next
|previous
[-]
There’s Artifex’s interpreter from muPDF. It’s also the basis of several JS related projects: https://mujs.com/
There’s also a lesser known interpreter: https://github.com/ccxvii/mujs
And IIRC, there was a CommonJS library of the same name.
captn3m0
|next
|previous
[-]
heddycrow
|next
|previous
[-]
I'll be checking this out. Any chance you (or anyone) has had a run with this lib + web components? I'd love to hear about it.
amaury_bouchard
|root
|parent
|next
[-]
lioeters
|next
|previous
[-]
Is there a mechanism for loading HTML partials that require additional style or script file? And possibly a way to trigger a JS action when loaded? For example, loading an image gallery.
ohghiZai
|next
|previous
[-]
amaury_bouchard
|root
|parent
[-]
That said, µJS and Datastar have quite different philosophies. µJS is a lightweight AJAX navigation library (~5 KB); it intercepts links and forms, swaps fragments, and stays out of your way. There's no client-side state: your server renders HTML, µJS delivers it.
Datastar is more of a reactive hypermedia framework. It brings client-side signals (reactive state in HTML attributes, à la Alpine.js) and uses SSE as its primary transport: the server pushes updates rather than the client fetching them. It's a different mental model: Datastar manages state and reactivity, while µJS is purely about navigation and content replacement.
Both are small, zero-build-step, and attribute-driven, so the comparison is definitely interesting. I'll look into adding it!
ranger_danger
|next
|previous
[-]
Sorry if I need to use existing APIs I cannot change.
williamcotton
|root
|parent
|next
[-]
Browser -> your server route -> server calls API -> server renders HTML -> htmx swaps it?
WesolyKubeczek
|root
|parent
|previous
[-]
gaigalas
|next
|previous
[-]
I've done this previously with morphdom to AJAXify a purely server-driven backoffice system in a company.
I would love something even smaller. No `mu-` attributes (just rely on `id`, `href`, `rel`, `rev` and standard HTML semantics).
There's a nice `resource` attribute in RDFa which makes a lot of sense for these kinds of things: https://www.w3.org/TR/rdfa-lite/#h-resource
Overall, I think old 2015-era microdata like RDFa and this approach would work very well. Instead of reinventing attributes, using a standard.
0x20cowboy
|root
|parent
[-]
majorchord
|previous
[-]
networked
|root
|parent
[-]
A better thing to suggest is to use multiple forges, including GitHub, and mirror your projects across them. This way you will have exposure and options; you won't be as tied to any one forge.
majorchord
|root
|parent
[-]
satvikpendem
|root
|parent
|next
[-]
networked
|root
|parent
|next
|previous
[-]
hombre_fatal
|root
|parent
|previous
[-]
That link you provided only points out GitHub has integrated "create pull request with Copilot" that you can't opt out of. Since anyone can create a pull request with any agent, and probably is, that's a pretty dated complaint.
Frankly not very compelling reasons to ditch the most popular forge if you value other people using/contributing to your project at all.