Angular vs React vs Ember vs Vue – JS framework comparison

I still remember those days when JavaScript frameworks started raising their heads in the market and developers were struggling due to lesser amount of documentations and tutorials.
But today, a lot has been changed. Those frameworks have come along a long way since that day. Angular has been completely re-written, React got a popularity boost in the market, Ember got an awesome cli to force you more into the programming principals, and a new community of Vue.js, a hybrid of angular and react grew exponentially.

Plenty of tutorials are out there today, a number of blogs and vlogs. But the more the options, the more the confusion to choose one. And that’s exactly the problem lot of developers face these days.

Well, today in this article before going in depth, I would like to show some quick differences in the table below. Remember, here by angular I meant angular version 2 and above, react means not only the library but the react eco system, both ember and vue is also considered version 2 and above.

A quick comparison

Parameter Angular React Ember Vue
Github Stars + Forks 37k+ 95k+ 22k+ 75k+
Component architecture Yes Yes Yes Yes
Binding Two way (default one) One way Two way One way
Baked by Google Facebook Community Community
Learning curve High Low & moderate Very high Moderate
Recommended Language Typescript JS, JSX JS, Handlebars JS, vue
Architecture flexibility No Yes No Yes
Separation of logic Good Good Awesome Good
Rendering speed Slow Fast Slow Fast
Most known architecture MVC Flux MVC Flux
Server side rendering Yes Yes Yes Yes
Cli Yes Not official Yes Yes
Mobile build Ionic React-Native Cordova Weex
Debugging tools Yes Yes Yes Yes
Testing Jasmine & karma Your choice Q-Unite Karma & Mocha, Jest
Data library No No Ember-Data No
Development speed (opinion) Normal Normal Fast Normal
Documentation Good Moderate Good Good
Best attraction Oldest framework Virtual DOM Principals first Combination of Angular & React

I am trying to compare as many points as I can; however if I miss something which you wanted, kindly put that in the comment section so that I can update the article with that.

Technical comparison

Honestly, this point doesn’t make much sense. Cause it’s no more those days when we used to compare features. Frameworks these days learn from each other and tries to adapt the good things from each other. So basically you will get almost all the features of one framework into another. But still there are some differences left. I would like to point them out here.

Angular: Bringing typescript is probably a good idea cause lot of new features comes into typescript way before than EcmaScript specs. This way your application will always have modern features.

React: I love react because of performance. The virtual dom was the killer feature and others (like vue) are trying to adapt that. But even the fastest framework sometimes become slow in some situations. But then react came up with react-fiber. With facebook being one of the most populated place in the internet, I’m sure react will keep coming up with new technologies like this.

Ember: Ember-data is a data library (not just for ember) which makes caching and querying super easy. It takes off all the headache of fetching, storing, retrieving and caching; all from the client side. Another great thing about ember is it forces you for the best practices. I recommend beginners ember, cause this way they will be familiar with better architectures.

Vue: Vue is a hybrid of angular and react. Angular is bulky and currently supports typescript majorly; whether react’s jsx thing is not suitable to all. Vue is the solution. Vue claim to be faster than any other in dom node manipulation.

Performance

Angular: Honestly speaking since version 2, there has been a huge performance issue with Angular. Now version 5 is released and things are improved, but still not good enough I would say. But as Angular is google baked, I’m sure very soon they’re gonna fix everything.

React: The concepts of keeping it a view library, virtual dom, one way binding makes it probably the fastest in the current market. There have been a lot of cases where in an angular or ember project, developers used react in a page where there was too many elements.

Ember: This elephant is a bit in the slower side; specially in rendering. The observe and change detection are way faster than angular; but the first render is super slow.

Vue: Vue shares many engineering concepts with React. Like virtual dom, reactive and composable components etc; which makes it equally fast as React. However vue claims to be more faster in dom element changes.

Code default architecture

Angular: The MVC framework has put enough effort with its cli to provide a predefined project architecture. Better way to get started; but it doesn’t give you a very architecturally distributed project setup.

React: React itself doesn’t have any architecture, however the community uses flux. You can check the differences of MVC and Flux if you’re not familiar already. Flux is definitely a better architecture than MVC, but setting up things is still a pain for beginners as react likes keeping itself completely non-opinionated and flexible.

Ember: One of the best distributor of logic I would say. Not only the project created by the cli is very rich, but also the combination with ember-data makes life more easy. Almost every single ember developer loves using the default architecture.

Vue: Very similar like Angular. You can distribute it further and structure it better. But bundling and all are well handled by it. But one of the big architectural problem with vue is, you can’t inherit components and forced to use mixins always.

CLI

Angular: Few days after the birth of Angular; they tried come up with angular-cli and since then it’s getting better day by day. Lot of the angular developers these days uses the angular-cli.

React: React doesn’t have an official cli; but the community uses this cli very much.

Ember: Ember launched cli long ago and it really has a very strong hold on this. The community started valuing the concept of cli after the success of ember-cli. Angular cli is also forked from ember cli.

Vue: The cli is not bad. Gives you power to setup the project using a template of your choice; i.e. webpack, pwa, browserify or some other thing. This approach of setting up project is great but doesn’t provide much to do further.

Learning curve

Angular: It’s a framework. So obviously there will be learning; cause you need to know where and how exactly to put your code. It has it’s own syntaxes for template handling, looping and many more. So learning curve is kinda big.

React: React is JavaScript. A simple library with few apis and a concept of data flow; that’s it. So if you know JavaScript and also have experience on any other framework; you can probably adapt React in a single day (not a pro though).

Ember: Ember is also a framework. So, like angular, there is a big learning curve. But as it follows convention over configuration concept; knowing the convention properly will also take a huge time of yours. You will always find a very less amount of Ember ninjas.

Vue: Vue is easier than Angular I would say; may be few things extra from react. People having knowledge of Angular and React will grasp it super fast.

Documentation

Angular: Good documentation; short and simple and to the point. Official docs are sufficient to continue your development on Angular. Apart from that the community of Angular is also huge, as angular JS is one of the oldest JavaScript frameworks. So lot of help can be fount from different forums and blogs.

React: React is so flexible that people people use it the way the want. That’s why finding proper documentation can be a little hard. However in today’s era internet is so rich that you will find something of your need. The official doc of react library is a bit small and may not be best suited for a beginner.

Ember: Long back the documentation of ember was really poor; but over the time they have drastically changed it. Now I can see the official docs are well organized, in depth theoretical contents along with code snippets. However due to small community, not much resources will be found from blogs and forums. VoidCanvas is one of those few blogs to cover ember in a large extent.

Vue: Sufficient enough to work with. You don’t even have to check any tutorial if you already have experience with Angular etc; just the official guide is sufficient. The community also grew very fast in last few months to provide you with more tutorials.

Organization support

Angular: It’s baked by the great Google. Well dedicated developers team, already being used different google projects in different versions.

React: Facebook first created it for itself then made open-source. As facebook is one of the most crowded application in a users perspective and requires a great performance; we can be assured that no react release will compromise with performance.

Ember: It’s not baked by any organization, but LinkedIn is completely on ember. Microsoft, Apple, Netflix and many other companies are using it now.

Vue: Again not baked by any organization. Currently the biggest consumer is Alibaba.

Community support

Angular: This is the oldest framework; thus the community is huge. Angular was one of the first who helped the JS framework concepts to grow. However after the failures in its version 2; it lost the popularity a lot. Hope angular will again become the master in this field.

React: React is probably having the largest share in the current JS community. You will find enormous amount of plugins, libraries, sdks and blogs out there in the internet for react.

Ember: Ember never had a big community; probably due to the immense learning curve and slow rendering. But lot of dedicated people are out there which helped to create ember observer with a lot of plugins. But still nowhere close to the giants.

Vue: The vue community grew exponentially in last few months. Though a big part is non-english speaking; but still a huge amount of contribution can be seen.

language preference

Angular: Angular says that you can develop the application using native JS as well, but trust me you can’t. It will increase unnecessary complications and you will end up doing that. So I would say TypeScript is the only language preference with Angular.

React: Though JSX seems like non-javascript, but if you exclude the html part in it, it’s quire normal JavaScript. You don’t need to learn new language; but yes JSX is the language for react.

Ember: Ember is on pure JavaScript. If you scaffold the project with the cli, then you can freely use ES6 and above. The templating is handlebars, which is logic-less template.

Vue: Vue’s case is also similar to react. Though the extension is .vue, but it’s more like the combination of JavaScript, html & css.

Mobile development

Angular: Community uses ionic framework to develop smartphone apps using angular.

React: React has a very strong hold in this domain. React-Native is a awesome way to develop mobile applications. None of the other framework are close to react in this.

Ember: Using cordova you can convert ember applications in mobile app.

Vue: Vue community seems not very sure what to use, but a lot of them are using weex.

Job market

Angular: Most angular jobs still seeks angular.js 1.X developers; cause many application didn’t upgrade to version 2 and above due to huge implementation effort. Angular 2 developers hunt is also there but not the way the market needed for 1.x a year or two ago.

React: A bull market I would say. Majority of the front-end jobs in stackoverflow or weworkremotely needs react. Definitely the first choice if you are reading this article to get a job.

Ember: Small community so small job opportunity. May be good as a freelance developer as development in ember is faster than others. RoR community often search for ember folks as they are architecturally similar.

Vue: Not as huge demand as react, but the growth it has shown in terms of github stars, I’m sure it will end up very much like react. Lot of new startups and products are choosing vue these days.

Does these really matter?

Both no and yes. No, because all of them are stronger and you can literally create any application using any of them. They are constantly growing by adapting each others good points.
Yes, because it’s not always the only applications development. It’s about situations. For what do you need the application, how much time it can take, what kind of developers you have, how much depth in adapting new things and many more. I’ve just tried to raise few points which I considered in my life; but they are never sufficient to point your finger to one framework or to hail another like god. Life is all about change and adaptation.

About This Author

Hello! I am Paul Shan, a JavaScript Expert, Full Stack and DevOps Engineer cum Consultant based out of Bengaluru, India.

  • Just worth mentioning that Redux isn’t quite the same as Flux, and is far more common in use with React.. but can be used with the others as well. I use the angular2 adapter for redux at work in an angular(4) project.

    • Paul Shan

      Probably you are talking about the facebook-flux library here. Yeah they are not same. But the word flux actually is an architecture pattern (like MVC is also an architecture pattern). Both facebook-flux library and redux follows flux architecture.
      By the word flux in the article I meant flux architecture, not the library by facebook.
      http://voidcanvas.com/flux-vs-mvc/

    • Redux doesn’t follow the flux pattern either. It could be considered a reduced subset, but still not flux.

    • Paul Shan

      Angular and Ember both are considered MVC (or MVVM depending on implementation). But are both of them architecturally same? AngularJS used to have a single element to be considered as view, however in ember there are two elements for view, the view class and the view template. So that should have made ember MV2C?

      Architectural patters are big things. Libraries get inspired by them and implement it the way best suitable to them. Two libraries functionally will not work just the same way; otherwise both of them wouldn’t exist. But does the tweaks or modifications they do with the architecture on their actual implementation, create new architectures?
      Both yes and now.

      Yes, because they are somewhat different. No, because they are inspired by the same kind of behavior or flow.

      If the article was related to some in depth react comparison with flux and redux, then obviously both of the architectures would have been compared differently. In this article the audience are the ones who are gonna choose one of these to read or implement in their projects. Thus they need a high level overview to compare.

      If redux thinks making a single store and thus removing the dispatcher concept helps them, then they can do that. But this doesn’t change the fact of their data flow or base architecture. If someday redux architecture is vast enough to be considered as a separate one (just the way flux was inspired by MVC but still big enough to separate), we may start using the word redux-architecture.

  • Shivam Maheshwari

    Nice Article. Very detailed explanation.

    • Paul Shan

      Thanks! Your appreciation encourage us 🙂

  • Daniel Hawton

    Not sure I’d say React’s language is JSX. That’s like saying Laravel’s language is Blade, where as it’s actually PHP. React is pure JS, and often is written with ES6 and you can write entire projects without touching JSX (given React’s library nature).

    • Paul Shan

      My bad. Yes you are right. JSX is the view part and should not be considered the language for react. I’ve modified the table. Thanks.
      I don’t agree with the second part though. Theoretically we can develop projects without jsx (with simple js); but practically it’s not possible cause the pain will be too much. Like, Angular also says you can use it without typescript, but trust me I just tried to make a todo app with plain js in ng2 and hated it.

    • Ovac Richkid Boya

      I’ll go with you on this one @metalshan:disqus

  • Art Jabkiewicz

    “…DevOps Engineer cum”?

  • mbokil

    Nice article. I looked at React, Angular 5, and VueJS and ended up converting Angular 1 apps to VueJS. It is easy to learn and works well. I felt it was less complicated than React and many of the benefits of React using components and a virtual dom.