Ember.js is an open-source JavaScript web framework, based on the Model–view–viewmodel MVVM pattern. It allows developers to create scalable single-page web applications by incorporating common idioms and best practices into the framework.
Ember is used on many popular websites, including Apple Music, Square, Inc., Discourse, Groupon, LinkedIn, Vine, Live Nation, Nordstrom, Twitch, and Chipotle. Although primarily considered a framework for the web, it is also possible to build desktop and mobile applications in Ember. The most notable example of an Ember desktop application is Apple Music, a feature of the iTunes desktop application. The Ember trademark is owned by Tilde Inc.
From the beginning Ember was designed around several key ideas:
Like Ruby on Rails, Ember follows Convention over Configuration CoC, and the Don't Repeat Yourself DRY principle. It has been described as a highly opinionated framework built to be very flexible.
Ember consists of five key concepts:
Ember also provides dependency injection, declarative two-way data binding, computed properties, and automatically-updating templates.
Ember 2.0 was released August 13, 2015. The guiding principles for the release were simplification and stability without stagnation. The biggest changes occur in the view layer and include:
Another major change was the introduction of the Glimmer rendering engine with the aim of improving re-render performance. Glimmer adopts a value-diffing strategy, using a virtual tree of the dynamic areas of the document object model DOM, similar to React. A number of benchmarks illustrating the speedup in performance have been published.
Since version 1.8 new features identified for 2.0 have been shipped when ready on the 1.x branch, while still maintaining backward compatibility. Features due to be removed in 2.0 have been deprecated. This means that 1.13 contains virtually all 2.0 changes, with 2.0 mainly being about removing deprecated features from the code base. In many cases the removed code is still available in addons.
Ember.js is one component of a complete front end stack built and supported by the Ember core team.
Ember-cli aims to bring convention over configuration to build tools. A command line utility based on broccoli, running the command ember new <app-name>
generates a new Ember app with the default stack. This provides:
Other features include:
Most Ember applications use Ember Data, a data-persistence library providing many of the facilities of an object-relational mapping ORM. However it is also possible to use Ember without Ember Data.
Ember Data maps client-side models to server-side data. It can then load and save records and their relationships without any configuration via a RESTful JSON API that implements the JSON API specification, provided certain conventions are followed. However it is also easily configurable and can work with any server through the use of adapters and addons. JSON API has server library implementations for PHP, Node.js, Ruby, Python, Go, .NET and Java. Connecting to a Java-Spring based server is also documented.
The first stable version of Ember Data labelled 1.13 to align with Ember itself was released on 18 June 2015.
The Ember Inspector is an extension currently available for the Mozilla Firefox and Google Chrome web browsers that claims to make debugging Ember applications easier. Features include the ability to see which templates, components, and views are currently rendered, see the properties of any Ember object with a UI that computes bindings and computed properties, and access your application's objects from the console. If Ember Data is used, one can also see the records loaded for each model.
Fastboot is an Ember CLI addon created by the Ember core team that gives Ember developers the ability to run their apps in Node.js. This feature allow end users to see HTML and CSS right away, with the JavaScript downloading in the background and taking over once it has fully loaded.
Liquid Fire provides animation support for Ember applications. Features include animated transitions between routes and between models within a single route. It provides a DSL for laying out spatial route relationships, cleanly separated from view-layer implementation details. A simple example would be to animate a screen transition, so that the new screen appears to slide in from one edge of the browser.
Ember follows a six-week release cycle, inspired by the rapid release cycle of Google Chrome. Every six weeks a new release is made available, and at the same time a beta for the next release is also published. Generally several betas are produced before the next major release comes round, roughly one beta per week.
Starting with Ember 2.0, related projects supported by the core team have their releases coordinated, and share a version number with Ember itself.
Ember follows the semantic versioning convention. In particular this means that breaking changes are only introduced at major version numbers such as 1.0, 2.0 etc. While new features can be added at point releases 1.1, 1.2..., and features deprecated, no breaking changes to the public API's are introduced and upgrading within a major version is designed to be as simple as possible. Tooling is also under development to help streamline the upgrade process.
In addition to this process a number of steps were taken to mitigate issues around upgrading to the 2.0 release:
The process follows the core Ember principle of Stability without Stagnation and is in marked contrast to the upgrade plans of similar projects such as AngularJS.
Project status can be tracked via the core team meeting minutes. However major changes to Ember go through the Request For Comment process. This gives the Ember community a chance to give feedback on new proposals. Notable RFCs include:
In December 2011, the SproutCore 2.0 framework was renamed to Ember.js, to reduce confusion between the application framework and the widget library of SproutCore 1.0. The framework was created by Yehuda Katz, a member of the jQuery, Ruby on Rails and SproutCore core teams. Like many of Katz's other projects, it advocates convention over configuration.
Support for Internet Explorer 8 is available up to version 1.13, but will be dropped from release 2.0 onwards. Internet Explorer 9 and later will continue to be supported. The core team will continue to periodically publish point releases in the 1.13 series to patch security bugs and browser compatibility issues, including issues in IE8.
Unlike other projects such as AngularJS Google and React Facebook which have the backing of one main company, Emberjs has a variety of sponsors. These include Yahoo!, LinkedIn and Bustle which are all major users of the framework.