Ember 2.11 and 2.12 Beta Released
Updated on December 19, 2017 to include information about Ember.js 2.4-LTS.
Today, the Ember project is releasing Ember.js, Ember Data and Ember CLI version 2.11.0.
This also kicks off the 2.12 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.
This release also marks the conclusion of critical bugfixes support for Ember.js 2.4-LTS and we strongly recommend LTS users to migrate to 2.8-LTS immediately. 2.4-LTS will continue to receive security patches for another four releases (around July 2017). 2.4-LTS was released in April of 2016, and was the first Long-Term Support release of Ember.js. We're pleased with the impact of LTS releases on the Ember project and look forward to continuing the practice.
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.11
Ember.js 2.11 continues to build on the foundation of Glimmer 2, incorporating many bug fixes to improve compatibility and stability since 2.10.
Among other improvements and thanks to the work of Gavin Joyce, this release provides a much improved "backtracking re-render" assertion message. The new message provides actionable information that can help track down the source of a backtracking re-render. If you had previously encountered this assertion while upgrading to 2.10, we recommend giving 2.11 a try.
Additionally, the last-minute issue regarding frozen helper arguments mentioned in the 2.10 blog post has been fixed in this release.
Starting with 2.11, Ember.js releases will be available on npm via the
ember-source
package. Please
refer the Ember CLI section below for more details.
Finally, following the mitigation section in the recent security incident report, this is also the first Ember.js release to be published by our automated build system.
Other Notable Changes
Concatenated properties (such as
classNames
andclassNameBindings
) are now frozen in debug builds to prevent unintended and unsupported mutations.The legacy
render
helper (i.e.{{render 'foo'}}
) has been deprecated (issue, deprecation guide).The private
Component#renderToElement
API has also been deprecated (issue, deprecation guide).
For more details on the changes in Ember.js 2.11, please review the Ember.js 2.11.0 release page.
Upcoming Changes in Ember.js 2.12
Ember.js 2.12 will serve as the basis of the next LTS release and includes additional stability, compatibility and performance improvements.
In addition to those improvements, it also implemented several changes arising from the RFC process:
RFC #150 adds
factoryFor
as a public API to replace the widely used_lookupFactory
private API, which is now deprecated. In addition to providing a public API for a sorely needed feature, it also unlocks the opportunity to eliminate one of the major performance hotspot in the Ember.js object-model. This will happen in a future release once the community has had the chance to migrate to the new API. See pull request #14360 for additional details.RFC #178 deprecates the
Ember.K
utility function. See pull request #14751 for additional details.RFC #191 deprecates the private arguments passed to the component lifecycle hooks (
didInitAttrs
,didReceiveAttrs
anddidUpdateAttrs
). Please note that this only deprecates the usage of the arguments passed to this hook, not the hooks themselves. See pull request #14711 for additional details.
For more details on the upcoming changes in Ember.js 2.12, please review the Ember.js 2.12.0-beta.1 release page.
Ember Data
Ember Data is the official data persistence library for Ember.js applications.
Changes in Ember Data 2.11
Ember Data 2.11 represents the work of 15 direct contributors and over 70 commits.
Ember Data 2.11 continues to expand on the performance improvements started in Ember Data 2.10. Chris Thoburn and Stefan Penner contributed several pull requests that allow Ember Data to defer work until it is needed by an application or avoid the work all together if it is never needed. Overall the process of pushing records into the store in Ember Data 2.11 is about twice as fast as it was in 2.10.
The Ember Data 2.11 release concludes an effort to audit the existing API docs for Ember Data. The Ember Data community has checked all of the API docs and ensured they are clear and contain code examples of how to use the API. You can see the improved documentation here.
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.
Issues with Ember Data Model Fragments
Due to internal refactoring, Ember Data 2.11 has compatibility issues with older versions of the popular Ember Data Model Fragments addon. If you are using this addon it is recommended that you upgrade to Ember Data Model Fragments 2.11 at the same time as you upgrade Ember Data.
For more details on the changes in Ember Data 2.11, please review the Ember Data 2.11.0 release page.
Upcoming changes in Ember Data 2.12
Ember Data 2.12 contains further performance improvements, and is looking to be the fastest ever release of Ember Data.
A new serializeId()
method has been added to JSONSerializer
,
RESTSerializer
and JSONAPISerializer
. This is useful if you are
working with a backend that requires your ids to be something other
than a string.
// app/serializers/application.js
import DS from 'ember-data';
export default DS.JSONSerializer.extend({
serializeId(snapshot, json, primaryKey) {
var id = snapshot.id;
json[primaryKey] = parseInt(id, 10);
}
});
Deprecations in Ember Data 2.12
There are no planned deprecations for Ember Data 2.12.
For more details on the upcoming changes in Ember Data 2.11, please review the Ember Data 2.12.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 preview those changes for applications
and addons.
Changes in Ember CLI 2.11
Ember CLI 2.11 no longer supports Node.js 0.12 per the Ember Node.js LTS Support policy. This also applies to a litany of sub-projects in the Ember community. Please upgrade your Node.js version. We recommend adopting the most-recently-released Node.js LTS.
Following the mitigation section in the recent security incident report we have begun the process of migrating repositories in the ember-cli GitHub organization to be published automatically via their automated build systems. Ember CLI itself has not yet been migrated and as such continues to follow our manual release process.
Ember No Longer Supplied Via bower
We've been preparing for this moment for over a year now, but using bower
is
now completely optional inside of Ember CLI! Beginning with 2.11 we now provide
Ember via the ember-source
npm package.
This means that when you run ember new
after installing 2.11 you can expect
to have an empty (but present) bower.json
file. Further work in 2.12 has been
done to remove bower
itself as a dependency. Addon developers please ensure
that you're able to successfully test your addons with ember-try
.
Updated ember-welcome-page
The Learning Team has spent an incredible amount of time and energy improving
the new user experience. As part of that we've updated the ember-welcome-page
addon to the newest version which they have released. We're calling this out
because it adds application.hbs
back into the default blueprint and includes
assets in a non-production build. Make sure that you always ship a production
build when you publish your application; otherwise you will also include the
assets from ember-welcome-page
into your application.
Other Notable Changes
We have a litany of other smaller improvements in this release:
- We watch the
vendor
folder by default, making rebuilds work for changes in that directory. This may have performance consequences, please monitor the resource consumption in your applications to ensure that we have not regressed. - Stefan Penner and David Hamilton made it so we do a better job at
cleanup upon exit of Ember CLI.
This work prevents the 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 and detailed upgrade instructions, please review the Ember CLI 2.11.0 release page.
Upcoming Changes in Ember CLI 2.12
We adopted the standard six week release cycle for Ember CLI shortly following EmberConf 2016. This constant cadence allows us to get the improvements we've collectively been working on into our applications. Ember CLI 2.12 will be the most work we've ever had in a single release cycle and we're ecstatic to get all 300+ commits (not including merges or upstream changes!) into your hands.
Babel
We've made changes in the way you configure Babel in your applications and also
now require that addons which need Babel transpilation supply their own
ember-cli-babel
dependency. The root application is no longer wholly
responsible for the transpilation of all dependent addons. There is a
deprecation message which should guide you through the steps to make the
necessary changes in your application. This also means that addons themselves
are responsible for transpiling their code into AMD modules.
We no longer overload the babel
key inside of ember-cli-build.js
to
conditionally use certain arguments for babel
and others for
ember-cli-babel
. This is categorically better, and we've provided deprecation
messages to help guide you to the new correct usage pattern.
Rather than trying to walk through how to make these changes, please test this out during the beta period and let us know if the messages are able to guide you to the newly correct setup.
ESLint All The Things!
Tobias Bieniek has been on a mission; we've now completed the move to ESLint
as the newly recommended linting tool for Ember applications. After upgrading to
Ember CLI 2.12 and running ember init
you will be presented with options to
remove the existing ember-cli-jshint
and rules and adopt ember-cli-eslint
.
The process should be relatively straightforward, though you'll have to migrate
your styling rules from JSHint to ESLint. Please test it out and let us know how
it works in your applications during the beta period.
Nested Addon preprocessTree
and postprocessTree
Invocation
In an oversight, we did not invoke preprocessTree
and postprocessTree
against addon trees which were nested inside of other addons preventing them
from interacting with their parent addons in the ideal manner. This has been
fixed but it is possible that this bug-fix will change the build outcome of your
applications. We manually reviewed all public addons and didn't identify any
likely issues, please report back with any problems you discover in your private
addons.
Performance
One of the major themes for this release cycle has been a focus on the build performance of Ember CLI. We've added instrumentation to understand where we're spending time and have begun the consistent incremental work required to bring build times down without changing the build output. This has been a team effort with contributions from David Hamilton, Robert Jackson, Stefan Penner, Trent Willis, and more.
Global npm
Usage
Rather than bundling our own copy of npm
into Ember CLI we now delegate to the
system-installed version of npm
. This should dramatically reduce the install
time for your node_modules
directory. Note that we have set the minimum
supported version to be npm@3
. If you need to update the version on your
system you can do so by running npm install -g npm
.
Developers, Developers, Developers, Developers
We've made a tremendous number of behind-the-scene changes to Ember CLI in 2.12. Our goal is to make contributing to Ember CLI simpler and quicker. Some of the improvements include:
- We've adopted ESLint for Ember CLI itself, painted a few bikesheds, and now have a much more consistent codebase. PR comments around code style should come with an associated style rule change to enforce that behavior so that it is consistent given the multitude of reviewers we have.
- Now that we have dropped support for Node.js 0.12 we have begun adoption of
all of the nice things we weren't previously able to use; most-specifically
ES6 classes! We've modified
core-object
as well in order to make it compatible with ES6 classes. - We've adopted Yarn for development of Ember CLI. We now use it for CI and are
using this to lay a foundation for making
yarn
a default and supported option for package management in applications. - By virtue of a lot of work in CI and on caching test run times have been reduced to seven minutes. Check out PackageCache which got us most of the reward. More work is being done to allow offline tests.
- We've introduced an experiments API which allows us to incrementally land
invasive changes behind an experiment flag. The experiment flag prevents their
use except on the
canary
branch. This allows us to experiment with API shape and understand problems without committing to publishing a feature. Currently the instrumentation changes are behind an experiment flag which allows us to understand the needs and write a much more complete RFC.
We will continue this effort in upcoming releases.
Other Notable Changes
ember new
andember addon
correctly support the--directory
argument and allow you to specify an existing empty directory.- Removed
ember-data
andember-cli-app-version
from the defaultember addon
blueprint. - Duplicate calls to
.import('assetname.js)'
will no longer include the asset in the output file twice. - Given that we no longer require
bower
in the default scenario, we now lazily install it into your application the first time that you need it. - Krati Ahuja split and removed the internal
serve-files
addon which was responsible for serving of assets inember serve
. This enables progress on FastBoot.
For more details on the changes in Ember CLI 2.12.0-beta.1 and detailed upgrade instructions, please review the Ember CLI 2.12.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.