Moving on from Durandal
First, a little background.
When I first started working on web applications in 2013 it felt as if a new JavaScript framework was being released every week. I tried experiments with AngularJS and Ember.js among others before settling on Durandal.
This was long enough ago that I remember panicking when Rob Eisenberg took up a position at Google to work on AngularJS. I wasn't sure what to think when he left Google 10 months later because he didn't agree with design choices being made in relation to Angular 2.0. By that stage, the app I was working on was in production using Durandal and working quite well.
I had hoped that Durandal would continue to be updated with all the new features that were being added to browsers but then Aurelia was launched. Development on Durandal came to a halt but I was excited for Aurelia's standards based approach and hoped it would gain widespread popularity. Unfortunately, that wasn't to be.
The app I'm working on is still using Durandal successfully but there have been issues when trying to add new features and to keep the build pipelines running as some NPM packages are failing due to dependencies no longer working with them. So, it's past time to look into a new framework.
The first place I looked was for a migration path from Durandal to Aurelia. There were not many available and examples, such as this one, were not straight forward. There is a small but active fanbase for Aurelia but the fact its adoption was so small was a red flag that a similar situation to Durandal may happen again.
I decided to see what else was on offer.
The Current JavaScript Framework Landscape
There are still a number of JavaScript frameworks available and the churn appears to have calmed considerably in the intervening years. I decided to look at well-established frameworks with support from a corporate entity or a big community. This narrowed things down to the big 3: Angular, React and Vue.
There are lots of comparisons between these 3 frameworks on the web so I won't repeat their arguments here. I think all the frameworks can do an excellent job and there are plenty of examples and great documentation.
I first ruled out Angular as I was hoping to keep the web app as small as possible. Angular loads everything it needs even if it's not required by the application.
It was pretty much a toss up between React and Vue. Both have big communities and are open source.
React has the backing of Meta which can be a benefit and a drawback. When I was looking at Angular back in 2013-2014, there was no migration path between Angular 1 (now AngularJS) and Angular 2. I previously worked on a Silverlight app before Microsoft decided to stop supporting the framework last year. Support for AngularJS ended earlier this year. Support from a big company can be great but if they decide to change their strategy the environment can change faster than you expect.
Meta is investing a lot of attention and resources into the metaverse and I'm not sure what this will mean for React in the future. I don't think React will be going anywhere soon but I'm wary of that uncertainty. I also remember the controversy surrounding the React.js licence a number of years ago that left a bad taste even if they did move to the MIT licence in 2017.
That left Vue.js. I didn't feel there was a lot between Vue and React. I liked the structure of both and the fact you can plug in what you need. Looking at examples and documentation, there are a lot of similarities between them and it looks as if lessons learned can be shared across both frameworks.
If the decision is that close then I'm going to go with the community-driven project even if Vue had its own issues recently.
Next up, getting started.