This article contains content that is written like an advertisement. Please help improve it by removing promotional content and inappropriate external links, and by adding encyclopedic content written from a neutral point of view.(February 2016) (Learn how and when to remove this template message)
Ember is used on many popular websites, including Apple Music, Square, Inc., Discourse,Groupon,LinkedIn, 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.
Philosophy and design
This section may contain wording that promotes the subject through exaggeration of unnoteworthy facts. Please help improve it by removing or replacing such wording.(September 2020) (Learn how and when to remove this template message)
From the beginning Ember was designed around several key ideas:
Focus on ambitious web applications
More productive out of the box
Ember is one component of a set of tools that work together to provide a complete development stack. The aim of these tools is to make the developer productive immediately. For example Ember CLI, provides a standard application structure and build pipeline. It also has a pluggable architecture and over 3500 addons to enhance and extend it.
Stability without stagnation
This is the idea that backward compatibility is important and can be maintained while still innovating and evolving the framework.
Future web standards foresight
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.
This article may contain wording that promotes the subject through exaggeration of unnoteworthy facts. Please help improve it by removing or replacing such wording.(September 2020) (Learn how and when to remove this template message)
In Ember, the state of an application is represented by a URL. Each URL has a corresponding route object that controls what is visible to the user.
Every route has an associated model, containing the data associated with the current state of the application. While one can use window.fetch to load JSON objects from a server and use those objects as models, most applications use a model library such as Ember Data to handle this.
Templates are used to build the application's HTML and are written with the HTMLBars templating language. (HTMLBars is a variation of Handlebars that builds DOM elements rather than a String.)
Services are just singleton objects to hold long-lived data such as user sessions.
Ember also provides dependency injection, declarative one-way data-flow, tracked properties, and automatically updating templates.
Ember software stack
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:
A standard file and directory structure.
Development server with live reload. Out of the box this will automatically rebuild apps incrementally whenever files are changed, and then reload the app in any open browser tabs.
Asset management (including combining, minifying, and versioning).
Other features include:
Blueprints, which are code generators for creating models, controllers, components, and so on that are needed in an application. Custom blueprints can also be created.
Addons which provide the ability to extend the features of Ember CLI. Addons can be installed by typing ember install <addon-name>. Over two thousand addons are currently available including addons for CoffeeScript, LESS, Sass, Compass and Mocha.
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 one's application's objects from the console. If Ember Data is used, one can also see the records loaded for each model.
The Object Inspector allows viewing and editing the runtime contents of Ember Objects and Classes.
The View Tree visually displays the structure of the rendered Ember application.
The Routes tab allows one to determine and follow the router state and the urls used to represent routes.
The Data tab can shows the models in the application and records loaded for each model.
The Info tab displays dependency versions.
The Deprecations tab allows for getting stacktraces of deprecation warnings that do not trigger exceptions.
The Promises tab allows for tracing of code through asynchronous operations.
The Container tab is used to check which objects have been loaded.
The Render Performance tab is for determining what is slowing down an Ember application.
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.
See the releases blog for the full list of releases and detailed changelog.
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.
Upgrading and backward compatibility
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:
All major 2.0 features were in fact introduced early and spread out over a number of releases in order to reduce many of the issues caused by big-bang upgrades.
Most features that were removed are still available through addons.
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:
Engines. Engines allow multiple logical applications to be composed together into a single application from the user's perspective. Currently released as an experimental addon.
Release cycle improvements. Among other things it proposes changes to Ember CLI to support "svelte builds", which will strip out deprecated and unused features.
Outlet Focusing. Making Ember accessible by default. This RFC aims to improves the user experience for people using screen readers.
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.
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.