Wednesday, 3 January, 2018 UTC


Summary

2017 was a great year for Aurelia but 2018 is shaping up to be even better!
A Brief Look Back at 2017
The Aurelia Core Team, with strong partnership from our awesome community, accomplished some amazing work in 2017! Last year, we released several brand new libraries, driven by strong engagement with the community. One example is the Aurelia Validation library. Another is the fresh start we made on Aurelia UX, which now boasts 11 components, along with core support for styling, theming, icons, and more. We also made huge advancements in tooling with the release of the Aurelia Inspector for Chrome, greatly enhanced support for the latest Webpack, major CLI improvements, and advancements in our Aurelia VS Code Plugin. Of course, we also focused in on the core by continuing with performance work, memory consumption improvements, and adding new fundamental features, such as component inheritance. Finally, we launched a complete refresh of the Aurelia site and documentation including a new Discourse forum.
We're so thankful for all the community members who helped to make this possible in 2017. At the end of the year, our total contributors came to 581! Several of them even published books through major publishers. Here's where you can find their writings:
  • Learning Aurelia
  • Aurelia Succinctly
  • Aurelia in Action
2018 and Beyond
We've got so much in store for 2018 that we know you are going to be excited about. We're looking forward to taking Aurelia to the next level and can't wait to get you involved.

Platform Features and Capabilities

There are several new features and platform capabilities that we hope to add in 2018. Most of these are already in-progress in some form or another...

Server-Side Rendering (SSR)

For a long time, we've wanted Aurelia to support server-side rendering. We're happy to share that the bulk of the work on this feature was completed in 2017. In fact, we're very, very close to releasing our SSR support. You can find the related libraries here and here. There is still some work left to do, but we hope to have a full sample project and initial release of these libraries as one of the first big items of 2018.

Aurelia UX

As mentioned above, we made a great start on Aurelia UX in 2017. Over the next year, we're hoping to greatly enhance this library in ways that will provide a tremendous advantage to you. Here are a few areas we're looking into:
Application Layout
  • Layout Grid - Initial work on a responsive grid system for application layout is already done and it should be ready soon.
  • Toolbars - Toolbars provide a common place for actions and titles. We have a basic implementation that should be ready after a few more improvements.
  • Sidebar/Drawer - This is a useful component for menus and, in the case of a collapsible drawer, a place to put content that does not need to be displayed constantly. We have a partial implementation of this and hope to complete an initial component soon.
  • Cards - This is a useful component for laying out applications, prevalently used in mobile scenarios. We'd like to have something out-of-the-box that makes this UI pattern easy for developers.
Styling
  • Design Language Styling - We designed our system to be able to change the look of components based on the detected platform. So far, we've focused on the Material Design language. We'll be working to add iOS next.
  • CSS Reset - In order to make component styling more consistent and predictable, we'll be adding a standard reset, available soon.
  • Font Handling - With our style system now based on CSS Variables, we plan to add a nice API that plugs into this to let you bring your own fonts to the table.
  • Theme Groups - Aurelia UX already makes it easy to re-theme components. We'd like to enhance this by making it simple to create a group of related component themes that are sharable and can be easily loaded and swapped in/out of any application.
More Components
As with any component library, we constantly evaluate what components to add next. Here's a list of what's currently at the top of our list:
  • Progress (Linear)
  • Progress (circular)
  • Select/Picker
  • Tabs/Pivots

Web Component Export

Long-time users of Aurelia will know that we built the framework from the beginning for strong compatibility with Web Components. In fact, we planned from day one to enable any Aurelia component to be "exportable" as a standard Web Component. You may not know that we have an Aurelia plugin in early preview that enables exactly this. For some time, the Web Component specs were quite volatile. Now that things have settled a bit and we're seeing browsers implement the standards, we think 2018 is the year to publish this plugin.
If you are passionate about Web Components, we'd love for you to help use test the Aurelia Web Component adapter and help us prepare it for an official release.

Single-File Components

While Aurelia has focused primarily on optimizing UI workflows for teams working on the same components in parallel, we realize that smaller teams and individual developers have different workflows and needs. To address this, we're hoping to enable a single-file component development story in 2018.

State Management

Handling state in larger apps can become quite tedious as dependencies and features grow.
Back in April of last year we asked the community how it handles state in its applications. While most replied that they are using "classic services", a large segment of our community is still hand-rolling custom solutions.
Our plan is to provide an officially supported plugin for state management, that meets the needs of large apps by providing a predictable state container. This means that besides the classic features like actions, middlewares and a Redux DevTools integration, the focus is on having a solid handling of async state calculations, a queued dispatch pipeline, baked-in support for performance measuring and undo-redo of states over time. Additionally, the plugin is developed with both TypeScript and JavaScript developers in mind, to provide you the best support for both worlds, while maintaining a high level of test coverage to ensure every use case is handled as it should be.
You can follow the rapididly progressing development over here and give it try, or take a look at the collection of example apps. Feedback is welcome. Helping us by trying out the beta plugin will ensure it meets our planned release later in 2018.

Tooling

Our tooling came a long way in 2017, but we need to go further. Here are a couple of items we're already working on for this year:

CLI Platform Targets

The Aurelia CLI supports tons of options so that developers can pick their favorite JS transpiler, CSS transpiler, module bundler/loader, IDE and more; however, up to this point, our CLI has focused almost exclusively on scaffolding and building web applications. In 2018 we hope to expand this to include both Electron and Cordova/PhoneGap support. Beyond that, we want to enable you to have a single CLI project that targets multiple platforms at once: write code once and use a single CLI command to build for Web, Windows, MacOS, Linux, iOS and Android. That's the vision.

Template Intellisense

Today's VS Code Plugin provides basic syntax highlighting and Aurelia binding language completion in HTML templates. We hope to take this up a notch in 2018 by adding model binding intellisense. In fact, we just merged our first basic support for this into the codebase this week.

Site and Documentation

We recently launched a complete re-write of the Aurelia site and documentation engine. With our new implementation, it's much easier for us to write and publish documentation updates and expand the platform with new features. We have tons of plans around this and believe that our investment in this area will have a huge impact on helping people to learn and use Aurelia as well as bringing new people to the platform.

Patronage

We've been developing Aurelia for over three years. WOW! In fact, the three-year anniversary of the original alpha release is only a few weeks a way. As a project like ours continues to grow and mature, it's important that we invest in ways to sustain both the maintenance of the existing code and the development of new capabilities. To this end, in 2018 we'll be launching several initiatives centered around long-term sustainability of the project. Here are two that you'll be hearing much more about soon...
  • Open Collective - We're launching an Aurelia Open Collective very soon. This will provide a standard way for both individuals and companies to financially contribute to the core project, helping us to pay for recurring expenses and fund development of high-priority features and fixes.
  • Team Member Patreons - Each of our Core Team members "owns" specific parts of the Aurelia ecosystem that they focus their attention on. Several of our team members are in flexible employment scenarios that, provided funding, would allow them to spend extensive time working on Aurelia. Through Patreon, we hope to enable our community to target funding towards specific team members who are working on aspects of the framework that they care most about.

vNext

What happens after all this? Is there an Aurelia 2.0 or 3.0 on the horizon? YES!
We've been thinking hard about what we want to do for the next major version of Aurelia. One thing that's important to us is that, even though it's a major version change, we want to keep the APIs and programming models as close as possible to what they are today. We're proud of the stability we've created in the Aurelia ecosystem and we want to maintain that as much as possible, even across major versions.
When we look hard at our current implementation, there are a few things we'd like to fix and we think we can restructure some of the project to enable a more modern development and contribution workflow for our team and community.
We don't know when we'll complete this work, but here are a few things we're thinking about for the next major version of Aurelia:
  • TypeScript - Three years ago, when we started work on Aurelia, we didn't feel that TypeScript and its ecosystem were mature enough yet to support what we needed to do. In the time since then, much has changed. Over the last year, we've been doing some experimentation with TypeScript, including authoring all our new plugins with TypeScript and converting a couple of our repos over. We're very happy with how this has cleaned up our code, helped us find more bugs and tightened up our APIs. We believe that a full conversion of Aurelia will also result in a smaller bundle size and help us write code in ways that will result in improved performance.
  • Monorepo Project Structure - Aurelia is and will remain a modular framework. Three years ago, the best way to do this seemed to be to create each module in its own GitHub repository. In practice, this has caused us a lot of problems, one of which is the "scattering" of our stars across many repos, which today causes our primary repo to show almost 4,000 less stars for Aurelia than it actually has. Fortunately, in the time since we launched the project, tools such as Lerna have emerged as superior ways to handle multi-module projects like Aurelia. We recently switched our Aurelia UX library to a monorepo and have really enjoyed the benefits that come with this. For the next version of Aurelia, we're planning to move all core modules into a monorepo. This will make it easier to develop, report issues, contribute, test and much more.
  • Aurelia NPM Scope - Again, when we first launched Aurelia, NPM scopes had not yet released. Ideally, all core Aurelia modules should exist under an NPM scope. We're happy to share that we've procured the @aurelia scope on NPM and we plan to publish the next major version of Aurelia under this scope.
Wrapping Up
We hope this gives you an overview of what we're planning for Aurelia in 2018 and beyond. The last three years have been an amazing journey for us. We can't wait to take our next steps and we hope you'll join us on this ride.
Forward Aurelia!!!