Angular v14 is now available
blog.angular.io
blog.angular.io
Other than Google's own services, does anyone have any examples or experiences using Angular nowadays?
Enterprise and Government are particularly keen on it.
This when we just don't just use SSR + vanilaJS/WebAPIs.
Bi-directional data binding and the isolation between style, structure, and logic felt was less productive. Angular has some nice properties, like dependency injection built in, but you can circumvent many of those needs with a functional component tree in react (or limit the surface area across components). The simple fact that you need @Output event emitters to handle callbacks is a good example of how bloated it feels.
It may be that I don't know nearly enough about Angular but even after a year of doing my best to learn the idiomatic Angular ways I wasn't impressed.
Off hand I know it's used heavily at: Google (duh), Microsoft, VMWare, Capitol One and Fidelity.
I used it at Microsoft though there is also a ton of React there. I worked on PowerBI which is/was entirely Angular. The rest I just know from going to NgConf and seeing those other companies recruiting there.
Most popular. It still has more weekly downloads than Next on npm.
Disqualifying React is disingenuous, as they are are still mutually exclusive options.
But even excluding React, Angular is at best as popular as Vue.
The reason being: no one around the company likes maintaining those projects because they hate the framework and we haven't been able to hire people willing to learn/work with Angular.
I love the framework as it has almost everything you need out of the box. At the beginning I hated it but as any tool/language once you get the architecture, patterns and ways to build stuff you feel it's a great tool.
But I can't agree more, Angular has for its whole existence of 10+ years always been more consistent. But it's not always about tech - Facebook's Marketing > Google's Marketing ...
Facebook used React internally before releasing it. Every new web front-end at Meta is written in React. They also had a convincing story of how the runtime expands beyond the web (React Native etc.)
With Angular, you’d be hard-pressed to name a Google service built using it. It seems to be a framework created condescendingly for the ordinary others, not the Mountain View geniuses themselves. That’s not great marketing.
The Angular Team act like it's a great feature that they don't give "special" support to in-house dogfooding teams, but that just leaves as much an impression that they'd rather just support everyone equally bad. Sure "no special support" sounds great on paper, but it certainly looks like "no support at all" from where I'm standing.
Some Angular proponents will also make excuses that the Google Cloud Console is an amalgamation of components and pages owned by a variety of different teams, like that's a unique situation to Google that no one else deals with bureaucratic scale like that. I guess they haven't experienced much other enterprise development, because that is very common in my experience. If they aren't building Angular for multi-team enterprise applications, what exactly are they building it for? (They are certainly advertising Angular as great for those, even if they are using it as an excuse for why Angular isn't performing well in Google's own usage of Angular.)
Large companies have large company issues regardless of front end framework.
Anecdotally, having to profile the performance of apps I've built on Angular and React I'd much rather be profiling a React app than Angular any day of the week. I got so frustrated with Zone.js at one point I wrote an entire "Component Framework" for Angular to avoid Zone.js as much as possible and try to remove Zone.js entirely as a dependency in Angular apps that I need to profile.
The atomicity of React makes it applicable in an immense variety of usecases, however this comes at the cost of an ecosystem providing a very fragile dependency graph.
With React you'll almost always have the newest trendy thing available as a tool (and not with Angular)[1]. Which means if someone comes up with a completely new philosophy that might better match your (team's) mental models, chances are it's available for react first.
OTOH this means chances are that the concensus of "how to do things" has changed so much within a short time, that older projects are not only difficult to upgrade, but consist of code that is really, really hard to understand at all.
[1] e.g. there was a time when Google's own Material UI was better implemented for React than for Angular.
Go to a job listing site and you'll find just as many positions hiring for an Angular dev (often paired with C#/ASP) as you will React.
Boot camps, job listings, conferences, paid learning materials, etc all favor react in numbers.
(*) By bloat I mean that I often feel like I should have been able to implement whatever feature I just implemented in half the amount of code.
It's my opinion that Angular would have safeguarded those projects from a scattered architecture with its opinionated framework, and ultimately resulted in less overhead associated with onboarding new resources and getting them up to speed.
The types of companies you listed aren't necessarily known as being engineering focused, and for a React project to really scale, I think that you need a good engineering culture to make that happen. Choosing Angular alleviates some of that work, and that's exactly what some companies need.
It was succeeded by Angular (versions 2 and up), which is very popular for large complex apps at large companies. I think React, in the form of Next and other frameworks built around React, have finally caught up with the reason that made it so: more stuff "in the box", with decisions already made and already working.
If you have 200 Angular projects, there's a good chance developers can move between them without much difficulty. If you have 200 React projects, they might have 15 different combinations of selections for various accompanying libraries. This makes moving developers around harder (matters a lot in large organizations).
For example, nearly every Angular project uses Angular's CSS isolation mechanism plus Sass for complexities on other axes. Whereas there are various popular CSS solutions that divvy the React user community among them.
There are trade-offs, of course; Angular has so much in the box that so far nothing like Next (convention-based routing etc.) has sprung up around it. So I am quite bullish on React and Angular both - there will be lots of large important projects churning along with these in another decade, and beyond.
Also important to remember that these are just the two most popular; there are a couple of hundred other competing SPA frameworks that work very well for their intended use cases.
I think Angular not quite in "the graveyeard", but probably only because a lot of large organizations outside of Google have large code bases that are built on it. (Having said that, I forget who they are — VMWare and CapitalOne and such, maybe?)
Still, it is definitely not a hot technology any more (if it ever was... I think the botched "upgrade" from the old "AngularJS" to the (completely different, almost a repudiation of a lot of the core ideas of the original) "Angular" framework shed a lot of users, so maybe Angular was never actually "hot" to begin with).
I definitely wouldn't start any new project using Angular, except in one specific circumstance: you have a large (relative to the size of your development team) body of existing software that uses Angular.
Then, you might want to share components and libraries across apps, and also leverage the skills of your existing Angular-using team.
I do find it somewhat harder to hire for roles specific to Angular development (I think because not many people want to learn it), and I also note that deep Angular knowledge isn't likely to be that helpful when looking for a new job, either. It counts for something, sure, but experience with React is far more sought after, and even Vue or Svelte is likely to be a little more useful.
Angular isn't horribly less capable than those frameworks — it does a lot for you, makes things like accessibility easy^W possible, is TypeScript-based which is overall a big win IMO — but there is, and has been, just too much fuckery around the edges.
I don't think Angular is really keeping up; I'd say it has been slowly falling even further behind the general state of the art.
The rollout of Ivy (its new, more performant rendering engine) was a multi-year boondoggle. It was late, it was painful to migrate to, third-party libraries still haven't really migrated so you still have problems/annoyances using those, and it sucked all their resources away from other important aspects like the Angular Language Service — so we didn't have good completion and linting in editors like VS Code, for quite a long time.
There was also nobody left to fix the testing story. They finally killed off Protractor, their bespoke E2E test monstrosity, after years of letting it languish, but the testing situation with Angular is still really mediocre and sub-par. Modern E2E frameworks like Playwright or Cypress support "component testing" (test components without rendering your whole app) for React and other frameworks out of the box, but not Angular.
AFAICT that is because Angular has this weird "NgModule" system where you construct these Angular-specific module things, and then they can import other Angular-specific module things... so rendering a component is not at all simple. The Angular team seems to be trying to make this optional, and Angular co-founder Igor Minar tweeted some "NgModule becoming optional soon, I think!" kind of teaser... before he left the Angular team and Google. That was several months ago at least; I also think he was the last founder to leave, so there are none left if I am not mistaken.
The i18n story recently finally upgraded to 'meh', after several years of being 'ugh'.
The DX is objectively bad — builds are very slow. There was some talk of taking the type checking out of band, so that it would still happen, but not block the edit-and-re-render iteration loop — but that hasn't happened. So in a non-trivial project that loop (which is typically the main loop) is slow.
Angular does do a lot for you, but in order to do so it monkey-patches DOM to hell and back — every async operation is monkey-patched so that it can do automagic change detection. That works great except when it doesn't work or when it makes things super slow, and it also makes debugging kind of nightmarish IMO — you end up in this 100s-of-frames-deep call stacks going through the zone.js async operation interception library. They are trying to make zone.js optional, too — or maybe it's technically optional now, but not really as a matter of practice.
TL;DR — Angular works okay, but after working with it in production for the last several years, I'd say is pretty mediocre; C- would not use again
(?) I'm just guessing though.
Angular can certainly migrate to "real" decorators any day now, but my criticism stands that they could have already switched to the desugared form of the new proposal already (which resembles the desugared form of Python annotations) and have been better prepared for a migration. I've got a feeling part of the reason they haven't prepared for such a migration already is that maybe the DI is using too much Typescript-specific support in the "fake" decorators that maybe isn't likely to get carried forward into the "real" decorators.
I do think TypeScript's goal to be faithful to / eventually consistent with upstream ECMAScript would outweigh maintaining the current decorators for Angular.
So perhaps the most likely outcome is that TypeScript will at some point announce the deprecation of the current decorators, and this will cause Angular to have to migrate as you suggest.
I also have some serious doubts about the long term viability of React for what it’s worth. They made some choices early on in the project about how they decided to integrate with the wider web platform that made a lot of sense at the time but are now big liabilities that they can’t get rid of.
Like I wouldn’t consider starting a new project with React in 2022 if I wanted it to still be around for more than 5 years.
React tries not to be awful and generally seems to have a good idea of the direction it is going. It's not perfect, no tech stack is ever perfect, but as an "expert" at this point on both stacks, I'd wholeheartedly recommend React over Angular.
I have got into technical discussions to back up my anecdotes. As I've mentioned I've blogged them before. I've even at this point built open source libraries to work around Angular technical flaws.
(In my opinion: Zone.js and Angular Change Detection are these extremely baroque, over-complicated systems that aren't necessary at all if Angular actually trusted RxJS to "push" changes. Or they could skip the huge RxJS dependency and go all in on "pull" like Vue/Svelte. What they have today is a worst of all worlds compromise that benefits no one.)
Blog post is here: https://github.com/WorldMaker/blog.worldmaker.net/blob/gh-pa...
Or you can read it on my actual blog site but it scrolls horizontally when the browser is wider than tall and that got a lot of hate the last time my blog was on HN that distracted from the contents: http://blog.worldmaker.net/2021/06/26/angular/
While we are at it, here's the Component Framework I built out of what felt like necessity to try to make following RxJS best practices easier in building Angular Components (and make it easier to switch components to ChangeDetectionStrategy.OnPush and apps towards being able to set Zone.js to "noop"), which I built out of some struggles doing performance optimization work in Angular and some patterns I was already following in Component building:
Documentation site: https://worldmaker.net/angular-pharkas/
NPM package README: https://www.npmjs.com/package/angular-pharkas