18 comments

  • voidUpdate43 minutes ago
    At 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
  • hliyan3 hours ago
    I&#x27;m starting to wonder whether <i>reactivity</i> (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).
    • neya1 hour ago
      Absolutely. Look at facebook today. Back in 2010, everything had just the right amount of interactivity. Because, separation of concerns existed at the language level - HTML for structure and CSS for presentation, JS for everything else.<p>Then some bunch of geniuses decided it would be awesome to put everything together in the name of components. Today, you open facebook, the creators of React - normal drop-down with just a list of barely 5-6 items is a fucking component that makes 10 different requests. I would even argue this unnecessary forced interactivity is what perhaps annoyed users the most as everything always has to &quot;load&quot; with a spinner to the point of the platform being unusable.<p>Same goes for instagram. It&#x27;s not just that, React is a hot ball of mess. It&#x27;s not opinionated, so anyone can use anything to do anything. This means if you work with multiple teams, each one uses their own code organisation, state management library and general coding paradigm. Eventually the engineers leave and the new guy decides to do things his own way. I&#x27;ve honestly never seen a company with a great product run over React. Everything always is being re-written, migrated every 3 weeks or straight up is buggy or doesn&#x27;t work.<p>React is the worst thing to happen to the Javascript ecosystem. The idea is good, but the execution is just piss poor. I mean look at Vue and Svelte, they managed to do it right.
    • _heimdall2 hours ago
      I&#x27;d argue that it was all downhill after we moved away from using HTML as the state representation.<p>Moving state out of HTML and into JS means we now have to walk this ridiculous tightrope walk trying to force state changes back into the DOM and our styles to keep everything in sync.<p>Given that problem, reactivity isn&#x27;t the worst solution in my opinion. It tries to automate that syncing problem with tooling and convention, usually declaratively.<p>If I had to do it all again though, DOM would still be the source of truth and any custom components in JS would always be working with DOM directly. Custom elements are a great fit for that approach if you stick to using them for basic lifecycle hooks, events, and attribute getters&#x2F;setters.
    • applfanboysbgon2 hours ago
      I genuinely don&#x27;t understand why this model is the norm. As a game developer working in my own engine, UI is unbelievably straight-forward: the game has state. The master Render() function draws all of the graphics according to the current state, called at framerate times per second. Nothing in Render() can change the state of the program. The program can be run headlessly with Render() pre-processed out completely. The mental model is so easy to work with. There is a sleep-management routine to save on CPU usage when idle, and dirty logic to avoid re-drawing static content constantly. I feel like the world would save 90% of its GUI development time if it didn&#x27;t do whatever the fuck reactive UIs are doing.
      • scoopdewoop22 minutes ago
        That is immediate-mode graphics. Fine when you are already power-budgeted for 60 frames each second. UIs typically use retained-mode graphics, with persisting regions.
      • cjonas12 minutes ago
        This is basically &quot;reactive UI&quot; foundation. The complexities come from effects (now managed via hooks)
      • chill12341 hour ago
        Isn&#x27;t that what reactive ui trying to achieve? To only have a render function and have ui state sync according to the data?
      • hliyan2 hours ago
        That reminded me of another complexity: virtual DOM diff.
      • croes2 hours ago
        UI is mostly static. Rendering everything at framerate per second is a huge waste of time and energy.
        • Lerc2 hours ago
          This was the case back in the days of the Amiga and 68000 Macs. Rendering everything every frame was impossible, the only way to make it work at all was to draw only what was absolutely necessary to depict changes.<p>Then computers got faster, much much faster. It became possible to redraw the whole UI from state every frame without it being a significant cost.<p>At the same time retained user interfaces managed to become more and more costly to do just about anything. I don&#x27;t think for any particular reason other than computers were fast and they didn&#x27;t need to do much better.<p>I find it really odd that there are user interfaces that take longer to rearrange their items than it takes for the same CPU to RayTrace a scene covering the same amount of screen area.
          • croes1 hour ago
            Just because computer got much faster doesn’t mean it’s a good idea to make wasteful rerenderings of things that didn’t change.
            • Lerc1 hour ago
              No but calculation becoming more efficient than recall might not make it a good idea to make wasteful fetches.
              • croes1 hour ago
                Nothing id more effective than doing nothing.
      • mpalmer2 hours ago
        [flagged]
        • applfanboysbgon2 hours ago
          Indeed, I genuinely do not. Rather than passive-aggressively insulting my intelligence, why not explain it for me? As I understand it, React was an attempt to shoehorn &quot;immediate-mode UI&quot;[1] on top of retained-mode UI, so it seems like web developers do in fact want to build immediate-mode UIs, and in fact are constantly complaining about the nightmarish complexity of the status quo.<p>[1] I loathe this term, by the way. It&#x27;s one of those terms that, I think, belong to a discipline of developers who love to obfuscate everything, even simple concepts, with unnecessarily opaque terminology until nobody can understand what the hell anyone is talking about anymore.
          • bryanrasmussen1 hour ago
            &gt;As I understand it, React was an attempt to shoehorn &quot;immediate-mode UI&quot;[1] on top of retained-mode UI<p>the problem is that the typical modern web page is considered as a combination of immediate-mode and retained-mode.<p>therefore, as it is wasteful to update all the page when only a few components on the page change, people want to only update parts of the page immediately when changes happen.<p>furthermore the typical modern web page only makes sense in the context of the modern web site, so some pages are almost everything on the page needs to update all the time, some pages are nothing here needs to update until the user does anything, some pages are nothing here needs to update at all, and other pages are just a couple components need to update all the time based on various things.<p>This context of what a web site is like is very much determined by the type of the site, where many e-commerce sites are affected by all sorts of data that occur outside of whatever page the user is on and need to update all sorts of different components on a page, many governmental sites are almost just static, with all sorts of variations in between.
            • cluckindan1 hour ago
              Which part of a web page is immediate mode, exactly?<p>Maybe &lt;canvas&gt; if you clear it on every frame.
          • never_inline1 hour ago
            I am no web developer but whenever I built the UIs, re-rendering a page by doing some big DOM change through JS as always led to stutter. So maybe its just inefficient and can&#x27;t be optimised.
          • cluckindan1 hour ago
            React is not immediate-mode in the traditional sense where everything is redrawn on every frame.
          • user342831 hour ago
            On the web you need accessibility and often also responsive layouts.<p>These are requirements the DOM &#x2F; CSSOM addresses, you&#x27;d probably not have an easy time getting this right in a &lt;canvas&gt;.
          • mpalmer2 hours ago
            &gt; Rather than passive-aggressively insulting my intelligence<p>I did no such thing. In fact I expressed my understanding of why you prefer your methods. I was hoping you would be willing to consider why declarative, composable UI patterns are worthwhile. Instead you substitute a deep topic for &quot;React&quot;.<p>Have a good one, I have no intention of getting into a technical discussion with someone whose first reaction is to jump down people&#x27;s throats.
            • spoiler1 hour ago
              No horse in this race, but your phrasing seems a bit weird, honestly... If reduced, your comments read as:<p>&quot;You don&#x27;t know about X? Well, at least I know about X and Y...&quot; Doesn&#x27;t seemed like a good faith comment to me either?<p>And then you say &quot;You misunderstood my intentions so I&#x27;m going to disengage&quot;. For what it&#x27;s worth, I didn&#x27;t interpret your argument as insulting someone, but also it wasn&#x27;t a useful or productive comment either.<p>What did you hope to achieve with your comments? Was it simply to state how you know something the other person doesn&#x27;t? What purpose do you think that serves here?
            • applfanboysbgon2 hours ago
              I guess I misinterpreted your comment? I do apologise if that&#x27;s the case. I certainly didn&#x27;t intend to &quot;jump down your throat&quot;, I was asking you to explain your comment further because I don&#x27;t understand what you&#x27;re getting at.
              • mpalmer1 hour ago
                To be perfectly fair, you accused me of insulting you and said you &quot;loathe&quot; a word which I thought was a fairly inert term of art. Would you believe I didn&#x27;t actually notice that you wanted me to say more? :) More than happy to give the benefit of the doubt though, the shoe&#x27;s been on the other foot for me more than once.<p>For my part, I also loathe the insensate writhing mass of frameworks, patterns and dependencies that is &quot;modern&quot; frontend development. Where you and I differ is I recognize a handful of extremely good ideas hidden in the morass. But I am perfectly happy dismissing the majority of it; if nothing else, you shouldn&#x27;t come away thinking of me as a React fanboy.<p>Writing is a lossy medium for thought, and programming is no exception. I&#x27;d say at a minimum that you and I are on the side of programmers whose code is a medium for their <i>own</i> thought.<p>All of these choices really just comes down to cognitive bandwidth, context, domain, taste, any number of things, really. Which is what was behind my first (admittedly terse, slightly salty) comment.<p>What I condemn is someone who opts out of making choices for themselves in their software. Web dev just happens to have an unfortunately high concentration of this sort of thoughtlessness.
          • cindyllm19 minutes ago
            [dead]
      • whstl2 hours ago
        <i>&gt; The master Render() function draws all of the graphics according to the current state</i><p>What you are describing is exactly what GP complained about: &quot;state as something distinct from both the UI and the data source&quot;.<p>React can be 100% stateless, functional, and have the state live somewhere else. You just need to apply the same limitations as your model: components should be simple and not store data in themselves.<p>This is why people came up with things like Flux&#x2F;Redux&#x2F;Reducers&#x2F;Immutability, to handle this in a standardized way, but nothing is necessary.
        • cluckindan1 hour ago
          &gt;components should be simple and not store data in themselves.<p>That is a ”controlled component” model which is bad for interactivity, especially text inputs.<p>If every keypress triggers a state change and rerender, the UI will be slow and things like focus management become complex issues.<p>Without a rerender, it must now use a reactive binding to update the field value.<p>If you don’t want to update state on every keypress, your component must be uncontrolled, store its state internally (in the DOM) and update it to a parent store e.g. when the user stops typing (debounced) or moves focus out of the field. These are not trivial things either, and as a result, components get more boilerplate to handle the UX complexity. And of course, there are now UX pitfalls.<p>Indeed, these are reasons why reactive patterns exist. Now, if they just managed to abstract away the tedium.
          • Izkata20 minutes ago
            I don&#x27;t know what people generally recommend now, but for a long time the best practices with organizing React components had them connected to the store midway down the tree or higher, which definitely would have contributed to the UI slowness since it would rerender everything below that on each update. Push the store access down as far into the leaves as possible and you won&#x27;t get anything noticeable, even though it is still doing more work than just accessing the DOM state as needed.<p>Also, focus management isn&#x27;t really a thing in React, the vdom diffing means DOM nodes are updated instead of replaced so focus isn&#x27;t lost or changed unexpectedly. There used to be a demo on the React homepage showing this, since the idea was very new to most people at the time - everything popular before it was just rendering template fragments to replace nodes and did have this problem.
        • codethief32 minutes ago
          &gt; React can be 100% stateless, functional, and have the state live somewhere else. You just need to apply the same limitations as your model: components should be simple and not store data in themselves.<p>&quot;just&quot; is doing a lot of heavy lifting here. Where do you store &quot;pure&quot; GUI state (button state, is expandable expanded, …)? Do you really want to setup Redux for this? (And no, the DOM is not an option in non-trivial cases.)
          • Jenk17 minutes ago
            Might be naive, but this has always been a concern of the view-model for me. Every GUI change results in a VM change via event&#x2F;command. The VM becomes gospel for UI state which means reducers are much simpler, and my actual model doesn&#x27;t care if it is indeed a button, expando, radio button or whatever else.
    • tobyhinloopen2 hours ago
      I use Preact without reactivity. That way we can have familiar components that look like React (including strong typing, Typescript &#x2F; TSX), server-side rendering and still have explicit render calls using an MVC pattern.
      • yde_java2 hours ago
        How and when do your components update in such an architecture?
        • gr4vityWall2 hours ago
          From what I can tell, they do full page reloads when visiting a different page, and use Preact for building UIs using components. Those components and pages then get rendered on the server as typical template engines.
        • tobyhinloopen56 minutes ago
          View triggers an event -&gt; Controller receives event, updating the model as it sees fit -&gt; Controller calls render to update views<p>Model knows nothing about controller or views, so they&#x27;re independently testable. Models and views are composed of a tree of entities (model) and components (views). Controller is the glue. Also, API calls are done by the controller.<p>So it is more of an Entity-Boundary-Control pattern.
    • codethief38 minutes ago
      &gt; UI elements automatically reacting to data changes (as oppposed to components updating themselves by listening to events)<p>Is there really a difference? Angular uses RxJS in a pub-sub scheme. (At least it did when I last used it.)
    • ivanjermakov2 hours ago
      I 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.
    • ramesh3156 minutes ago
      Give me state management vs. event bus management any day of the week. The former is fully testable and verifiable. You can even formally define your UI as a state machine. With events you are constantly chasing down race conditions and edge cases, and if your data lives seperately in components there is no clean way to share it horizontally.
    • AlienRobot1 hour ago
      In my view, the problem isn&#x27;t specifically reactivity but the fact that reactivity isn&#x27;t actually native of the UI toolkit.<p>Instead of HTML, think about GTK or Swing.<p>To add React-style &quot;reactivity&quot; to it, instead of just making a dialog to change the &quot;title&quot; of a document and committing the change when you press OK, you&#x27;d need a top-level &quot;App&quot; class that holds all the state, a class for state properties with IDs accessible at runtime which probably would be a variant (accepts any primitive type), a binding class to bind the toolkit&#x27;s textbox to the App&#x27;s state &quot;title&quot; property (because you&#x27;ll probably want to bind a lot of textboxes, so it&#x27;s easier to separate the code into classes), and then every time the user types something into the textbox, instead of using the toolkit&#x27;s code that is already written for you which updates the textbox&#x27; state directly, you block the state change in an event handler, send the state change to the App class, let the App class figure out the differences between the current state and the new state, and then it calls some callback in the binding class that is responsible for actually changing the text in the textbox to reflect the new App state. You&#x27;ll probably run into a ton of issues (selections resetting, assistive technologies bugging, etc.) that you&#x27;ll have to deal with externally somehow. All just to make it do exactly the same thing it would have done anyway.<p>It&#x27;s like you have a fully autonomous robot and you want to add marionette strings to make it move.
    • mpalmer2 hours ago
      Why do you list all of these design patterns as though you have to hold them all in your head at the same time? As though each one made the ecosystem successively worse?<p><pre><code> UI elements automatically reacting to data changes (as oppposed to components updating themselves by listening to events) </code></pre> That&#x27;s not so much a lack of statefulness as it is making zero effort to lift your application&#x27;s data model out of platform-specific UI concerns.
  • rounce3 hours ago
    Why have `&lt;div data-part=&quot;form&quot;&gt;` instead of using a `&lt;form&gt;` element?
    • zhisme1 hour ago
      this! it is absolutely nuts having everything in div&#x2F;span elements and then assigning data&#x2F;class attributes so they could behave like form or any other interactable element..
  • egeozcan3 hours ago
    IMHO, you shouldn&#x27;t make &quot;hate&quot; part of your tagline.<p>Maybe focus on a use-case? Something like, &quot;No-build, no-NPM, SSR-first JavaScript framework specializing in Time-to-interactive&quot; - maybe?
  • ale3 hours ago
    Build 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 &quot;true&quot; DOM-first component reactive system just use Web Components and any Signals library out there and you&#x27;re good.
    • xgulfie2 hours ago
      But build steps suck
  • joeyguerra12 minutes ago
    There are people who hate react?
  • cies6 minutes ago
    I went with SSR for a new project started 2025Q4. I&#x27;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.<p>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.<p>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.
  • febusravenga3 hours ago
    &quot;If you hate react&quot; feels like very bad argument in engineering.<p>Anyway, interesting approach for up to medium pages (not apps!). Totally not replacement for react.
    • anematode3 hours ago
      Perhaps a bad argument, but for some people a very compelling one...
    • austin-cheney3 hours ago
      Why 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.
      • bestest3 hours ago
        Does the author dislike react? How about preact? Or maybe simply jsx? Or nextjs?<p>There&#x27;s nothing wrong with either of these if used correctly. Thus &quot;hate&quot; is a rather shallow argument.
        • tobr3 hours ago
          Your 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.
        • austin-cheney1 hour ago
          I will safely assume the author dislikes all that overly complex bloat bullshit and leave it at that. I am not going to autism this, as in invent a bunch of straw men to attack because there is some singular obsession silo of react-like fixations.
      • corstian2 hours ago
        [dead]
  • wg01 hour ago
    Have tried multiple approaches. Sevelte. HTMX. Everything in between.<p>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.<p>Think of Shopify admin panel with product variations each variation having different pictures and what not.<p>Not saying not doable in plain JS.<p>But then Chrome can be written in NASM too, C++ is just...
  • bartwaardenburg3 hours ago
    The fields&#x2F;flags state model is a nice idea, having structured values separate from boolean state is something I haven&#x27;t seen in other frameworks. How does this compare to Alpine.js or htmx in practice? They&#x27;re in a similar space (no build, SSR-first) but I&#x27;m curious what made you go with a new framework rather than building on top of those?
    • dleeftink3 hours ago
      Think 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.<p>[0]: <a href="https:&#x2F;&#x2F;github.com&#x2F;statelyai&#x2F;xstate?tab=readme-ov-file#super-quick-start" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;statelyai&#x2F;xstate?tab=readme-ov-file#super...</a>
    • aledevv3 hours ago
      I agree, I hate unnecessary hypercomplexity.<p>Most of the time, it&#x27;s enough to build in a simple, clean, and lightweight way. Just like in the old days. Your server&#x27;s resources will also thank you. Furthermore, the simplicity of web pages is also rewarded by search engines.<p>If it were up to me, I&#x27;d build sites exclusively in .md format :)
  • eknkc2 hours ago
    I thought I hated React until I saw the samples on this page...
    • jfengel2 hours ago
      Any time I see code in quotes I get the heebie jeebies. Code in quotes can&#x27;t even be syntax checked until run time.
  • JSR_FDED2 hours ago
    Philosophically Datastar is on the same page. Incredible performance and dramatic reduction in complexity.
  • Aldipower1 hour ago
    Hate and love, the borderline framework for borderliners. SCNR
  • bearjaws1 hour ago
    Why use JS at all for SSR?<p>It&#x27;s not a great language for it.
    • azangru1 hour ago
      Where does the article say anything about js for ssr?
  • Bengalilol2 hours ago
    I must have overlooked the site, but are there any working examples?
  • lo_fye49 minutes ago
    I 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?<p>See also: HTMX and possibly even jQuery
  • 1GZ02 hours ago
    Yeah, no thanks..<p>I&#x27;ll just stick with a $5 vps with lamp and jjquery
  • chattermate3 hours ago
    [dead]