If you care most about ecosystem, then React.<p>But really, if you just want to get things done without arguing about the twenty different ways it _could_ work, then Vue.<p>React and ecosystem are overflowing with conflicting paradigms and mismatched libraries and frameworks for your frameworks that all make it very messy. In code, and with humans too, it all becomes difficult to navigate.<p>With Vue, you just do it the Vue way and it all just works. Then you get to focus on more important things like how to craft the product.
Of this list, I'd choose React. It's the most supported, has a lot of well-maintained components, and I've found it the easiest to hire for.<p>If you're interested in another option, I really recommend looking into Solid.js. It's not as mature or component-rich, but it does a great job of solving some issues with React. The biggest benefit to me is the "signals" system. It allows you to use state between components without having to use a Redux pattern or pass layer after layer of props. I also love that it's compiled, which keeps the end product small and quick, but also can help find some issues before runtime.
I have made projects in Angular 1, Vue, React, and Svelte. I would start a new project using React because it’s the most popular, it has the most well maintained libraries, LLMs know it better, and the other frameworks aren't much different.<p>Svelte is nice but I like react/mobx more.
Vanilla Web Components (probably with Lit.dev). They've come a long way in the past decade, and if you decide to go full framework later you can bring your components with you.
Svelte. It's the only front end framework that "clicks" with me and I find I can build MVP/prototypes and simple apps much faster than in other frameworks.
I can't comment on the benefits at scale that another poster cites, but I've been working on an Angular project in a small team for four years now. This was quite close to a greenfield project, only a very small amount of code had been written, but we decided to keep it and stick to Angular even though two out of three of us had more experience with React. I had done both React and AngularJS and went in thinking that there wasn't much of a difference between frameworks.<p>I would not pick Angular again for a new project under any circumstances.<p>We have had many problems with the build system (e.g., an update suddenly bumped build times to several minutes due to some configuration option), the build process is ridiculously heavy, our laptops with 16GB RAM struggle with it often.<p>And we have had countless bugs related to component initialization and statefulness that I am certain would not exist in React. Our code is littered with early returns and ?.s that exist only because things are undefined for a split second before all the state comes in. We use a lot of RxJs, but it's quite often like coding in two separate environments and you need to write a bunch of boiler plate to bridge the observables to the inputs. There's no way in hell we're ever going to be able to move all the old code over to strict null checking, so we're missing out on a lot of the benefits of Typescript.<p>I don't agree with Angular's decision to have component classes that get newed once and then kept around for a long time and manually updated. It's much less ergonomic than React's way of doing things, and the statefulness leads to real bugs. The untyped templating language is just... bad. Quite often typos and bugs lead to JS errors being spammed to the console at ~60Hz, which used to freeze my browser (though I think Firefox has fixed this by now).<p>And I haven't seen a single benefit of this! My co-worker (who picked Angular and has previous experience with it) cites performance, but honestly the only performance related comment I have with is that my high-end Thinkpad has trouble keeping up with the build system.<p>Are we using it wrong? Probably. But we're not being clever. We started from simple examples and moved from there. I read documentation and tutorials, and I still feel like there's so much I don't understand. After four years.
Are you trying to find a new role or build something for yourself?<p>Is an SPA actually required? You might be able to build what you need using tools that involve less mental and technical overhead. Take a look at htmx, UnPoly, Rails/Hotwire, Phoenix LiveView, and/or Laravel LiveWire. Or maybe even good old-fashioned server-rendered HTML if you don’t need to build something that’s highly interactive.
I think it usually comes down to Angular vs React for most legitimate decisions for longer term, maintained projects. I prefer Angular because all the major modules are built-in and you know what to expect when you open a new project. React reminds me of PHP sometimes because you never know what you're walking into. And two different React projects can look drastically different.
Unfair comparison. You should compare Angular with Nextjs and Nuxt. I'd throw in a few more options I think are worth considering, Astro, Qwik and SolidStart. My preference in order is:<p>Astro - Great DX, interop with any other framework, ship HTML by default.<p>SvelteKit - This one is my favourite to use. Avoids JSX, full stack, great DX. I think this one is similar to Vue/Nuxt, more a matter of taste than actual difference.<p>React/Nextjs - largest community, most number of jobs, courses, trainings.<p>SolidStart - Solid is just Web components underneath. It's the most vanilla of the list. It's a great alternative for smaller projects where you want to reduce the amount of 'magic'.<p>Angular - Google support and not much else. I wouldn't start a new Angular codebase in 2024, but if I had one I'd be happy to work on it and keep it up to date. The framework is mature and new features are still being added.<p>Lit - I'm adding this one as a bonus. If your main goal is to ship a component library I'd look into this one.<p>HTMX - skip this, it's just a meme
Angular is much more mature and stable. React deprecates half of their (major) features and changes the way to do (basic) things with every new version.<p>I have used both professionally at the FAANG I work at and React is simply not a viable choice for a long-term project.<p>If you had learned Angular on the version 2 and now picked up a project with the latest version (18), 95% of the features would work exactly as you remembered.<p>React went from advising to declare components as functions, to declaring them as classes, back to functions (and will probably go back to classes in a few versions given their track record). 90% of the resources you will find online will give you code that is either deprecated or doesn't follow the current recommendation.
I'm no web developer but I know that my company completed a migration to Vue a few years ago. When I've seen this conversation in my travels the answers are usually, React for Ecosystem/Legacy, Vue for new projects. But again I'm no web dev
For my new project I wanted to try something new but I ended up going with React again. At the end it was the right decision for me because of the libraries I ended up using. The community/ecosystem is just unparalleled. Whatever library you need there’s a big chance someone has built it for React. If you’re learning a new concept or tutorial there’s almost always a section about implementing it in, or the examples are in react.
I really like how Vue lays things out; very clean and comprehensible. The official docs are pretty great, and there's generally one obvious forward path.<p>But if you're doing anything weird there's a lot more out in the world for React. Even though it's kind of a big mess, quantity has a quality all its own.
I would personally use React out of the 3 as it's the best maintained, although it depends on the complexity of the project and whether something lighter could be better.