Why Aurelia Struggles to Gain Popularity

I’m a dev for an Australian government department. We currently have 90 Durandal single page apps that are used by millions of users.

I’ve been trying to convince my co-workers to move to Aurelia for years, but it is hard to fight against the mindshare of Angular. A surprisingly big issue for me has been that it is not clear that Aurelia is essentially “Durandal 3.0”. That makes it harder to sell to management.

It is also quite difficult to get Aurelia up and running within our constraints. We have a test harness for our Durandal SPAs that can launch any single SPA with one build chain. I’m currently trying to figure out the best way to structure and boostrap Aurelia SPA projects so they can reside within the same codebase (without having a seperate node_modules folder for each Aurelia SPA).

That said - Aurealias binding syntax and common sense is light years ahead of other frameworks.

14 Likes

A surprisingly big issue for me has been that it is not clear that Aurelia is essentially “Durandal 3.0”. That makes it harder to sell to management.

A problem only management would have, as a quick look into some Aurelia applications would show identical code. We briefly held onto the Durandal brand, but wanted to distinguish Aurelia a separate product since we were no longer relying on third parties like knockout for core functionality, but had build core functionality from the ground up.

I’m currently trying to figure out the best way to structure and boostrap Aurelia SPA projects so they can reside within the same codebase (without having a seperate node_modules folder for each Aurelia SPA).

An issue that has more to do with modern JavaScript development than Aurelia, Angular will suffer from the same difficulties. Typically you would solve these issues at the module loader level, but with any of these tools it is possible to build a pre-built Aurelia bundle that each of your SPAs could depend on, ala a Durandal-style scripts folder. Jeremy Danyow has included some such bundles for use in gist.run demos, like this one: https://gist.run/?id=1b304bb0c6dc98b23f4a3994acc280e4

That said - Aurealias binding syntax and common sense is light years ahead of other frameworks.

We like to think we’re lightyears ahead of other frameworks by a few metrics. Additionally, we offer official enterprise support and services, which Google will never offer. Official is important here because interests are aligned: Aurelia only wins if you win. Angular consultants win so long as they get paid.

I hope this can help bring management around. If there’s anything we can do to help the cause, follow up here or reach out to one of us directly.

10 Likes

Speaking as someone absolutely new to Aurelia, but not JS frameworks (ExtJS?, jquery?), I would like to add that it’s super frustrating when the Quick Start leads you to an really simple error - the fact that the file name extension is wrong on the site or in the config file for Typescript. Never having used Typescript, I did not realize the error until I looked in developer tools in Chrome saw Aurelia was trying to load main.ts and not main.js (like instructed in the website).

Here’s what I found and after renaming my files, all works as expected:

I wonder how many other newbies to Aurelia and JS frameworks got super frustrated and just gave up on it? I almost did. I was heading to VueJS when I read a statement above about Aurelia using straight up ES6 or TS. That got me thinking Aurelia may win over VueJS. Sometimes it’s the little things that can make or break something. This is a little thing, a filename extension, but it caused a whole lot of frustration for me until I finally figured out the issue.

I hope this post helps some other newbie out there like me before someone fixes the website (or config file).

6 Likes

Thanks for the feedback @Digitalman42 ! We apologize for the frustration. We’ve been over those tutorials so many times, I’m surprised that slipped through. I’ll get that fixed in the next docs update this week.

6 Likes

A fix to the site docs has now been deployed. Thank you again for alerting us to the issue @Digitalman42.

4 Likes

Wow, that was fast. Thanks much!

Working fine now and I’m glad I stuck with Aurelia because it is super easy to learn and use. I’m rediscovering my love of UI after years of server-only work.

11 Likes

I’m rediscovering my love of UI after years of server-only work.

This ^

You’re not alone! Aurelia converted me from backend developer to frontend developer. I avoided frontend work like the plague for years, but Aurelia made it fun :slight_smile:

6 Likes

I’ve had a quick skim of the above, hopefully I’m not going over old ground but here is what I am experiencing. Please don’t take this personally, it’s just feedback.

I love the idea of Aurelia and the docs but struggle to get a basic app set up (30+ years in dev) due to…

Webpack, Node and NPM - I loathe these systems. Every time I use one of them, it breaks with a vague error. It feels like trying to compile an ancient C++ codebase. It gets very depressing.

I appreciate these are necessary and required, but they are also painful. I can waste days trying to get the basics working and when I do, have I done it right? Then I need to get it working on the build server and the other team members’ computers.

I think Aurelia itself is great, it’s the dependencies I suffer with and these reflect badly on this excellent framework.

Mini rant; right now I’ve tried several times to get ‘npm install’ to run after discovering I need to do this, it kept flaking out with;

  • Connection issues (bad broadband) causing a package to get corrupted and cached locally. Clearing the cache states ‘you don’t need to do this, it is self healing’ but it’s not. I had to use -force to do it and then get told ‘I hope you know what you are doing’. Retry install several times to get it to go through.
  • Permissions issues. Install states something like ‘You shouldn’t need to run this as admin’ but it lied, again. Did I do something wrong? I’m just following the instructions.
  • Tons of warnings. Have I done something wrong, is this going to blow up on me? For example, ‘npm WARN deprecated istanbul@0.4.5: This module is no longer maintained, try this instead:’ does not make me feel good. I’m installing deprecated stuff?
  • Security warnings about packages (just the test packages though). Am I installing backdoors? Attempt to fix and it says I have to do it manually as they are probably breaking changes. So I either install security flaws or hack / force package upgrades which may not work.
  • A package maintainer looking for a job by outputting colourised text in the console. I agree, they need a job and open source needs funding, just get out of my console!
  • Many warnings about being unable to find optional dependencies due to it wanting to be installed on osx.

Node / NPM is a horrible experience. I want to give up but I’ll keep going for a few days more.

In my ideal world I’d just include a single js script. Now I’m off to troubleshoot another build error from Visual Studio on a brand new project created by the cli.

Summary: Keep up the good work, find a way to ditch the horrible js ecosystem (might not be practical, I know).

Ryan

3 Likes

@RyanONeill1970 Aurelia has an official solution for this: https://github.com/aurelia/script

With that, stick a <script src='https://unpkg.com/aurelia-script@1.4.0'></script> to your html, and then:

/* if your app root is at app.js and app.html */
au.start()

or fully configured:

au.start({
  debug: true,
  root: 'app.js',
  host: document.querySelector('#app-root')
})

For more info about usage, please refer to the repo documentation :smile:

Thanks, I did see that. I interpreted it as ‘you can start by using script, but you’d really better use a package manager’ before long. I’ll give that a go.

1 Like

The only thing it requires is a webserver :smiley: , if you are loading module dynamically (use string as filename)

I spent the winter working from an AirBnb in a country with what I often described as “severly neglected infrastructure”, so I feel your pain!

I had much better luck using yarn with its offline mirror feature enabled. I have no idea why package managers don’t fallback to local mirrors by default :man_shrugging: .

The above setup has the added bonus that subsequent installs work completely offline which can be handy during flights or any other times you want to work with no connection. You will find that many packages also download binaries, etc in their install scripts but all the well behaved ones will cache locally too.

If you find any packages that don’t cache binaries or won’t install correctly offline, let me know and I’ll submit some more PRs. Plenty of developers forget that half the world are not on reliable, fast internet connections!

1 Like

@bigopon - Don’t you have an aurelia script builder somewhere where there is an interactive list of aurelia framework items that you can pick and choose and emit a customized js file?

1 Like

As a former backend developer (C#.NET), I can definitely relate. My first few weeks (maybe even months) with Aurelia, back when v1 was still in alpha, were full of missed deadlines due to all kinds of Windows-specific friction. Changing specs, rapidly changing bundler ecosystem, the horrors of node-gyp, it goes on and on.

The only redeeming thing was when things did finally work, it was an absolute blast to work with Aurelia!

Things have gotten better in the last 2 years but open source maintainers will never stop pushing breaking changes or causing random mayhem at the most inconvenient times for one reason or another.

In the past year of intensively working on v2 of the framework almost day-in, day-out, trying/using/ditching dozens of popular (and less popular) tools to aid with various pieces of automation, I gained a pretty detailed mental map of how things move, evolve and interact in the npm landscape.

And I can tell you it is not pretty. In keeping everything up-to-date all the time, on average every 2-3 weeks something somewhere in the build/bundle/release process has broken. Sometimes the remedy was a simple 5 minute fix, sometimes I lost a weekend, and once or twice I had to rewrite half the repository to accommodate for some major player suddenly deciding to take a new direction.

So in v2 we are cutting out as much as we can, hand-rolling stuff wherever possible.
This is for our own sanity after years of witnessing how just about any setup inevitably dies somewhere between 6-18 months after its inception.

Yes, things will be getting significantly better, more stable, more suitable for commercial purposes where there is just no time to deal with build processes breaking every few weeks.

9 Likes

Overall it depends what type of Web apps you are developing:

  1. Content Website.
  2. Business Web apps
  3. Enterprise business apps.

For light ones like content Website or simple business apps, probably a lightweight framework with some “flexibility” may be more appealing. For enterprise business apps with rich user interaction and complex business logic, a heavy framework with a lot predefined structures and components such as Aurelia and Angular could be more efficient and effective, especially when you team has no dedicated UI/UX designer and could not hire the top 5% JavaScript developers in the world.

Aurelia could be embarrassing sitting between vue.js lighter and Angular 2+ heavier. From certain point of view, this is really depending on human resources and the type and size of the product to be built, presuming all teams in the world had made the most optimal choice for their own contexts.

2 Likes

There are enough good points in this thread already.

What I’ve really appreciated is Aurelia’s opinions and the extra level of detail provided to get more than just the framework sorted. There are lots of things I have a vague understanding of but don’t know quite how to solve in JavaScript land around software development; bundling, testing (unit, integration, e2e), continuous integration, etc.

I like being able to see the thoughts around what was chosen and why, and then how it is used internally within Aurelia. I’ve enough experience that I’ll know it when I see it and really I just want to solve my business problems so I’m happy to leveraging someone else’s expertise.

4 Likes

I work for a government department with about ~40 devs in my area.

Our user counts are measured in the millions and we have 100 Durandal SPAs in production.

We are selecting a new framework. We narrowed our choices to Angular, Vue, and Aurelia. The problem I’m having with Aurelia is that there is no “killer feature” I can use to recommend Aurelia over the other frameworks. My coworkers have serious reservations about selecting a “niche” framework.

I like Aurelia’s convention over configuration approach, and the sensible binding syntax - but in Angulars case we can learn the binding syntax quickly, and the cli takes a lot of configuration issues away.

Also - nesting a component in a table based component was really painful in Aurelia.

1 Like

The killer feature of Aurelia for me is that Aurelia allows 3rd-party libs to touch the DOM. Don’t know about Angular, but any VDOM based framework, such as Vue, doesn’t work with 3rd-party libs automatically, you need a rewrite (the reason of huge react eco-system) or a not-trivial wrapper.

With Aurelia, I use bootstrap as bootstrap, use highchart as highchart, use select2 as select2, use codemirror as codemirror. If I want to reuse them, I wrap them in custom element/attribute with fairly easy-to-understand code.

Also - nesting a component in a table based component was really painful in Aurelia.

I am curious to see what design of Aurelia makes this hard, and how other frameworks work better in this use case. So far, Aurelia has not dragged me down when declaring view template.

3 Likes

The underlying issues might not have been considered properly. Binding syntax and cli configuration could just be some manifestations of some too conventional system that will likely lock you in.

The normal approach in this situation is to have 2 teams building the same thing, maybe?
And same with Chunpeng Huo, curious about the issues tou got with table as well

I haven’t tried it yet, but I like that Aurelia has a tool to create web components from Aurelia components. This may come in handy soon as our team has built out a nice component library in Aurelia that we may be able to share with other teams in the company who use ember and react.

1 Like