Today the Ember project is releasing version 2.16.0 of Ember.js, Ember Data, and Ember CLI.
After six weeks as a stable release, Ember.js 2.16 will be promoted to
long term support,
under which it will receive bugfixes for the next 6 releases and security fixes
for the next 10 release.
This release also kicks off the 2.17 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 stable release in six weeks' time.
Ember.js
Ember.js is the core framework for building ambitious web applications.
Changes in Ember.js 2.16
Ember.js 2.16 continues to improve the framework with minor bug fixes.
Additionally, it introduces a major change in conventional usage. As of Ember
2.16, newly generated Ember applications will use the JavaScript modules API
described in detail below.
No APIs are deprecated as part of these changes. Although we encourage
applications to upgrade to the new modules API, we plan to wait until
the module API is proven and more addons across the community are upgraded
before introducing a deprecation for the Ember
namespace object.
Ember.js Modules API
In Ember.js 2.16 the recommended way to access framework code in Ember
applications is via the JavaScript modules API described in
RFC #176. For example this basic component definition in 2.15:
import Ember from 'ember';
export default Ember.Component.extend({
session: Ember.inject.service(),
title: 'The Curious Case'
});
Would in 2.16 conventions be written as:
import Component from '@ember/component';
import { inject as service } from '@ember/service';
export default Component.extend({
session: service(),
title: 'The Curious Case'
});
JavaScript modules make the framework easier to document, make the distinction
between public and private API much easier to maintain, and provide
opportunities for performance work such as tree-shaking.
Adopting a new
convention for importing the framework is a big task that impacts application
code, documentation, generators/blueprints, and more. We've made the following
changes to prepare for the shift in usage:
- The Ember.js
API documentation and
Ember guides have been updated to reflect the new API. - The application
blueprints
for newly generated applications have been updated. You can review
the output of the new application generators in the
ember-new-output repo. - A migration strategy for existing applications has been authored.
In rolling out the changes to Ember's API documentation we uncovered a few bugs
in the website itself. We're tracking fixes in emberjs/website#3024: Directly loaded URLs for
/api/ fail to load and
ember-learn/ember-api-docs#355: Get the Guides links to work with post 2.16 package restructure.
Updating your application
Existing applications can move to adopt the new import style immediately.
To update an application:
- Upgrade Ember CLI to 2.16.1, specifically the ember-cli-babel dependency
must be upgraded to v6.8.0 or greater. - Install and run the
ember-modules-codemod.
This command will migrate legacy code that imports the'ember'
package to
the new modules, updating files in place.
npm install ember-modules-codemod -g
cd my-ember-app
ember-modules-codemod
You're using the new import API!
Many applications use the
ember-cli-shims
package. This provides
an earlier design of Ember's module API. This package continues
to work and will be provided by default in new Ember applications, however it will
be removed in a future version of Ember CLI. Migrating to the new modules
API is a good time to remove any usage of these legacy modules.
The
eslint-plugin-ember
package provides a linting rule that can remove usage of the legacy modules
provided by ember-cli-shims.
To run this follow these steps:
- Install eslint-plugin-ember v4.3.0 or greater as a dev dependency for your
application. - Follow the eslint-plugin-ember
usage instructions
and update your.eslintrc.js
appropriately.
For more detailed instructions, see this excellent blog post:
How To Use Ember’s New Module Import Syntax Today - Run
./node_modules/.bin/eslint --fix
to convert ember-cli-shims module usage to plain'ember'
imports. - Run the ember-modules-codemod as described above. If you already ran it before
runningeslint --fix
, you will need to run it a second time. This will convert the
'ember'
imports to their modern module API equivalents.
Your application no longer contains any usage of the legacy modules.
Updating your addons
To provide addon users the best experience, we suggest you take the following
steps as an addon maintainer (or contributor!):
- Upgrade your ember-cli-babel dependency to v6.8.0 or greater. This will permit your addon
to use the new modules in itsaddon/
andtest/
directories. - Ensure the
app/
andtest-support/
directories (both part of the dependent
app's build) contain only re-exports from theaddon/
directory. The files
inapp/
should avoid importing any Ember APIs in any manner. In this
way an addon will be decoupled from the consuming application's build and runtime
Ember API support.
Taking these steps will ensure your addon's users have a smooth path from previous
versions of Ember to 2.16, and beyond.
If you have questions please join us in #-ember-cli
on the Ember.js
Community Slack.
Deprecations in Ember.js 2.16
One new deprecation is introduced in Ember.js 2.16:
- For historical reasons, Ember controllers have a private property
content
that aliases themodel
property. Relying on this legacy behavior is
deprecated and will be unsupported in Ember 2.17. See the
deprecation guide
for more details.
For more details on changes in Ember.js 2.16, please review the
Ember.js 2.16.0 release page.
Upcoming Changes in Ember.js 2.17
Ember.js 2.17 will contain no new features. Instead it will primarily
include bug fixes, performance, and stability work.
For more details on the upcoming changes in Ember.js 2.17, please review the
Ember.js 2.17.0-beta.1 release page.
Ember Data
Ember Data is the official data persistence library for Ember.js applications.
Ember Data 2.16.2 is the latest stable release at this time.
Changes in Ember Data 2.16
Ember Data 2.16 is a bugfix release. It contains no new features but
it does have several bug fixes for build warnings,
header parsing and
outdated dependencies.
There are no new deprecations introduced in Ember Data 2.16.
For more details on changes in Ember Data 2.16, please review the
Ember Data 2.16.0 release page.
Again, 2.16.2 was published shortly after 2.16.0 with minor bug fixes.
Upcoming changes in Ember Data 2.17
Due to a late start in the Ember Data 2.16 beta cycle the Ember Data
2.17.0-beta.1 release is currently the same code as 2.16.0. The beta
releases will continue to receive beta bug fixes and it is expected to
diverge from Ember Data 2.16.0 by the time 2.17.0 is released in 6
weeks.
Deprecations in Ember Data 2.17
There are no planned deprecations introduced in Ember Data 2.17.
For more details on the upcoming changes in Ember Data 2.17.0-beta.1, please review the
Ember Data 2.17.0-beta.1 release page.
Ember CLI
Ember CLI is the command line interface for managing and packaging Ember.js
applications.
The latest version of Ember CLI is 2.16.1, as a small bug fix went out shortly
after release.
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.16
Ember CLI 2.16.0 upgrades the application build pipeline to use uglify-es.
uglify-es introduces support for minification of modern JavaScript features.
With this change, Ember CLI can now generate minified production builds of
non-transpiled JavaScript code.
Ember CLI 2.16.0 adds support for addons to transform vendor resources via
importTransforms
, an implementation of Ember CLI RFC 108.
"Vendor resource" describes any file included via app.import
. This is an
advanced feature for addon authors, and is particularly useful for
FastBoot. In a future release FastBoot-aware
addons will be provided a declarative API for conditionally importing code in
Node.js or browser environments. See
ember-fastboot/ember-cli-fastboot#470 for more
details.
Thanks to @kratiahuja for proposing
and implementing this feature.
Other changes in 2.16.0 include:
- Project configuration is now cached as a performance optimization. See
ember-cli/ember-cli#7333,
ember-cli/ember-cli#7309,
and
ember-cli/ember-cli#7270
for more details. ember install
now supports scoped npm packages, for exampleember install @cardstack/git
.
See ember-cli/ember-cli#7109 for more details.- Several internal refactoring efforts were undertaken that begin support for the
un-merged Ember CLI strategies
RFC.
No new deprecations are added in Ember CLI 2.16.
For more details on the changes in Ember CLI 2.16 and detailed upgrade
instructions, please review the Ember CLI 2.16.0 release page.
Please note that 2.16.1 was published shortly after 2.16.0 and is the lastest
release.
Upcoming Changes in Ember CLI 2.17
Ember CLI 2.17 introduces no major functionality changes or deprecations.
For more details on the changes in Ember CLI 2.17.0-beta.1 and detailed upgrade
instructions, please review the Ember CLI 2.17.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. Thanks to all our contributors for
their efforts.