DEV Community

Cover image for JavaScript Frameworks - Heading into 2025

JavaScript Frameworks - Heading into 2025

Ryan Carniato on January 06, 2025

I admit I wasn't sure I'd be writing this article this year. It's easy to write articles that excite people about the potential of new technology. ...
Collapse
 
webjose profile image
José Pablo Ramírez Vargas

Thanks for the article. It was interesting.

I understand you're somewhat of a public figure and you probably mind what you say and how you say it, but I don't have a problem saying it how I see it: React is dead. Sure, there are millions of applications written in React, and those require maintenance, but what's beyond my comprehension is starting new projects in React. The React compiler adds so little that is just not worth it. How much time was it invested in its development? For these results? Just archive the project.

The fact is that both React and Angular are among the worst performers out there and people should just stop the madness. I chose Svelte, and I agree that SolidJS is also excellent. I just happen to like Svelte's syntax better.

So, I do understand that there might be a thing or so that is commendable in React (I can't think of one right now, though), but in practical terms, I think React should just give way to the next best thing.

Collapse
 
eglove profile image
Ethan Glover

How did Angular get pulled into this? Angular has already done what Vue wants to do with Vapor by using signals. Event replay is one of the things QwikJS wanted to bring to the public. Server side and partial rerendering per route. Templating on .html files gives you a syntax that's cleaner than DSL files like .astro and .svelte. I don't understand what you're calling out here.

I could probably agree with you if you had any details to share.

Collapse
 
webjose profile image
José Pablo Ramírez Vargas

What version of Angular uses signals? I would like to locate it in the benchmarks. Last I saw it, it was as awful as React.

Thread Thread
 
eglove profile image
Ethan Glover • Edited

I suppose the only metric you're using to determine if something is bad or good is krausest? Signals have been in Angular since 16, the current version is 19. Async signals via resources are experimental. zone.js is deprecated. rxjs is de-emphasized. Angular and Wiz are merging as a single framework incrementally. (Meaning it's implementing everything Qwik does.)

Does that mean it can get all greens on krausest? No. But Angular powers Google search now. Signals were merged from Angular to Wiz for YouTube for a 30% performance improvement.

There is no context API or virtual DOM, which are the source of most of the frustration around React, not krausest benchmarks. There is just dependency injection and templating.

So I think it'd be better to dig deeper into why you don't like React. Can't say I agree or disagree with anything you're saying because you're just saying "react bad." I have a bias towards "react bad" but I could also back it up.

Thread Thread
 
webjose profile image
José Pablo Ramírez Vargas

Well, over a dozen other UI framework/libraries get a lot more greens on krausest. Just because Youtube runs 30% faster now and Google Search uses something (Angular), makes that something king? No, would be my answer.

But let's see a different benchmark: github.com/transitive-bullshit/ts-...

Here's the chart, with Angular signals being second-to-last in the race:

Signals benchmark

On the bright side, SolidJS and Svelte lead the race.

In light of this appalling results by Angular, what would be the argument for choosing Angular over SolidJS or Svelte, which so happen to get most greens on krausest as well?

Finally, to answer your question: React is slow and has a high learning curve. When compared to Svelte, Svelte code base is between 25 and 35% smaller (I have done a rough estimation, find it in my blog, so this not a fact taken out of thin air), and Svelte's learning curve is much flatter.

If there were no other options available, I guess React would be an appealing choice. The reality, however, is that there ARE choices, much, much better choices. Does this answer your question?

Thread Thread
 
eglove profile image
Ethan Glover

Why is this so extremist and angry? Creating an all or nothing, if you say a positive thing about A, then you are my enemy? This is very Reddit politics. Let's take a deep breath. I see this a lot in the Svelte community, which is why I never got into it. I don't know how it got such an angry internet user fan base. And I feel bad that something well done is represented in this way.

First, I've been working with React and NextJS for about 8 years. (Yes, Next has been around that long.) Prior to that I was all about PHP and shipping no JavaScript. I'm new to Angular, learning it out of interest of new features and it being very stable; we'll get back to that. Second, performance benchmarks aren't everything. Signals aren't everything. I am not arguing with you, this is not a battle. I'm trying very hard to agree with you. You can throw graphs at me, but it's just going to raise more questions about what's actually being measured. What, in detail, makes you assign so much value to one benchmark over another? Why is this one the end all be all truth? Are you just looking for a confirmation bias? Those are rhetorical questions that I don't believe have any answer.

Instead, let's make a better argument.

Why I don't like React anymore:

  • useEffect destroys codebases in the long-term. I'm fully convinced after calling myself an expert for years that everyone these days is a React expert. But everyone, on a daily basis, wrestles with unclear React lifecycles that happen completely in the background outside of our control. Does that mean class components were better? Not necessarily. But there were benefits.
  • State management is a mess. The entire point of state management libraries like TanStack Query and Redux are to fix React by fighting the framework. Keeping "state" away from React lifecycles, recreating their own custom lifecycle API's, and desperately trying to control React's awareness of state changes until they're actually relevant. Look at the absolutely insanities worth of effort Legend State is going through to make React reactive. Tanner Linsley has said he's given up on the idea of reactive React entirely.
  • React doesn't care about CSR. RSC, server rendered frameworks, and focusing on forms + shared state between client and server is the ultimate escape hatch. The honest truth is React cannot fix the reactivity model without completely rewriting the entire framework under entirely new philosophies. And they refuse to even acknowledge its fundamental problems.
  • React has one of the lowest barriers to entry of any framework, but has a serious foot gun generation problem. People who work with other languages like Java or .NET think it can be used like a simple UI library (as advertised) and trust it to just work. When that fails they hire contractors to fix their absolute messes for them. When in reality, they probably would have been better off with a language-specific templating engine or HTMX.

Why I'm currently enjoying Angular:

  • Frameworks like Solid and Qwik are amazing in terms of innovation, but the reality is no one is hiring for them. Great to learn from, but I don't expect to be making any money from them anytime soon.
  • Features like event replay, route-level render mode, and signals bring together a lot of ideas from other frameworks. This is what I want to see more of. Not a bunch of reinventing the wheel. Trying to outdo each other on single benchmarks. There is still nothing in the JS ecosystem that comes close to comparing to "real" frameworks like .NET and Spring Boot. Because we can't stop reinventing shit all the time. Where is our standard library? Why can't we as a community manage to do more than new routers every 2 weeks?
  • Dependency Injection is nice. Like I said, React Context is terrible. And using JS modules as a way to handle instantiation via "wherever it imports first" has never fully sat right with me. This is something the framework really should handle.
  • Maturity. With React, you can expect to have to rewrite the whole thing in 2 years. So if you're doing design-centric small frontends on which the design is going to change all the time anyway, React gets this going very fast. Angular is famously stable, their update cycle is becoming very predictable and Google is very invested in web standards. The Angular community has a "we use Angular version 10, it's perfect, and we have 0 third party dependencies because they're not needed" type of audience. How do you get that audience? By building a solid framework. Not blaming issues on users or open source and calling it everyone else’s problem. React very aggressively doesn't want to be a framework. As a result, its ecosystem, while exciting, has a way of generating fake problems that young developers have fun solving but should not exist in product development to begin with. Angular very much does want to be that one-stop shop by baking in things like compilation, animations, form handling, routing, service workers, SSR, and state management into the actual framework and CLI.

As an additional note, it is not fair to say that with Angular you have everything you need out of the box and you don't need to install dependencies. Because Angular is not a UI library/meta-framework pairing. So you have to compare Angular not to React, but frameworks like Next and TanStack Start. Angular also uses many individual packages. So there is @angular/router and @angular/forms. TanStack has the framework Start, Router, and Forms.

This is why I say TanStack as a suite is more of a framework than Start itself. I think we need to raise the bar on what we call "framework" as JS developers.

Thread Thread
 
webjose profile image
José Pablo Ramírez Vargas

I'm not angry at all. I simply state the facts. The problem is that the facts are too ugly, perhaps? I simply find hard to believe that there are so many users that choose to be blind to these facts. I'm not anyone's enemy. I just want you (royal You) to argue with the same rationale and providing facts as well. It is very difficult to argue about anything when one of the parties does not provide facts and does not follow the rules of formal logic.

All right, with that out of the way, allow me some time to read this article you just posted. 😄

Thread Thread
 
webjose profile image
José Pablo Ramírez Vargas

Ok, I have read most of what you posted.

What, in detail, makes you assign so much value to one benchmark over another?

I feel compelled to answer this: Because I'm a scientist. We believe in what can be measured. Anything else is subjective. You cannot build airplanes based on subjective things. Things that work work because they rely on objective measurable things. It is as simple as that. Are the benchmarks perfect? Probably not, but they are far, far better than mere opinions and feelings and personal preferences, and even imperfect as they might be, they disclose important objective information.

Great, I think I have fully explained my reasoning. We can recap:

  • React and Angular are objectively bad choices.
  • Youtube performance improvements say nothing about Angular's performance in the absolute realm; this merely demonstrates that Angular is better than whatever Youtube was using.
  • It is true that it is not a sin to have "reds" in benchmarks, but it is also true that the fewer reds, the better, and if there are competitors that can get more greens, those are objectively better choices.

Ok, after the recap, we can say that:

  • Not everything is performance charts. There are some factors that weigh in choice, such as learning curve, tooling availability and overall capabilities. One cannot choose the fastest horse in the race if said horse doesn't have the needed features for a project.
  • What the developer knows matters, to some extent. Yes, in practical terms it is usually better to go with what is known, but to keep this line of thought is closing oneself to new and better things. Double-edged sword here. After all, people can learn new things throughout their lifetimes.

People who work with other languages like Java or .NET think it can be used like a simple UI library (as advertised) and trust it to just work. When that fails they hire contractors to fix their absolute messes for them. When in reality, they probably would have been better off with a language-specific templating engine or HTMX.

This "fact" is not a universal fact. I'm a back-end developer of "those days", and my preferred language is C#. I fit your bill perfectly. My case was the other way around: I came to the team to find an absolute React mess made by 2 dozen contractors. Because I am the team leader, I had no choice but to:

  • Learn React
  • Untangle as much as possible their mess
  • Learn a lot more of front-end development that I knew 3 years ago.

This is how I learned about Svelte. I researched the options. Now we are migrating everything to Svelte with the assistance of single-spa. So I don't think of myself as a front-end fanboy. I weighted my options and Svelte came on top (Svelte v4, so no signals).

As the team leader, I am continually pushed to learn more about the front end: TypeScript, how to type fetch responses, a better configuration system than outdated .env files, the creation of data table components, etc.

Collapse
 
tomasroda profile image
Tomas Roda • Edited

I think you need to be more open minded here. I’ve used a lot of frameworks and always ran away from react but i’m always willing to give second chances - and I have recently and been pleasantly surprised with the progress of the framework. One thing I’ve done was build a website that actually renders a 3D scene at first paint (and no I’m not using web workers or wasm), plain react but with careful compression of meshes, optimization of images and audio sizes, preloading and caching assets and all that jazz… I also built that same site in plain JS using webpack as a bundler… and built it using Astro with qwik and svelte. Finally I built it with next JS canary with the react compiler and PPR. The NextJS version has a near perfect lighthouse score on desktop, with 99 performance (it’s slightly lower on mobile obviously but depends on the phone) and 100 on accessibility, seo… that’s 1% less than what I was getting in Astro and the scene has higher quality, I’m using react three fiber instead of plain threeJS (a luxury of sorts) and I’m also loading “motion” and a million other things… but I do lazy loading (as I would in plain vanilla) and I also fetch with high priority above the fold…

TLDR: react is here to stay and I’d say that the framework is going to matter less and less in the future as they’re all moving in a direction of static and server rendering, so you should really be picking the framework with greatest financial backing and more usability. It’s going to increase your productivity and you’ll deliver safer products and more maintainable ones. If you want to experiment and challenge your self build libraries for those frameworks. Try everything and if it’s not good enough stop then try again later. You’ll learn a lot more than by avoiding things.

as a last note so people don’t think I’m a react fanatic. I’ve avoided frontend dev with a passion until I realized I gain nothing from doing that. I’m the type of person that has spent days building a server in ASM because id already done it in C, C++, Rust, Zig, Julia, Lua, Nim, Python… I love driving myself to madness with lower level programming.

dont let yourself get lost in the world of “blazingly fast”. Be blazingly productive and blazingly humble. It’s better

Collapse
 
webjose profile image
José Pablo Ramírez Vargas

I am open-minded. Why do you think I'm not? Maybe it is because you just read my initial comment? Perhaps you'll see a bit better from where I come if you read the responses I have given to Ethan's comments.

A quick summary: Both Angular and React are objectively bad choices today. If I can go with Svelte because it is objectively superior, I will go (and went, actually) for it. To me, this is being open-minded. Is it not?

so you should really be picking the framework with greatest financial backing and more usability. It’s going to increase your productivity and you’ll deliver safer products and more maintainable ones.

This statement from you has no supporting arguments or any logical path that I can follow. Svelte code is more maintainable than React code. This is an observable and measurable fact. It has nothing to do with the company backing it, and everything to do with the nature of both React and Svelte.

If you want to experiment and challenge your self build libraries for those frameworks.

Yes, that is exactly what I have done. Is that a bad thing? Is a framework/library a good one only when other people do the libraries for you? Is it a sin or frowned upon somehow? To me, this fact has no consequence. After all, I LOVE programming.

Thread Thread
 
webjose profile image
José Pablo Ramírez Vargas

This is a response to Ethan Glover, who have chosen to block me out of fear of what I have to say. Ethan:

How are facts a "rant"? Perhaps your ego could not take the reality of what is observed and measured and you preferred to live in ignorance? Perhaps you weren't prepared to read what I wrote? I'm open to discussion so long the discussion is based on facts and logical reasoning. Are you capable of arguing with facts and reason? If yes, by all means, let's argue.

If you feel up to the challenge, unblock me and let's have a rational discourse on the topic.

Thread Thread
 
tomasroda profile image
Tomas Roda

You’re right I do admit I only read your main post. Also I did not mean to sound paternalistic or aggressive, if I did sound like that it wasn’t my attention, just a discussion!

What you said makes sense, the comment to me is good, was glad to read it. The bit about svelte and react’s differences in maintainability, I can tell you exactly what I meant:

  • if you’ve ever written just plain vanilla TS, you write a lot more code than in react. As an example, the 3D scene I mentioned was 3 files of JS in three JS, around 600 lines of code. In react it was about 40 lines to get the basic version going.

Svelte is fantastic, I love how close to vanilla it is, same reason why I do like Solid. Qwik is a masterpiece but it’s not like rust, you fight a compiler that is nowhere near as helpful.

My point to maintainability - less lines of code is better. But the most important, the more people can work with your code the more maintainable it is. And fact is react is more widely used.

Thread Thread
 
webjose profile image
José Pablo Ramírez Vargas

Hello! Yes!, the less lines of code, the better for sure! It is one of the measurable attributes I assign to the definition of "code maintainability". We fully agree. Thanks also for defining your frame of reference. Indeed, React's code is more maintainable than Vanilla TS under it.

Thread Thread
 
squidbe profile image
squidbe

less lines of code is better

Perhaps I'm stating the obvious, but clarity is more important than brevity. Some engineers elevate brevity to such a high status that they sacrifice clarity, which usually ends up sacrificing time.

I've been in situations where I had to try to decipher too-clever code where the dev wrote like they were trying to win the JavaScript 5k contest (anyone here old enough to remember that?). If I have to spend 3 minutes deciphering things like extremely abbreviated names and arcane use of bitwise operators vs. spending 1 minute reading 3 extra lines of self-explanatory code, I'll gladly take the 3 extra lines.

Thread Thread
 
webjose profile image
José Pablo Ramírez Vargas

Agreed. The measure is not to be taken to the extreme. Generally speaking, if you have less code to maintain, it is easier to maintain. It should not be taken further for the purposes of measuring "code maintainability". Common sense to be applied. 😄

Thread Thread
 
squidbe profile image
squidbe

Yeah, as mentioned, obvious to some 😊. I get the impression there are a fair number of junior devs here, so I just want to encourage clarity over brevity.

Collapse
 
eglove profile image
Ethan Glover • Edited

I would just avoid him. He's just here to rant about Svelte. I don't know what happened to that community. The vegans of JS.

You make great points. React is a nice go-to when you want to do some very heavy UI. I don't know how it's possible to do anything less than 100 on Lighthouse with Astro. But lighthouse isn't a great measurement to begin with imo. The numbers you get from field data are always wildly better.

But the problem with React is maintenance and scale. While it's very easy to get a complex project going, it will fall apart under bad lifecyle management and state management. As long as there's more than one developer working on it, it has no chance. I've done enough contracts now to know this. Nobody really knows how React works... everyone knows the rules... but React itself doesn't work. Why are all state managers using "external state"? Why can React never be reactive?

I think these are the main gripes that are the real core of complaints about it. Nothing about whether or not you can do a fancy thing really fast. That's great, and honestly you should be able to do that with anything. It all comes down to what you know best.

So I think those arguments are void. What are the real technical differences that drag react down? Reactivity, and lifecycle management.

Collapse
 
etienneburdet profile image
Etienne Burdet

I think a reality in 2025 will be: "please let us cacthup before any new feature 😭"

I mean we all are exicited by resumability, Rolldown or wathever, but really for real day job on real large codebase, most of us have yet to test SSR: bsky.app/profile/tannerlinsley.com...

Migrating those big production apps takes time, but you do get different insights from what you get on test or greenfield projects.

So please, if you wanna be cool in 2025: be the one who brings easy upgrades or migrations. Else we'll just stay on React CSR forever. Svelte 5 migration script has quite the heads up here. Just sayin'…

Collapse
 
joelbonetr profile image
JoelBonetR 🥇

I really love to read articles like these, thank you a lot for taking the time and effort to share! ❤️

Collapse
 
wizard798 profile image
Wizard

Dude, just amazing,
When I first show title, I was "dude, once again this repetitive post of list of frameworks with bunch of advantages ", but nah it was something new, or I'm seeing this type of content first time with real facts not by some you tubers saying overall advantages, they say what happens on upper layer like performance but what happens really inwards nobody says that
Thanks for this

Collapse
 
ryansolid profile image
Ryan Carniato

It helps being a framework author myself (SolidJS) and being very well versed in the work most JavaScript Frameworks are doing. This type of content isn't always the most accessible but if you like it you should check out some of my other articles. Thanks for reading.

Collapse
 
wizard798 profile image
Wizard

Definitely do

Collapse
 
getsetgopi profile image
GP

The cyclical nature of technological evolution is evident in the realm of front-end development. Initially, we began with a modest toolkit comprising basic HTML, CSS, and JavaScript, relying on server-side rendering (SSR) technologies like JSP and ASPX. As the field progressed, we witnessed an exponential growth in complexity and tooling.

The front-end landscape expanded to encompass a myriad of new elements: compilers, Node.js integration, pre-processors, templating engines, micro frontends, and headless architectures. Package managers evolved from Bower to NPM, bringing with them an ever-expanding universe of JavaScript libraries and, admittedly, some superfluous packages.

We observed a significant shift towards client-side rendering (CSR) with the rise of frameworks like Angular, React, and Vue.js, which currently dominate the industry. However, the pendulum is now swinging back towards server-side rendering, driven by the pursuit of enhanced performance and optimization.

This oscillation between SSR and CSR reflects a broader pattern of technological refinement. As developers continue to seek the perfect balance between user experience, performance, and maintainability, we may find ourselves revisiting and reimagining familiar concepts.

It's conceivable that in the near future, we might see a resurgence of SSR techniques, potentially integrating modern approaches with traditional server-side technologies like JSP and ASPX. This hybrid approach could leverage the strengths of both paradigms, offering a more nuanced solution to the challenges of web development.

As we navigate this evolving landscape, it's crucial to recognize that innovation often involves reexamining and repurposing existing ideas in light of new contexts and capabilities. The cyclical nature of front-end development serves as a reminder that progress is rarely linear, but rather a continuous process of adaptation and refinement.

Collapse
 
eglove profile image
Ethan Glover • Edited

Well written and thoughtful. The point on compilers hits hard on the trend that was "no build step." Which I never understood. I don't know why JavaScript has to be the only language on the planet that has no build step. It only benefits.

Collapse
 
mindplay profile image
Rasmus Schultz

I don't mind the build step. It doesn't matter - with Vite, I don't even notice it's happening.

but that's a fairly odd argument 😄

how many of these scripting languages require a build step: JavaScript, Typescript, Python, Ruby, PHP, Perl, Lua, Bash?

the correct answer is 2 😉

scripting languages generally don't require a build step - that's the reason why scripting languages are even a thing in the first place, you trade off computational efficiency for developer efficiency.

but JS hasn't been a scripting language in many, many years. it isn't even one programming language, it's more like a meta programming language with many, many subtle variations, and it has been, for a very long time.

so I can kind of see the point that JS sticks out.

but also, it doesn't really matter anymore, not since tools like Vite or Deno - the experience simply isn't significantly different from using a scripting language, because things compile and update faster than you can ALT-TAB and press refresh. (assuming you don't have HMR, which makes updates practically real time haha)

Collapse
 
fyodorio profile image
Fyodor

Such a lot of strong opinions in the article itself (which is amazing) and even more in the comments 😅 Thanks for this insightful read.

The most important thing IMO (another one) is

We live in a world full of complexity and that doesn't appear to be changing any time soon. So 2025 feels like a good time to hunker down and get stuff done.

Collapse
 
baohuynhlam profile image
Bao Huynh Lam • Edited

This is a such a well-written articles that consider multiple perspectives in a very impartial tone. I love that you acknowledge the power and shortcomings of signal-based reactivity too.

developers are starting to understand the depths of tradeoffs present...I do expect people to come to a new appreciation for React

As I work more with Solidjs, I have also started to encounter these trade-offs too, mostly with DX and not be able to destructure objects easily, and have come to quite appreciate React's given simplicity due to "re-running everything". Still it's a good experience learning other frameworks.

And compilers are getting so awesome too. Hope that the Svelte compiler can bring the syntactic sugar to other parts of universal reactivity

Collapse
 
jon49 profile image
Jon Nyman

Cut out the middleman. Use MPA and progressively enhance with html-form and web components. If you have a highly dynamic page then use a small front end lib for it, like vanjs, Signals, Svelte, etc. Use service workers to make it work offline, if needed. And make it a PWA while you're at it. That makes for great DX and UX.

Collapse
 
tythos profile image
Brian Kirkpatrick

The "server first" trend is something I'm old enough to have seen switch back and forth several times in the way pendulum trends typically do. I strongly suspect it's over-corrected and due for a reversal soon (if the growth of "hydration" isn't already signalling something like this). At the end of the day, the systems engineer in me shudders to think of the wasted compute cycles just sitting idle on a billion user devices when some small set of servers are driving their hamsters crazy with the time and energy needed to custom-render responses for every corresponding frontend request and the corresponding state associations...

Collapse
 
zaunere profile image
hz

I guess this explains why browsers are the biggest resource hogs in tech today yet still don't work quite right.