Learn Ember, a JavaScript "framework for creating ambitious web applications."


Each lesson focuses on a single aspect of building the project, like modeling the data, building a GraphQL server in Elixir, or building a mobile client for it in Flutter.



An introduction to Ember, some resources, and the prerequisites for installation.


Installation, up and running

Installing ember-cli and creating your first application.


Installing the Ember Inspector

An indispensable tool for Ember development.


Router, Routes, and Controller Basics

Learning how Ember router, routes, and controllers work.


Ember Weekly Drip #1 and Exercise - Building Nested Routes

Links that cover: APIs, RFCs, Discussions, Twiddles, Weekends; Also, an exercise to create a nested route.


Solution and Prep for Components and Models

The solution to last week's exercise and some readings to prepare for the upcoming work with Components and Models.


Components and Actions

Building a custom component and passing a controller action to it.


The Model Hook and Ember Data Store

Ember Data, explained a bit.


Setting up Models and Adapters

A rapid introduction to Ember's Models and JSON API support.


Ember Weekly Drip #2 and Exercise - Showing a Contact and Adding Address

Links on: Serializers, route action helper, and a couple of interviews.; Also, an exercise to show a contact and add an address model.

Solution and Prep for Route and Component Exploration

The solution to last week's exercise, and readings to prepare for learning more about Routes and Components.


A basic introduction to routes, followed by a detailed walkthrough of their lifecycle hooks.

Ember Components

A look at getting data from the route to a component.

Component Lifecycle Hooks

An introduction to the lifecycle hooks for components.


Ember Weekly Drip #3 and Exercise: Component with Internal State

Links on: Accessibility, Dependency Injection, Fastboot and Phoenix, Ambition. Also, an exercise to create a component with internal state.

Solution and Prep for Services, Initializers and Dependency Injection

The solution to last week's exercise, and readings to prepare for Services, Initializers, and Dependency Injection


An introduction to Services. Load it lazy-like and let's throw in a Bower package.

Dependency Injection with an Initializer

Injecting a service from an initializer.

Updating Data in a Service

Modifying data on a service by way of an action which will call a method on the service.


Ember Weekly Drip #4 and Exercise: Posting Messages to the Page

Links that cover: Embedding Ember in an existing app; Ember Links; Singletons; Tests and Dependency Injection.

Solution and Prep

Expanding the current user and some reading about tests.

Unit and Integration Tests

Using Ember's default QUnit testing to test-drive a component with unit and integration tests.

Acceptance Tests

Learning about testing the whole Ember app with acceptance tests.

Ember CLI Mirage

Using the Ember CLI Mirage client-side server along with Pretender to make our acceptance tests less fragile and create a nice development environment for data.


An exercise with model relationships and computed properties. Some reading covering testing, es6, and babel.

Solution and Prep

Solving relationship challenges and reading on component lifecycle hooks.

Extending an Existing Application - Using the Component helper

Using the component helper to add something akin to polymorphism to a template in an existing, relatively real-world application.

Building your Application

Building your app for development and production and a super basic deploy.

School Directory Adding Pagination

Adding JSON-API-compliant pagination to the School Directory application.


Exercise extending our pagination and some reading covering pagination, the component helper, meetup talks, and composable helpers.

Solution and Prep

Looking at how we extended our pagination in the exercise and a bunch of links about developing addons.

Creating an Addon - with tests

Creating an Addon - Part 1: Getting Started with our Components and Test-driving our Development.

Linking your addon locally and running tests

Creating an Addon - Part 2: Testing our Addon and Linking it Locally.

Creating a Service and Making a Promise

Creating an Addon - Part 3: Creating a Service, Object Destructuring, and Promises.

Exercise and link dump

Exercise to Complete the Data Fetching Portion of our Addon and Links covering DevOps, Actions, Tips, Authentication.

Addon Service Completion Solution

Creating an Addon - Part 4: Exercise Solution for Fetching Data for our Addon.

Completing Our Addon

Finishing the addon, publishing it to npm, and setting up CI.

Back to Actions: Some more details

Going into More Detail with Ember Actions.

Serializers - Munging some payloads

Learning about Serializers and Munging Through Irregular Payloads.

Links Dump and an Exercise

Links coving Serializers and Adapters, Mini Talks from Ember Camp London, Broccoli and RSVP, Testing addons, and Ember-ci. Exercise munging relationships out of our payload.

Solution for last week and prep for this week

Here we go over our solution to dealing with an irregular payload in our serializer and there is a link to prep for creating, updating, and deleting records.

Creating and Updating Records

We are looking at updating records with Ember using Dockyard's Ember Changeset addon.

Validations on our Edit

Adding validations while updating our records.

Creating and Deleting Records

We look at deleting records then creating records in Ember.

Links and Exercise

Here we have an exercise to add validation to record creation. We also look at some links covering the Ember Let addon from The Frontside, a talk by Charles Lowell about immutability, typecasting, and the Yarn package manager.

Solution and Prep

Solution to the previous exercise adding validation to record creation and preparatory reading on the Ember Runloop.

Getting started with the Run Loop

Learning the basics of the Ember Runloop.

A little more about the Runloop.

A little more on the Runloop.

Observers: The villain of our story

The villain of our story: Observers.

Links and Exercise

Our exercise is to refactor some observers into computed properties and we look at links about the runloop, observers, and functional programing in Ember.

Solution and Prep

Solution to converting a few observers to computed properties and a few links about Fastboot and Deploys.

Deploy to Heroku

Here we look at prepping our Ember app to deploy and deploying it to Heroku.


What is Fastboot and how can we use it in our apps?

Once More with Computed Properties

Talking about computed properties and watching the values of arrays, and using filter, filterBy, and map.

Exercise and Links

Here we look at a couple of exercises where we can use Ember's built in computed methods.

Solution and Prep

Here we go over the solutions to the computed exercise and get a few links about templates.

Utils and Helpers

We are looking at using and creating helpers for your templates and utils for use in your JavaScript.

A Bit More Detail on Template Conditionals

We go over Inline conditionals and other uses of `{{else}}`

Component Yield and Attributes

Wrapping components can yield context to their wrapped items. We can also really customize a component's HTML element's attributes.

Ember Wrap up

Wrapping up, some places for further learning and some resources to help you moving forward.


The code in the applications was produced by:

./brandon blaylock

Brandon Blaylock

Brandon started coding over 15 years ago. After taking a short break to teach college, he found his way back to software development. He spends most of his time on the front-end writing JavaScript, but enjoys working on the server as well. Brandon believes that writing for DailyDrip is a great way to combine two things he cares about a great deal: software and education.

Featured Lessons

Our content library is pretty great, here are a few lessons we think you might like.

What our Superusers are Saying!

Some other people were willing to publicly state that they like us!

Taylor Dolezal

Software Architect

Smooth Terminal has easily been one of the most helpful resources on my journey to better understand Elixir and the Phoenix web framework.

James Edward II


With any language there are so many details to learn. What functions are built-in? How should I structure my code? What tools are available for improving my workflow? It’s rare to find one source that can answer so many of these questions, but Smooth Terminal does this and more.

Rex Van Der Spuy

Game developer

Smooth Terminal is by far the best resource for learning Elm anywhere, and among the very best online learning platforms, period.