Our team has been using Aurelia for many months. While it has some cool features, there are plenty of gotchas that add a lot of overhead. Weeks spent on features that had to be reworked due to edge cases in DI, for example, or relying on some of the non-core packages.
It's interesting stuff, but don't jump into it expecting to run at full speed without tripping a few times along the way.
I have the same experience, We have been using it for months and I cannot say that we are happy. A lot of bugs, a lot of missing documentation, a lot of bloat, and some bad breaking changes. It seems to me that the Aurelia team wants to do too many thing at once, and cannot deliver to the standards that other framework provide.
It's sad because the underlying ideas are good. It is in many ways similar to Vue.js, which is very good. To readers considering Aurelia I would suggest trying Vue as well, or wait until Aurelia is more mature.
> To readers considering Aurelia I would suggest trying Vue as well...
And if interested in Vue, check out Quasar [0], a UX framework for Vue (recently made compatible with Vue 2.0) that seems to have a lot of the same goals as Aurelia UX.
Aurelia is arguably more mature than vue though I guess that depends on who you ask. Can you reference any bugs? Currently most issues that are open on the main repositories are feature requests or edge cases
I don't remember the specific bugs, but here are our main issues with aurelia:
1. The build ecosystem. We started with JSPM which has a lot of annoying issues,
worst of all a +-700Mo base install that takes 45min to complete, which makes docker
deploys really slow. Another annoyance is a config.json that is re-generated each time
you make a gulp watch and pollutes git diffs. The export config must be manually modified
each time we add a new library or assets and is also a source of errors.
We tried replacing it with aurelia-cli but couldn't get it to work with some
external dependencies. We are considering moving to webpack.
2. Probably related to jspm but loading our applications takes 3-10secs depending on the platform
and thus requires a loading screen, which I find unacceptable.
2. The documentation is in a web-application and is not indexed by Google.
3. Some modules have a javadoc style documentation that requires a lot of reading to do simple stuff.
4. The templating engine is missing an 'else' keyword.
5. Watching for model changes requires manually setting up a watcher and manually tearing it down,
Vue's watchers are far easier to setup.
6. Aurelia is split into many small libraries which means you have to manage a lot of import directives.
7. Aurelia-validation was depreciated and replaced by an incompatible library without much warning, and without migration instructions.
8. Aurelia implements model watching by replacing all fields with getters and setters and thus pollutes the models when inspecting them with chrome developper tools.
9. Aurelia implementation outputs a lot of warnings when using Bluebird.js with default settings.
Otherwise as I said the underlying architecture is fine, but those annoyances add-up. It just needs more polish.
Hey there, I'm Aurelia's Community Lead. I wanted to address these issues with you so we can work together to deal with the issues:
1 & 2a: We feel your pain on JSPM/SystemJS. An unbundled SystemJS application is kinda slow. My current recommendation is to either use Webpack or look at our CLI. The CLI is currently alpha, but the loading performance blows JSPM/SystemJS out of the water. The JSPM Skeleton has a loading screen b/c of how long SystemJS takes to load an unbundled Aurelia app. The CLI doesn't need this since the app loads so quickly.
3. This documentation helps us generate our documentation site which leads us to..
2b. We're working on server-side rendering which will rectify this issue, and provide a lot of value for the community of Aurelia developers.
4. I'd like to see this rectified, personally. I'm not sure that an `else` would work, but what about a set of `switch` and `case` custom elements to do this?
5. Yeah, this is somewhere we got screwed when the powers that be decided that `Object.observe` needed to be killed. That being said, have you used our `observable` attribute on VM properties? It works just like the `bindable` attribute in terms of giving you a `${name}Changed` callback that you don't need to worry about tearing down.
6. Most of the things you'll use on a daily basis are pulled together by the `aurelia-framework` module. There are some exceptions, such as router stuff. But most of the time when I'm writing aurelia import statements, I'm pulling stuff from the framework module. ymmv
7. This is true, but it was deprecated due to being a broken design. The new version is much better and is quickly pushing to release.
8. Again, something that happened due to `Object.observe` being taken from us.
9. In a CLI based application, I get one warning. I've been working to find the source of the warning so I can file an issue.
All in all, I don't want this post to feel antagonistic. We're all working towards a common goal: Building an awesome framework that makes all of our daily jobs easier.
With JSPM The loading times are slow even for bundled apps. From looking at the timeline profile it is mostly JS execution time.
The `else` keyword really does work well in Vue, you should really consider it. It's just that a lot of time we have if.bind='stuff' immediately followed by if.bind='!stuff', and 'stuff' can get complicated.
And for the Object.observe, I do not know how Vue does it but it doesn't have those issues, maybe you can use a similar solution ?
Anyway I'll file bugs and we can continue the discussion on the tracker.
> Aurelia implements model watching by replacing all fields with getters and setters and thus pollutes the models when inspecting them with chrome developper tools.
This is a pre-alpha release. So, those adopting it should be prepared to deal with regular breaking changes.
Calling Component Authors
We know we've got a ton of members within our community who have built and want to build components for Aurelia. We're inviting you to join with our core team to build out the components of the Aurelia UX library.
Can you give some examples on edge cases with DI? Most things that don't work well with DI are due to bad patterns that just need a better resolving strategy which are available or customizable
It's interesting stuff, but don't jump into it expecting to run at full speed without tripping a few times along the way.