Aurelia

Aurelia Big February Status Update

Introduction

Aurelia

Aurelia


Aurelia Big February Status Update

Posted by Aurelia on .
Featured

Aurelia Big February Status Update

Posted by Aurelia on .

We've released updates for all Aurelia libraries, and made a major step towards our Beta 2. We'll talk about what's in these patches and what is in store next below. If you have high level questions not covered here, we'd love for you to join us in our first ever Aurelia AMA, starting shortly at 2pm Eastern.

The Patches

As usual, these patch releases contain bug fixes and a few minor new features (such as es6 shorthand object initialization in binding expressions). However, the most important aspect of this release is that we've begun moving towards supporting jspm 0.17.x beta. This was one of our main goals in moving towards Beta 2 and now that the new jspm is available, we've been able to get that moving ahead.

There are no breaking changes in Aurelia. The jspm changes were all related to configuration across our libraries. For the moment, we would like to ask that our community not use jspm 0.17.x just yet. We've made this big update so that we can begin doing thorough testing of 0.17.x ourselves, while allowing the community to remain on 0.16.x. Once we are satisfied, we'll post asking you to upgrade to 0.17.x. A couple weeks after that we will release some new patches to Aurelia which will require jspm users to be on 0.17.x. So, in this way, we can smoothly move the community over.

There are some bugs in jspm, both 0.16 and 0.17 that we've discovered. If you are starting a new project, you are going to want to use 0.16.15 to properly install. If you already have a project that is set up with Aurelia, just make sure you are on the latest 0.16.x and you should be able to update just fine. Again, do not use 0.17.x yet.

Update on Beta 2

Aurelia is solid and we've had no breaking changes since Beta 1 release. We've been working steadily on improving performance, with some amazing results. We've also been addressing bugs and adding a few new features. All of this will continue through Beta and past release into 1.1, 1.2, etc. These sorts of tasks are ongoing.

So, why aren't we in Beta 2 or released yet?

This is almost entirely related to synchronizing with external libraries, tools and standards. I'd like to discuss below the remaining milestones we want to hit before we announce Beta 2.

JSPM and the Standard Loader

As mentioned, we wanted to be compatible with jspm 0.17.x or above and the latest accompanying version of SystemJS before our Beta 2. These updates to the package manager and loader are significant and we wanted to get them in before our official v1 release. They have just become available in the beta channel recently, so we have started moving ahead with that.

Along these lines, the API of the standard module loader is changing. Aurelia will shield you from that entirely via its loader abstraction. The only place you may see the API is in your initial bootstrapping from your HTML page. In order to prevent breaking changes we are now showing the SystemJS specific API in our docs and starter kits which will shield you 100% from changes to the underlying spec.

After we help the community migrate to JSPM 0.17.x everyone should be shielded from any major changes for quite a while.

Babel 6 and Decorators

We've discussed Babel 6 in the past. It's the latest major upgrade to the compiler we use to compile Aurelia and that many members of our community use to compile their apps. The initial release of Babel 6 had some issues that prevented many code-bases from being updated, including Aurelia. We've been tracking progress on Babel 6 and the tools we need that surround that. We're running experiments now and we hope to be able to update everything to Babel 6 soon. Once that is done we can check off another major requirement for our Beta 2.

Aurelia and our community relies on the ES 2016 Decorators spec. That specification is changing. Unfortunately, that process is going slowly. We are skeptical that it will be done in time for a Beta 2 or even our Release. Our plan is to use Babel 6 with a special plugin that supports the current spec and to continue to use that until both Babel and TypeScript update to the new spec. Fortunately, this shouldn't affect Aurelia app developers. The way that decorators are used doesn't appear to be changing, just the way they are implemented. So, this wouldn't constitute a breaking change to your app, but we would need to update our own internal implementations and once we do we would then require specific Babel plugins or a specific version of TypeScript. When that time comes, we'll communicate very clearly about that process and help ensure a smooth transition.

Shadow DOM v1

When we released our Beta 1, we mentioned that there were changes coming to the Shadow DOM Web Components specification. We provided some guidance about how to use Aurelia so that it would be easy to migrate when our Beta 2 released with the Shadow DOM update. Now that the Shadow DOM v1 spec has reached consensus, it's almost time for us to make this update. Since this is the only real API-breaking change planned for Beta 2, it will be the last work we do. We'll begin this development after the move to JSPM 0.17 and Babel 6 are complete. Design work on this implementation is already in progress.

CoreJS

Currently almost all of our libraries have a hard dependency on CoreJS. We don't think that's the best way to handle polyfills so we are planning to remove all these hard dependencies. Instead, each library will use our platform abstraction layer to assert the presence of a necessary standard implementation. The developer will then have the flexibility to choose how he wishes to meet these requirements. For exmaple, perhaps the only browsers being targeted already support all the necessary APIs. In that case, no polyfill is necessary. Perhaps the developer wishes to use ES6Shim instead of CoreJS. They will be free to do so. The Aurelia team may even craete our own, minimal polyfill, so that broad browser reach can be supported, without having to take the almost 100k hit to include CoreJS. Of course, if you want a full ES 2015 library polyfill, you would always still have the flexibility to choose CoreJS, and for compatibility reasons, that will remain our default configuration for v1.

Update on Aurelia Interface

When we released the Beta we also previewed a component library we are working on called Aurelia Interface. I'm happy to report that development of the library is going very well. We've made massive improvements in the last couple months and our APIs and feature-set are finally stabilizing. This week we started to put together a "skeleton" that takes our standard navigation skeleton and re-builds it with Aurelia Interface. With no changes to JavaScript code and only changing the HTML to use Aurelia Interface elements in place of basic elements, we're able to create a simple Material Design-based app in just a few minutes. Here's a screenshot:

skeleton-interface

And here's the markup that we used to create the welcome screen:

<template>  
  <section class="au-animate" halign-center>
    <ai-card z="8dp">
      <header>
        <h2>${heading}</h2>
      </header>
      <form role="form" submit.delegate="submit()">
        <ai-switch checked.bind="edit">
          <label>Edit</label>
        </ai-switch>
        <ai-input name="firstName" value.bind="firstName" if.bind="edit">
          <label float>First Name</label>
          <help>Please input your first name</help>
        </ai-input>
        <ai-input name="lastName" value.bind="lastName" if.bind="edit">
          <label float>Last Name</label>
          <help>Please input your last name</help>
        </ai-input>
        <footer flex-column>
          <p>${fullName | upper}</p>
          <ai-button if.bind="edit" type="submit">Submit</ai-button>
        </footer>
      </form>
    </ai-card>
  </section>
</template>  

Hopefully you can see that Aurelia Interface is going to be just as simple to use as normal HTML and that you'll be able to make beautiful applications with ease.

We'll have more information about Aurelia Interface as we get close to release. We're not quite ready to announce the release date or the price but we're getting close. Stay tuned...

What else are you working on?

We've been real busy lately. We've got a number of interesting things that the core team is working on. Here are just a few things...

aurelia-validation

Some of you have been using the aurelia-validation plugin since the early days. Unfortunately, I've got a bit of bad news. The developer who originally joined the team to work on validation left the team several months ago and hasn't really been heard from since. When that happened we attempted to shuffle team members around to continue development of aurelia-validation since we have always wanted a strong validation library. Over the last couple of months we've come to realize that in order for us to continue development of aurelia-validation, we're going to have to re-write it.

We'd like to ask for your patience in this matter. We're beginning efforts to author a new validation library this week and I'm confident we'll be able to build something even better without taking too long. We're going to use the documentation for the existing library as a guide to help us build something that meets and exceeds the current feature set. However, we're going to solve a bunch of problems that exist in the current library...problems we found that we couldn't really address incrementally.

  • The current test suite is constructed in a very non-traditional way and is hard to understand. We're going to have a simple, clear set of tests for the new library that will make it easier to manage and extend.
  • The current library is strongly-coupled to Aurelia's templating engine. We're going to split the valiation library into multiple parts so that the validation portion will be usable in Node apps on the server, independent of Aurelia. There will then be a plugin for Aurelia that enables the validation engine to talk to the View to display validation errors.
  • The current library doesn't interact with Views using a mechanism that is based on Aurelia's knowledge of bindings. Rather, it uses some very non-standard mechanisms that aren't always sure to work. The new version will enable connecting validation rules based on the Aurelia view engine's own internal data structures and knowledge of binding.
  • The refactoring and re-design is going to enable us to get more re-use out of various portions of the library allowing it to integrate with other solutions better such as BreezeJS and Aurelia Interface.
  • And much more...

While the aurelia-validation library was not yet released to Beta...and was technically still subject to major break changes, we still deeply regret that we have to do this. We're going to try hard to build a nice API, one that either matches the current API or that is easy to migrate to.

Thanks for your understanding and your patience. This is a top priority item for us. We'll keep you posted along the way.

aurelia-cache

An important plugin we've been missing is a simple cache. It's common to want to cache data client-side or cache responses from backend services. Often times you want that data to be cached for certain amounts of time or to be stored in different ways. We're working on a nice solution to this and hope to have something to show you soon.

aurelia-web-components

Aurelia supports various Web Component specs already. For example, all views are created using the HTML Template Element and you can optionally have your component's view rendered into ShadowDOM. You can also use any 3rd party Web Components Custom Element inside an Aurelia app. However, Aurelia's native custom elements don't use the Web Components Custom Element spec. There are various reasons for this...but the simplest explanation is that, within the context of an application framework, it's easier and more efficient to handle custom elements directly. That said, we've always planned from the beginning to support taking any Aurelia custom element and "exporting" it as a Web Component Custom Element. That would enable any custom element written in Aurelia to be used inside plain web pages or even inside other frameworks. We've started the work on a plugin to enable this and we expect to have a first version ready pretty soon.

aurelia-testing

Supporting unit testing with Aurelia has always been important. If your architecture is based on the MVVM pattern, you can easily test your view-models just like any other class. However, if you want to unit test a custom component in its entirety, including checking the view for state and structural changes, that's been a little bit more difficult. Recently we've been putting together a pretty cool component test helper that we're excited about. It lets you create components in a test environment and assert how they respond to databinding and lifecycle changes, taking into account the async nature of these processes. Here's a quick sample of the API we're working on:

describe('my component', () => {  
  let component;

  beforeAll(() => 
    component = StageComponent
      .withResources('src/my-component')
      .usedAs('<my-component foo.bind="firstName"></my-component>')
      .boundTo({ firstName: 'Rob' });
  });

  it('does something...', done => {
    component.create()
      .then(() => expect(....))
      .then(() => component.bind())
      .then(() => {
           expect(....);
           expect(....);
      })
      .then(() => component.attach())
      ...
      .then(() => component.detach())
      ...
      .then(() => component.unbind())
      ...
      .then(() => component.bind())
      .then(done);
  });
});

It's not quote ready yet, but we expect to have an initial release pretty soon.

aurelia-ui-virtualization

What if you wanted to use Aurelia's repeat.for over an array with tens of thousands of data items or more? Any framework would struggle to generate such a list quickly and to enable performant scrolling. For large lists, we've created a new plugin ui-virtualization that enables "virtualization" of list through a new virtual-repeat.for. When used, the list "virtually" as tens of thousands of rows, but the DOM only actually has rows for what is visible...so it could be only tens of items. This allows rendering of massive lists of data with amazing performance. It works exactly like repeat.for, it just creates a scrolling area and manages the list using UI virtualization techniques.

This plugin has not yet been released to its initial version, but we are really excited about the progress and expect an initial usable release very soon. Stay tuned!

Cool Community Work

Not only is the core team doing a bunch of great work, but there have been some amazing developments in the community.

Aurelia UI Toolkits

Last week we had a guest post from the team that created the Aurelia UI Toolkits. They've been doing some fantastic work to bring Kendo UI components to Aurelia as native Aurelia components. They're also working on other popular UI toolkits like Materialize. It's very cool stuff. So, keep an eye on them.

Webpack

In the last few weeks a group of developers from the community have begun working on getting Aurelia working with Webpack, as a modern alternative to jspm/system.js. We're really excited about the work they are doing and the progress they are making. We're hoping to integrate their work in the future so that Webpack can become an officially supported solution.

Hashnode AMA

Today, at 2pm Eastern Time, members of the Aurelia team will be participating in an "Ask Me Anything" session on Hashnode. We'd love it if you can come out. If you can't make it, I'm sure you'll be able to review the Q&A afterwards. It should be fun.

Conclusion

As you can see...there's lots going on. New releases, new plugins, great community contributions and more. We're quite excited about what 2016 means for Aurelia and the Aurelia community. Seeing what has already happened in January gives you a just a little hint of the fun things to come...

Change Log

aurelia-pal 1.0.0-beta.1.1.0

  • add typings

aurelia-pal-browser 1.0.0-beta.1.1.0

Bug Fixes

Features

  • all: update for jspm; update core-js and aurelia deps (9d870d29)
  • feature: add mutation observer feature detection (3add002e)

aurelia-logging 1.0.0-beta.1.1.0

Features

  • all: update for jspm and core-js (d71d0a4a)

aurelia-logging-console 1.0.0-beta.1.1.0

Features

  • all: update for jspm; update core-js (baa3622a)

aurelia-metadata 1.0.0-beta.1.1.0

Features

  • all: update for jspm; update core-js; update aurelia deps (01aa7e40)

aurelia-dependency-injection 1.0.0-beta.1.1.0

Bug Fixes

  • container: correct inconsistent return type from getAll (bbbef9e5, closes #71)

Features

  • all: update for jspm; update core-js; update aurelia deps (11d16867)

aurelia-history 1.0.0-beta.1.1.0

Bug Fixes

  • package: update metadata for jspm (e754d509)

aurelia-http-client 1.0.0-beta.1.1.0

Features

  • package: update metadata for jspm; core-js; deps (9b0e4272)

aurelia-fetch 1.0.0-beta.1.1.0

Bug Fixes

  • http-client: ensure default content-type is respected (f001ebaf, closes #32)

Features

  • all: update jspm meta; core-js (dd62f230)
  • interceptors: provide Request to response interceptors (2d24beaa, closes #33)

aurelia-loader 1.0.0-beta.1.1.0

  • update jspm metadata; core-js; aurelia-deps

aurelia-loader-default 1.0.0-beta.1.1.0

Features

  • all: update jspm meta; core-js; aurelia deps (7777dfcc)

aurelia-event-aggregator 1.0.0-beta.1.1.0

Features

  • all: update jspm meta; core-js; aurelia deps (05e6674d)

aurelia-task-queue 1.0.0-beta.1.1.0

Bug Fixes

  • index: enable running without mutation observers (7d0c1336, closes #10)
  • package: correct missed dependency update (896972b3)

Features

  • all: update jspm meta; core-js; aurelia deps (38b78a66)

aurelia-route-recognizer 1.0.0-beta.1.1.0

Features

  • all: update jspm meta; core-js; aurelia deps (59b29532)

aurelia-binding 1.0.0-beta.1.1.0

Bug Fixes

  • AccessKeyed: avoid dirty-checking keyed array access (7d01567a, closes #289)
  • StyleObserver: set style properties individually (8e9a2eb5, closes #290)
  • choice-observers: notify on setValue (86722faf, closes #251)
  • definitions: no implicit any (eff3162e, closes #286)

Features

  • Parser: parse es6 shorthand initializers (0d28ff91)
  • all: update jspm meta; core-js; aurelia deps (b93daa46)

aurelia-router 1.0.0-beta.1.1.0

Features

  • all: update jspm meta; core-js; aurelia deps (b473fec1)

aurelia-templating 1.0.0-beta.1.1.0

Bug Fixes

  • Controller: handle scope inheritance in template part with repeat Related to #244 (9a488c44)
  • controller: stop element from inheriting scope (a3ced53d)

Features

  • all: update jspm meta; core-js; aurelia-deps (bdff3232)

aurelia-templating-binding 1.0.0-beta.1.1.0

Features

  • all: update jspm meta; core-js; aurelia deps (de63b6c5)

aurelia-templating-resources 1.0.0-beta.1.1.0

Features

  • all: update jspm meta; core-js; aurelia deps (c30927e3)
  • hide: add hide binding (38760b6b)

aurelia-templating-router 1.0.0-beta.1.1.0 (2016-01-29)

Features

  • all: update jspm meta; core-js; aurelia-dps (e26b67e7)

aurelia-framework 1.0.0-beta.1.1.0

Bug Fixes

Features

  • all: update jspm meta; core-js; aurelia deps (be9776e3)

aurelia-bootstrapper 1.0.0-beta.1.1.0 (2016-01-29)

Bug Fixes

  • index: change loader detection to work in more environments (9a5c169a)

Features

  • all: update jspm meta; core-js; aurelia deps (65079e91)

aurelia-animator-css 1.0.0-beta.1.1.0

Features

  • all: update jspm meta; core-js; aurelia deps (b6f0a247)

aurelia-animator-velocity 1.0.0-beta.1.1.0

Bug Fixes

  • animator: mark animate params as optional (b6888ba6)

Features

  • all: update jspm meta; core-js; aurelia deps (aa84d30d)

aurelia-html-import-template-loader 1.0.0-beta.1.1.0

Features

  • all: update jspm meta; core-js; aurelia deps (b4faa50e)

aurelia-i18n 0.4.7 (2016-01-29)

Bug Fixes

  • attribute: removed timeout usage (019fd7bd)
  • i18next: missing default export (3aafbded)

Features

  • all: update jspm meta; core-js; aurelia deps (8360ceaf)
  • unformat: unformat numbers using locale (1da0817c)

aurelia-dialog 0.5.4

  • feat(all): update jspm meta; core-js; aurelia deps
  • fix(deps): move aurelia-pal to dev-dep
  • disable pointer events on ai-dialog-container
  • fix(dialog): use CSS auto margins instead of JS

aurelia-validation 0.6.1

Features

  • all: update jspm meta; core-js; aurelia deps (c109bdc6)
View Comments...