Build Status Gitter Support

For upgrading to SystemJS 0.17-0.19, see the SystemJS 0.17 release upgrade notes for more information, or read the updated SystemJS Overview guide.

Universal dynamic module loader - loads ES6 modules, AMD, CommonJS and global scripts in the browser and NodeJS. Works with both Traceur and Babel.

Built on top of the ES6 Module Loader polyfill.

~15KB minified and gzipped, runs in IE8+ and NodeJS.

For discussion, see the Google Group.

For a list of guides and tools, see the Third-Party Resources Wiki.


Basic Use


<script src="system.js"></script>
  // set our baseURL reference path
    baseURL: '/app'

  // loads /app/main.js

To load ES6, locate a transpiler (traceur.js, ‘browser.js’ from Babel, or ‘typescript.js’ from TypeScript) in the baseURL path, then set the transpiler:

    // or 'traceur' or 'typescript'
    transpiler: 'babel',
    // or traceurOptions or typescriptOptions
    babelOptions: {


Alternatively a custom path to Babel or Traceur can also be set through paths:

  map: {
    traceur: 'path/to/traceur.js'

Promise Polyfill

SystemJS relies on Promise being present in the environment.

For the best performance in IE and older browsers, it is advisable to load Bluebird or es6-promise before SystemJS.

Otherwise, when Promise is not available, SystemJS will attempt to load the system-polyfills.js file located in the dist folder which contains the when.js Promise polyfill.


To load modules in NodeJS, install SystemJS with:

  npm install systemjs

If transpiling ES6, also install the transpiler:

  npm install traceur babel typescript 

We can then load modules equivalently to in the browser:

var System = require('systemjs');

System.transpiler = 'traceur';

// loads './app.js' from the current directory
System.import('./app.js').then(function(m) {

If using TypeScript, set global.ts = require('typescript') before importing to ensure it is loaded correctly.

If you are using jspm as a package manager you will also need to load the generated config.js. The best way to do this in node is to get your System instance through jspm, which will automatically load your config correctly for you:

var System = require('jspm').Loader();

System.import('lodash').then(function (_) {


Supported loader plugins:

Additional Plugins:


Running the tests

To install the dependencies correctly, run bower install from the root of the repo, then open test/test.html in a browser with a local server or file access flags enabled.