This quickstart guide will walk you through creating a simple Ember app that fetches data from GitHub, then renders it using FastBoot.

To start, make sure you've got Node.js and npm installed. If you've never used Ember before, you may want to run through the Ember quickstart guide.

Install Ember by running:

npm install ember-cli -g

Create a new application by running:

ember newgithub-fastboot-example

Once created, cd into the github-fastboot-example directory.

We need to fetch data from the GitHub API, but there's a small problem: the browser uses XMLHttpRequest to fetch JSON data, while in Node.js you'd use the http library. We'll be running the same Ember.js app in both environments, so we need some way of making it work in both.

Let's install a tool that will let us write the same code whether our app is running in the browser or on the server. Code that runs in both places is sometimes called universal or isomorphic.

Run the following command to install ember-fetch:

ember install ember-fetch

Under the hood, the ember install command is just like npm install, but automatically saves the addon to your package.json file.

In Ember, routes are objects responsible for fetching model data. Let's make a route that fetches information about you from GitHub.

Run the following command in your terminal:

ember generate route index

This will generate a new route called index. By convention, index is the name of the route for when the user visits the root path, or /. Think of it like index.html.

Open the newly-created app/routes/index.js file in your code editor. Let's add a method called model() to the route that fetches information about your user from GitHub.

We'll use the fetch polyfill exposed by the ember-fetch addon that lets us write universal fetching code for both the browser and Node.js. A polyfill is a library that provides a standardized API that isn't available in all environments yet. In this case, it's polyfilling the Fetch API.

Implement the model hook like I did below. You might want to change the username in the URL from mine to yours.

Once you've made those changes (don't forget to save!), switch back to the terminal and run the development server:

ember serve

This runs a local development server you can use to verify your program is running correctly. Visit localhost:4200/ in your browser. You should see your GitHub profile rendered below a title that says "Welcome to Ember.js".

We've verified we've got a working application, but there's one problem. If you use your browser's View Source feature, you'll see that there's no HTML being rendered: just an empty body and some <script> tags. Let's fix that.

Back in the terminal, stop the development server by hitting Ctrl-C on your keyboard.

Next, install FastBoot:

ember install ember-cli-fastboot

Let's turn on server-side rendering and make sure it works. Start the FastBoot server like this if you have ember-cli 2.12.0 and above in your app:

ember serve

Note: ember fastboot command is soon going to be deprecated and removed in FastBoot 1.0. Please refrain from using it as it has live-reload and other issues

View the FastBoot-rendered content by visiting localhost:4200/. Note the same port! ember serve can serve render your app on server side as well. Moreover, all options of ember serve will work with FastBoot (example --proxy, --port etc).

Everything should look just the same as before. The only difference is that, this time when you View Source, the <body> tag is populated with the rendered HTML content.

Congratulations! You've just built your first FastBoot application.

Let's review what we've accomplished here:

We created a new app in one command with ember new

We used the universal library ember-fetch to request AJAX data

When rendering in Node.js, the FastBoot server requested data from GitHub on the user's behalf

We wrote an app that has the benefits of traditional server-side rendering and the benefits of client-side JavaScript, in a single codebase. No hacks, just installing an addon.

Now that you've got your first FastBoot app, it's time to start adding FastBoot to your existing apps. Or, learn how to deploy your new app by learning about Deploying.