ember install ember-fetch
ember-fetch requries ember-cli 2.13 or above.
Use with TypeScript
ember-fetch with TypeScript or enable editor's type support, You can add
"fetch": ["node_modules/ember-fetch"] to your
Use with Ember Data
firstname.lastname@example.org was released with built-in fetch support, if your ember-data is below 3.9.2, please checkout ember-fetch v7.x.
Use with Fastboot
node-fetch in Fastboot, which doesn't allow relative URL.
urlshould be an absolute url, such as
https://example.com/. A path-relative URL (
/file/under/root) or protocol-relative URL (
//can-be-http-or-https.com/) will result in a rejected promise.
ember-fetch grabs the
host info from fastboot request after the
This allows you to make a relative URL request unless the app is not initialized, e.g.
For addon authors, if the addon supports Fastboot mode,
ember-fetch should also be listed as a peer dependency.
This is because Fastboot only invokes top-level addon's
updateFastBootManifest (detail), thus
ember-fetch has to be a top-level addon installed by the host app.
Allow native fetch
ember-fetch allows access to native fetch in browser through a build config flag:
// ember-cli-build.jslet app = defaults// Add options here'ember-fetch':preferNative: true;
If set to
true, the fetch polyfill will be skipped if native
fetch is available,
otherwise the polyfilled
fetch will be installed during the first pass of the vendor js file.
If set to
false, the polyfilled
fetch will replace native
fetch be there or not.
If all your browser targets support native
preferNative: true, the polyfill will not be included in the output build. If, for some reason, you still need the polyfill to be included in the bundle, you can set
The way you do import remains same.
fetch response is successful if
response.ok is true,
otherwise you can read the status code to determine the bad response type.
fetch will only reject with network errors.
ember-fetch provides some utility functions:
isAbortErrorAborted network error
- evergreen / IE10+ / Safari 6.1+ https://github.com/github/fetch#browser-support
Q & A
Does it work with pretender?
- Yes, pretender v2.1 comes with
Does this replace ic-ajax?
- ideally yes, but only if you cater to IE9+
- for basic drop-in compat
import ajax from 'ember-fetch/ajax'
What about all the run-loop and promise mixing details?
- taken care of for you
Why is this wrapper needed?
- original emits a global
- original requires a Promise polyfill (ember users have RSVP)
- original isn't Ember run-loop aware
Won't this wrapper get out-of-sync?
- we actually don't bundle github/fetch rather we merely wrap/transform what
node_modules, so we should be resilient to changes assuming semver from the fetch module