Ember 2.10 and 2.11 Beta Released

Today, the Ember project is releasing Ember.js, Ember Data and Ember CLI version 2.10.0.

This also kicks off the 2.11 beta cycle for all sub-projects. We encourage our community (especially addon authors) to help test these beta builds and report any bugs before they are published as a final release in six weeks' time. The ember-try addon is a great way to continuously test your projects against the latest Ember releases.

Starting with this release, we will be publishing a single, unified release blog post summarizing all the changes for all three sub-projects in one place. You can read more about our general release process here:


Ember.js

Ember.js is the core framework for building ambitious web applications.

Changes in Ember.js 2.10

Ember.js 2.10 is the first release to include Glimmer 2, a ground-up rewrite of Ember's rendering engine.

Despite all the changes that took place under-the-hood, we are committed to making this a drop-in, completely backwards compatible upgrade for virtually all Ember.js users. Over the past few months, we have been hard at work to make this a reality.

Thanks to everyone in the community who took the time to test their apps and addons against the Glimmer 2 alpha and beta builds, this has been one of the most rigorously tested releases in the history of the Ember project. We are quite confident that upgrade will go smoothly for most apps. However, if you encounter any issues, please do report them to the issue tracker.

While this release is focused on compatibility and does not expose any new capabilities, the new rendering engine has unlocked a lot of new frontiers for us, creating a much better foundation for adding new features as well as room for future performance impovements. With the initial integration now out of the way, we are quite excited to return our efforts to those areas in upcoming releases.

Other notable changes

In addition to the Glimmer 2 integration, a few other notable changes are also included in this release.

First, Trent Willis, Nathan Hammond and Alex Speller have contributed a series of patches to address some long-standing issues and edge cases in the routing layer, particularly in the area of query params.

Second, thanks to Robert Jackson, we now use WeakMap to store object metadata on browsers that supports them. A pleasant side-effect of this internal change is that Ember no longer adds an __ember_meta__ property to every object.

Finally, it has come to our attention that it is quite common for developers to accidentally mutate the arguments passed into a helper. This is problematic as these objects are often shared or reused, causing subtle issues that are very difficult to debug.

To help track down these kind of issues, these objects are now frozen in the debug build before they are passed into helpers. As a result, you will get an error if you attempt to modify these objects directly. It is recommended that you clone these objects (e.g. using Object.assign and Array#slice) before making any modifications to them.

(It has been brought to our attention that the last change might have an unintended consequence. A fix is being worked on by Matthew Beale. Please refer to the linked issue for a detailed description and suggested workaround.)

For more details on the changes in Ember.js 2.10, please review the Ember.js 2.10.0 release page.

Upcoming changes in Ember.js 2.11

Currently, no new features are planned for 2.11. However, there are a few notable changes:

  • Similar to the change to helper arguments, concatenated properties (such as classNames and classNameBindings) are now frozen in debug builds to help track down unintended mutations.

  • The legacy render helper (i.e. {{render 'foo'}}) has been deprecated.

  • The private Component#renderToElement API has also been deprecated.

For more details on the upcoming changes in Ember.js 2.11, please review the Ember.js 2.11.0-beta.1 release page.


Ember Data

Ember Data is the offical data persistence library for Ember.js applications.

Changes in Ember Data 2.10

Ember Data 2.10 represents the work of more than 10 direct contributors with over 20 commits.

There have been no user facing changes in Ember Data 2.10. Under the hood, Chris Thoburn has instrumented Ember Data with internal tools making it easier to track the performance of Ember Data. This instrumentation is stripped from production builds and should have no impact on existing applications.

Chris also improved the messaging around assertions and warnings when an adapter responds with no id for a record.

For more details on the changes in Ember Data 2.10, please review the Ember Data 2.10.0 release page.

Upcoming changes in Ember Data 2.11

Ember Data 2.11 is already shaping up to be a big release with many performance and documentation improvements.

HasMany Computed Property Keys

One of the performance improvements included in Ember Data 2.11 fixes an issue where changes to the records of a DS.hasMany() caused unnecessary work. As a result, Ember Data would over-eagerly invalidate computed properties that depended on these hasMany relationships. Due to the nature of the fix application code depending on a relationship array without watching the contents of that array may need to be updated. For example you may need to update computed property keys that depended on record.someHasManyRelationshipName to record.someHasManyRelationshipName.[].

Deprecations in Ember Data 2.11

Ember Data now issues deprecation warnings for store#serialize(). Instead, it is recommended that you use record.serialize() in place of store.serialize(record).

store#lookupAdapter() and store#lookupSerializer() have also been deprecated starting in Ember 2.11. These methods were never publicly documented. In their place we recommend you use store#adapterFor() and store#serializerFor() respectively.

store#recordIsLoaded() is deprecated in favor of store#hasRecordForId(), as the logic in these two methods has been identical since March 2015.

All of the deprecated methods mentioned above will be supported until Ember Data 3.0. Until then they will log a deprecation warning to encourage use of the recommended replacement APIs.

Move ds-improved-ajax out of beta channel

The ds-improved-ajax implemented in PR #3099 aims to provide public hooks on the rest adapter for customizing requests. For example to specify the HTTP method or provide custom HTTP headers per request. This feature has been available in beta builds since the 2.8 beta cycle.

Unfortunately, this feature slipped into the code base without going though a proper RFC process. Despite being enabled in the beta channel for a while now, we decided that it should be disabled again in favour of a feature which has gone though the RFC process and benefited from valuable community feedback.

We are aware that it is quite rare for a feature to be backed out from the beta channel but we consider the ability to do so a strength of our release process. We would like to thank everyone who took the time to test their applications against the beta channel and we would highly appreciate your feedback on the proposed replacement to this functionality in RFC #171.

For more details on the upcoming changes in Ember Data 2.11, please review the Ember Data 2.11.0-beta.1 release page.


Ember CLI

Ember CLI is the command line interface for managing and packaging Ember.js applications.

Upgrading Ember CLI

You may upgrade Ember CLI separately from Ember.js and Ember Data! To upgrade your projects using yarn run yarn upgrade ember-cli. To upgrade your projects using npm run npm install --save-dev ember-cli. After running the upgrade command run ember init inside of the project directory to apply the blueprint changes. You can view those changes for applications here and addons here.

Changes in Ember CLI 2.10

Ember CLI 2.10 no longer supports Node.js 0.10 per the Ember Node.js LTS Support policy. Further, it is the last release which will officially support Node.js 0.12 which will be removed from support at the end of this year. Please make sure you begin your migration to a newer version of Node.js as soon as possible.

Sorting of package.json

In order to guarantee consistency with npm and other tools Ember CLI now sorts package.json in accordance with the upstream patterns. This may result in changes in execution order of the addons in your application which should be non-breaking. If you experience issues you will need to specify before and/or after in your addon.

Concatenation

Concatenation of assets has been implicit based upon file-system ordering. An update to broccoli-concat which changed the walk order of the file system to guarantee consistency and stable concatenation broke the implicit reliance we had on that ordering. To ensure that we remain backwards compatible we have changed our invocation pattern to reproduce the intended behavior. Child modules without specific ordering will now be sorted lexicographically inside of your assets.

We also moved to a system-independent line separator to guarantee that builds are reproducible across different operating systems.

npm Upgrade

Dan Freeman has updated our bundled npm dependency to npm@3. This will change the resulting node_modules folder layout inside of your application when you run ember install. This will likely only cause problems if you tried to guess at the path to a module based upon install behavior. If you need to identify the path to a module inside of the node JavaScript world be sure you're using require.resolve('module-name');.

Testing Addons

Ember CLI 2.10 removes Ember.js 1.13 from the default testing matrix in the addon blueprint. Given that we now have two LTS releases in the Ember.js 2.x series, we no longer feel that supporting Ember.js 1.13 is a reasonable default for newly-created addons. You may continue to support Ember.js 1.13 in your addons by adding it back into the testing matrix.

For more details on the changes in Ember CLI 2.10 and detailed upgrade instructions, please review the Ember CLI 2.10.0 release page.

Upcoming changes in Ember CLI 2.11

In our continous incremental progress toward making bower optional inside of Ember CLI we have moved to include Ember.js itself via ember-source–provided via npm. In 2.11 we will no longer have any packages provided by bower in a brand new Ember.js application!

Ember CLI 2.11 will not officially support Node.js 0.12 per the Ember Node.js LTS Support policy. Please make sure you begin your migration to a newer version of Node.js as soon as possible.

We have a litany of other smaller improvements in this release:

  • We bundle a new and improved version of ember-welcome-page, the learning team's addon for providing a quick start introduction for users.
  • We watch the vendor folder by default, making rebuilds work for changes in that directory.
  • Stefan Penner made it so we do a better job at cleanup upon exit of Ember CLI preventing pollution of the tmp folder inside of your applications.
  • Robert Jackson dramatically reduced the number of merge steps inside of the build, speeding up the build process.

For more details on the changes in Ember CLI 2.11.0-beta.1 and detailed upgrade instructions, please review the Ember CLI 2.11.0-beta.1 release page.

Thank You!

As a community-driven open-source project with an ambitious scope, each of these releases serve as a reminder that the Ember project would not have been possible without your continued support. We are extremely grateful to our contributors for their efforts.