8 ms·
Qite.js – Frontend framework for people who hate React and love HTML
- dhalucario 6mo agoIs there a reason it uses a seperate Ajax module over just using fetch?
- bearjaws 6mo agoWhy use JS at all for SSR? It's not a great language for it.
- azangru 6mo agoWhere does the article say anything about js for ssr?
- bartwaardenburg 6mo agoThe fields/flags state model is a nice idea, having structured values separate from boolean state is something I haven't seen in other frameworks. How does this compare to Alpine.js or htmx in practice? They're in a similar space (no build, SSR-first) but I'm curious what made you go with a new framework rather than building on top of those?
- aledevv 6mo agoI agree, I hate unnecessary hypercomplexity. Most of the time, it's enough to build in a simple, clean, and lightweight way. Just like in the old days. Your server's resources will also thank you. Furthermore, the simplicity of web pages is also rewarded by search engines. If it were up to me, I'd build sites exclusively in .md format :)
- speefers 6mo ago[dead]
- dleeftink 6mo agoThink Xstate[0] machines are a little more intuitive than the conditional value structuring displayed here in the example, but it is an interesting idea indeed. [0]: https://github.com/statelyai/xstate?tab=readme-ov-file#super-quick-start https://github.com/statelyai/xstate?tab=readme-ov-file#super...
- usrbinenv 6mo agoAlpine/htmx are great, but they're more "sprinkle behavior on HTML" tools. Qite is closer to a structured component system: explicit events, a state engine, and a consistent way to wire parts/fields/children together without ad-hoc glue. You can build similar things with Alpine/htmx, but once things grow, you end up reinventing structure. Qite just bakes that in from the start.
- rounce 6mo agoWhy have `<div data-part="form">` instead of using a `<form>` element?
- zhisme 6mo agothis! it is absolutely nuts having everything in div/span elements and then assigning data/class attributes so they could behave like form or any other interactable element..
- draw_down 6mo ago[dead]
- usrbinenv 6mo agoYou can have <form data-part="form"> too. The tag doesn't matter. The data-component, data-roles, data-part or data-field attributes is what makes your HTML be a component, a component part or a field in Qite.
- febusravenga 6mo ago"If you hate react" feels like very bad argument in engineering. Anyway, interesting approach for up to medium pages (not apps!). Totally not replacement for react.
- anematode 6mo agoPerhaps a bad argument, but for some people a very compelling one...
- austin-cheney 6mo agoWhy is that a bad argument? The author strongly dislikes React and so wrote an alternative that is radically more simple, which sounds like a perfectly sane argument.
- bestest 6mo agoDoes the author dislike react? How about preact? Or maybe simply jsx? Or nextjs? There's nothing wrong with either of these if used correctly. Thus "hate" is a rather shallow argument.
- tobr 6mo agoYour argument that it’s a shallow argument is itself a shallow argument. ”I hate x” is not a technical argument anyway, it’s an emotional assessment.
- mexicocitinluez 6mo agoBut they're shilling a technical solution not an emotional one.
- usrbinenv 6mo agoAs much as we like to think of ourselves as rational beings, emotions are still a very large part of our decision making process. I didn't build Qite because I hate React, I built it because I knew exactly how I wanted things to work. But I do hate React and it's part of why I knew exactly how I wanted things to work.
- egeozcan 6mo agoIMHO, you shouldn't make "hate" part of your tagline. Maybe focus on a use-case? Something like, "No-build, no-NPM, SSR-first JavaScript framework specializing in Time-to-interactive" - maybe?
- yde_java 6mo agoWhy self-censoring for using "hate" when it gets the message across quickly? Everyone understands that we use "hate" and "love" with huge levels of nuances. I personally said today to a colleague "I hate working from home" but it's clear that I'm not a racist against people who "love" remote work. We do work with a very lax work-from-philosophy.
- tkzed49 6mo agofrom my perspective--I have to use React, Lit, and all kinds of other creative solutions at my day job--I'm going to immediately devalue someone's argument if it starts with "I hate React". React is not popular simply because engineers hate themselves or enjoy pain. There are problems it solves, and problems it creates. Explain what problems your solution solves, and feel free to dunk on React while you're at it, but write a tagline like this and I'm not gonna take you seriously.
- iammrpayments 6mo agoThis just sounds like every js framework that comes out every week and would never get as much attention. OP just did something marketers call “positioning” right.
- ale 6mo agoBuild steps are realistically speaking inevitable because of minification, tree-shaking, etc. which is not even a big deal these days with tools like esbuild. For a "true" DOM-first component reactive system just use Web Components and any Signals library out there and you're good.
- xgulfie 6mo agoBut build steps suck
- chattermate 6mo ago[dead]
- hliyan 6mo agoI'm starting to wonder whether reactivity (not React specifically) was the originally sin that led to modern UI complexity. UI elements automatically reacting to data changes (as oppposed to components updating themselves by listening to events) was supposed to make things easier. But in reality, it introduced state as something distinct from both the UI and the data source (usually an API or a local cache). That introduced state management. It was all downhill from there (starting with two way data binding, Flux architecture, Redux, state vs. props, sagas, prop drilling, hooks, context API, stateful components vs. stateless components, immutability, shallow copy vs. deep copy, so on and so forth).
- ivanjermakov 6mo agoI still believe immediate rendering is the only way for easy-to-reason-about UI building. And I believe this is why early React took off - a set of simple functions that take state and output page layout. Too bad DOM architecture is not compatible with direct immediate rendering. Shadow DOM or tree diffing shenanigans under the hood are needed.
- hungryhobbit 6mo agoYes! I think there's a lot of armchair web developers in these comments who think they know better: they don't. Meanwhile, those of us that were building web apps with JQuery and other tools prior to React know just how painful "web development without reactivity" actually was.
- Izkata 6mo agoIndeed.. Mostly-static pages with sprinkled-in interactivity were fine (like a table where you could sort the columns), but a full app? I dread having to touch the one page we have that uses Backbonejs+Mustachejs. Also, things like unidrectional data flow are generally considered normal now, but back in that era it was rare. Two-way binding was much more popular, with constant bugs as the app grew. Around 2013 or so I was trying to switch a new page we were building to a very simple form of unidirectional data flow to deal with constant issues (ours issues were mostly losing state, we were all ad-hoc and not using two-way binding) and the other devs just did not at all understand it, constantly sidestepping it without even thinking because jquery made it so easy to touch everything.
- eknkc 6mo agoI thought I hated React until I saw the samples on this page...
- jfengel 6mo agoAny time I see code in quotes I get the heebie jeebies. Code in quotes can't even be syntax checked until run time.
- usrbinenv 6mo agoWhat you probably saw isn't code in quotes, but simply matchers like `price: "isPresent()"`. The () is there to signal it's a matcher, not a value. If this matcher doesn't exist, you'll get an error. The reason I chose () to signal it's a matcher is to distinguish it from values. Maybe there's a better way to do it.
- 1GZ0 6mo agoYeah, no thanks.. I'll just stick with a $5 vps with lamp and jjquery
- Bengalilol 6mo agoI must have overlooked the site, but are there any working examples?
- usrbinenv 6mo agoYeah, several apps have been built with it, but they're not public (or not public yet). Also, Qite.js has a number of prebuilt-components. I haven't gotten around documenting them, but you can find working example here: https://code.qount25.dev/qite/qite-js/src/branch/master/src/components https://code.qount25.dev/qite/qite-js/src/branch/master/src/... https://code.qount25.dev/qite/qite-js/src/branch/master/test/demo https://code.qount25.dev/qite/qite-js/src/branch/master/test...
- JSR_FDED 6mo agoPhilosophically Datastar is on the same page. Incredible performance and dramatic reduction in complexity.
- Aldipower 6mo agoHate and love, the borderline framework for borderliners. SCNR
- wg0 6mo agoHave tried multiple approaches. Sevelte. HTMX. Everything in between. And came to conclusion that after certain complexity of UI - React kind of components are unavoidable if you want to be able to reason about your code. Think of Shopify admin panel with product variations each variation having different pictures and what not. Not saying not doable in plain JS. But then Chrome can be written in NASM too, C++ is just...
- iammrpayments 6mo agoShopify is quickly moving to Preact, and you can see that is paying off, I now see changes on the dashboard every week instead of every 6 months
- lo_fye 6mo agoI wonder how many users would prefer to have full page reloads (aka traditional server-side rendering) when navigating instead of all the insane http requests and ads we have today? See also: HTMX and possibly even jQuery
- voidUpdate 6mo agoAt some point, someone is going to come out with a no-JS, no-NPM, no-SSR framework and we're just going to have invented HTML again
- joeyguerra 6mo agoThere are people who hate react?
- austin-cheney 6mo agoI strongly dislike React.
- jollyllama 6mo agoYes but mostly because it uses NPM.
- ecshafer 6mo agoI do, React is a scourge in UI development. 100x code and dev time for worse performance. Have you ever built a website in HTMX?
- shimman 6mo agoI've been working as a frontend dev for about 11 years. I've only ever used react for a majority of projects, also doing all kinds of work: porting angular projects into react, refactoring legacy react projects into modern react, building complex data visualizations for network topologies, and your basic CRUD stuff. I dislike react because it's long overstayed its welcome. The vast majority of react projects are bloated messes and it truly feels like the react community is being steered by dev influencers that have very little experience working on projects (this includes the react maintainers themselves IMO). There are way better libraries to write maintainable code in (svelte, solid, and even vue is better FFS). There are other mental frameworks that allow for good engineering practices as well like htmx or hotwire. React is only here for the same reason that Java Spring is here, it was one of the early adopters that has too much momentum where leadership across companies are actively hostile to devs so there's no time to actually create good stuff but rather stamp out garbage so billionaires can be slightly more rich.
- jmull 6mo agoHate is too strong a word, but it’s junk.
- cies 6mo agoI went with SSR for a new project started 2025Q4. I'm not against React, but when I have to make an SPA (or very interactive component in an SSR app) I much rather use Elm. In order to do the JS that I have to do with an SSR app I went with Alpine.js. It reduces the JS I have to write and that fits my SSR approach. It feels a bit like a modern jQuery to be honest: you cannot build whole apps with it, but just to sprinkle on top of an SSR it does really well.
- anthk 6mo agoIf the point it's to run propietary code, do yourselves a favor, ditch JS, and enable WASM for webapps and make most of the text web HTML5+CSS3 only. At least I won´t need to mangle User Agents to just read simple articles and images froma blog or a news site.
- rsmtjohn 6mo ago[flagged]
- esperent 6mo agoI've been building out a fairly complex app. I decided to avoid Next.js some I went with a simple Hono + Tanstack Router/query. With Vite 8, my build time is about ~0.8s. I've also go a much simpler Next.js app with a build time of 45s.
- steve_adams_86 6mo agoThat stack is such a breath of fresh air. And so easy to deploy anywhere. I do love the idea of a batteries included framework for the JS ecosystem, like the mythical Rails for node, but as long as we're gluing random stuff together... This is a really nice combo. I also love using Hono and React/Vite with TRPC. I stopped working with Next a few years ago, so I can't comment very fairly on recent changes in the framework. However, it does appear as though it has become even more complex, and that was a significant art of what steered me away. The other part was simply a lack of cohesion with design decisions and direction. The middleware layer seemed like a poor design. Various opinions around things like default cache policies felt incorrect. I found myself battling their decisions too often, for too little benefit.
- exabrial 6mo agoWhat a breath of fresh air
- kitsune1 6mo ago[dead]
- kitsune1 6mo ago[dead]
- dmix 6mo agoRails does this perfectly with Turbo and Stimulus, Turbo does HTML-over-the-wire via SSR-first, server responds with small updates/appends of HTML as need etc, and then you lightly use stimulus JS controllers for the small stuff where HTML/forms don't make sense. https://hotwired.dev/ https://hotwired.dev/
- usrbinenv 6mo agoWhile it's definitely possible to build similar website with Turbo and Stimulus it would absolute NOT be the same thing and the mechanics of it would be radically different. I would argue using SSR at all times (and, consequently, workarounds like Hotwire, which make it look like it's not SSR) is the same kind of sin as using React for SPAs for personal blogs (i.e. things, SPAs don't belong to).
- deleted 6mo ago[deleted]
- peytongreen_dev 6mo ago[flagged]
- deleted 6mo ago[deleted]
- johnisgood 6mo ago> https://qitejs.qount25.dev/Ajax.html https://qitejs.qount25.dev/Ajax.html Oh my. If it works just like Ajax from >10-15 years ago, then I will be super happy. :D
- usrbinenv 6mo agoIt works better than "just like" in the sense that it also takes care of things like CSRF, POST/GET params, request/response types etc for basically free.
- johnisgood 6mo agoFair enough. Even better!
- usrbinenv 6mo agoBtw, looking back at the index page, I think I might have made the initial example a little bit too much (because realistically, you don't often get components that complex). If you guys want a simpler saner example, the one the second page looks nicer: https://qitejs.qount25.dev/Explained-by-ducks.html https://qitejs.qount25.dev/Explained-by-ducks.html
- QubridAI 6mo ago[flagged]
- usrbinenv 6mo agoThank you. Since you had this positive reaction to which I very much relate, may I ask you what did you personally think was confusing in the docs that may still turn people away?
- jwlake 6mo agoThe "isPresent()" in the example gives me alot of ick. It's confusing why thats not actual javascript.
- usrbinenv 6mo agoYeah, I get the reaction. It's not JavaScript, it's simply a way to reference a matcher for the value, not match against literal value. You can totally use your custom matcher like this: total: (c,v) => v > 1000 See the docs: https://qitejs.qount25.dev/States/Field-Matchers.html https://qitejs.qount25.dev/States/Field-Matchers.html
- proc0 6mo agoAnd we've come full circle, haha.