diff --git a/README.md b/README.md
index b55cc575b..d2affa36d 100755
--- a/README.md
+++ b/README.md
@@ -65,6 +65,7 @@ List of Definitions
* [EaselJS](http://www.createjs.com/#!/EaselJS) (by [Pedro Ferreira](https://bitbucket.org/drk4))
* [ember.js](http://emberjs.com/) (by [Boris Yankov](https://github.com/borisyankov))
* [EpicEditor](http://epiceditor.com/) (by [Boris Yankov](https://github.com/borisyankov))
+* [ES6-Promises](https://github.com/jakearchibald/ES6-Promises) (by [François de Campredon](https://github.com/fdecampredon/))
* [expect.js](https://github.com/LearnBoost/expect.js) (by [Teppei Sato](https://github.com/teppeis))
* [expectations](https://github.com/spmason/expectations) (by [vvakame](https://github.com/vvakame))
* [Express](http://expressjs.com/) (by [Boris Yankov](https://github.com/borisyankov))
diff --git a/es6-promises/es6-promises-tests.ts b/es6-promises/es6-promises-tests.ts
new file mode 100644
index 000000000..774d3763e
--- /dev/null
+++ b/es6-promises/es6-promises-tests.ts
@@ -0,0 +1,162 @@
+///
+
+
+var promiseString: Promise,
+ promiseStringArr: Promise,
+ arrayOfPromise: Promise[],
+ promiseNumber: Promise,
+ promiseAny: Promise,
+ thenable: Thenable;
+
+// constructor test
+var constructResult = new Promise((resolve, reject) => {
+ resolve('a string');
+});
+promiseString = constructResult;
+
+
+var constructResult1 = new Promise((resolve:(promise: Thenable) => void) => {
+ resolve(Promise.resolve('a string'));
+});
+promiseString = constructResult1;
+
+//cast test
+var castResult = Promise.cast('a string');
+promiseString = castResult;
+var castResult1 = Promise.cast(Promise.resolve('a string'));
+promiseString = castResult1;
+
+//resolve test
+var resolveResult = Promise.resolve('a string');
+promiseString = resolveResult;
+
+var resolveResult1 = Promise.resolve(thenable);
+promiseString = resolveResult1;
+
+//reject test
+var rejectResult = Promise.reject('there is an error');
+promiseAny = rejectResult;
+
+//all test
+var allResult = Promise.all(arrayOfPromise);
+promiseStringArr = allResult;
+
+//race test
+var raceResult = Promise.race(arrayOfPromise);
+promiseString = raceResult;
+
+
+//then test
+var thenWithPromiseResult = promiseString.then(word => Promise.resolve(word.length));
+promiseNumber = thenWithPromiseResult;
+
+var thenWithPromiseResultAndPromiseReject = promiseString.then(word => Promise.resolve(word.length), error => Promise.resolve(10));
+promiseNumber = thenWithPromiseResultAndPromiseReject;
+
+var thenWithPromiseResultAndSimpleReject = promiseString.then(word => Promise.resolve(word.length), error => 10);
+promiseNumber = thenWithPromiseResultAndSimpleReject;
+
+var thenWithSimpleResult = promiseString.then(word => word.length);
+promiseNumber = thenWithSimpleResult;
+
+var thenWithSimpleResultAndPromiseReject = promiseString.then(word => word.length, error => Promise.resolve(10));
+promiseNumber = thenWithSimpleResultAndPromiseReject;
+
+var thenWithSimpleResultAndSimpleReject = promiseString.then(word => word.length, error => 10);
+promiseNumber = thenWithSimpleResultAndSimpleReject;
+
+var thenWithUndefinedFullFillAndSimpleReject = promiseString.then(undefined, error => 10);
+promiseNumber = thenWithUndefinedFullFillAndSimpleReject;
+
+var thenWithUndefinedFullFillAndPromiseReject = promiseString.then(undefined, error => Promise.resolve(10));
+promiseNumber = thenWithUndefinedFullFillAndPromiseReject;
+
+var thenWithNoResultAndNoReject = promiseString.then();
+promiseNumber = thenWithNoResultAndNoReject;
+
+//catch test
+var catchWithSimpleResult = promiseString.catch(error => 10);
+promiseNumber = catchWithSimpleResult;
+
+var catchWithPromiseResult = promiseString.catch(error => Promise.resolve(10));
+promiseNumber = catchWithPromiseResult;
+
+
+//examples coming from http://www.html5rocks.com/en/tutorials/es6/promises/
+
+function get(url: string) {
+ // Return a new promise.
+ return new Promise(function(resolve, reject) {
+ // Do the usual XHR stuff
+ var req = new XMLHttpRequest();
+ req.open('GET', url);
+
+ req.onload = function() {
+ // This is called even on 404 etc
+ // so check the status
+ if (req.status == 200) {
+ // Resolve the promise with the response text
+ resolve(req.response);
+ }
+ else {
+ // Otherwise reject with the status text
+ // which will hopefully be a meaningful error
+ reject(Error(req.statusText));
+ }
+ };
+
+ // Handle network errors
+ req.onerror = function() {
+ reject(Error("Network Error"));
+ };
+
+ // Make the request
+ req.send();
+ });
+}
+
+
+
+function getJSON(url: string) {
+ return get(url).then(JSON.parse);
+}
+
+function addHtmlToPage(html: string) {
+
+}
+
+function addTextToPage(text: string) {
+
+}
+
+interface Story {
+ heading: string;
+ chapterUrls: string[]
+}
+
+getJSON('story.json').then(function(story: Story) {
+ addHtmlToPage(story.heading);
+
+ // Map our array of chapter urls to
+ // an array of chapter json promises.
+ // This makes sure they all download parallel.
+ return story.chapterUrls.map(getJSON)
+ .reduce(function(sequence, chapterPromise) {
+ // Use reduce to chain the promises together,
+ // adding content to the page for each chapter
+ return sequence.then(function() {
+ // Wait for everything in the sequence so far,
+ // then wait for this chapter to arrive.
+ return chapterPromise;
+ }).then(function(chapter) {
+ addHtmlToPage(chapter.html);
+ });
+ }, Promise.resolve());
+}).then(function() {
+ addTextToPage("All done");
+}).catch(function(err) {
+ // catch any error that happened along the way
+ addTextToPage("Argh, broken: " + err.message);
+}).then(function() {
+ (document.querySelector('.spinner')).style.display = 'none';
+});
diff --git a/es6-promises/es6-promises-tests.ts.tscparams b/es6-promises/es6-promises-tests.ts.tscparams
new file mode 100644
index 000000000..3cc762b55
--- /dev/null
+++ b/es6-promises/es6-promises-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/es6-promises/es6-promises.d.ts b/es6-promises/es6-promises.d.ts
new file mode 100644
index 000000000..a44355233
--- /dev/null
+++ b/es6-promises/es6-promises.d.ts
@@ -0,0 +1,133 @@
+// Type definitions for es6-promises
+// Project: https://github.com/jakearchibald/ES6-Promises
+// Definitions by: François de Campredon
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+
+interface Thenable {
+ then(onFulfill: (value: R) => Thenable, onReject: (error: any) => Thenable): Thenable;
+ then(onFulfill: (value: R) => Thenable, onReject?: (error: any) => U): Thenable;
+ then(onFulfill: (value: R) => U, onReject: (error: any) => Thenable): Thenable;
+ then(onFulfill?: (value: R) => U, onReject?: (error: any) => U): Thenable;
+
+}
+
+declare class Promise implements Thenable {
+ /**
+ * If you call resolve in the body of the callback passed to the constructor,
+ * your promise is fulfilled with result object passed to resolve.
+ * If you call reject your promise is rejected with the object passed to resolve.
+ * For consistency and debugging (eg stack traces), obj should be an instanceof Error.
+ * Any errors thrown in the constructor callback will be implicitly passed to reject().
+ */
+ constructor(callback: (resolve : (result: R) => void, reject: (error: any) => void) => void);
+ /**
+ * If you call resolve in the body of the callback passed to the constructor,
+ * your promise will be fulfilled/rejected with the outcome of thenable passed to resolve.
+ * If you call reject your promise is rejected with the object passed to resolve.
+ * For consistency and debugging (eg stack traces), obj should be an instanceof Error.
+ * Any errors thrown in the constructor callback will be implicitly passed to reject().
+ */
+ constructor(callback: (resolve : (thenable: Thenable) => void, reject: (error: any) => void) => void);
+
+
+ /**
+ * onFulFill is called when/if "promise" resolves. onRejected is called when/if "promise" rejects.
+ * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.
+ * Both callbacks have a single parameter , the fulfillment value or rejection reason.
+ * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.
+ * If an error is thrown in the callback, the returned promise rejects with that error.
+ *
+ * @param onFulFill called when/if "promise" resolves
+ * @param onReject called when/if "promise" rejects
+ */
+ then(onFulfill: (value: R) => Thenable, onReject: (error: any) => Thenable): Promise;
+ /**
+ * onFulFill is called when/if "promise" resolves. onRejected is called when/if "promise" rejects.
+ * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.
+ * Both callbacks have a single parameter , the fulfillment value or rejection reason.
+ * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.
+ * If an error is thrown in the callback, the returned promise rejects with that error.
+ *
+ * @param onFulFill called when/if "promise" resolves
+ * @param onReject called when/if "promise" rejects
+ */
+ then(onFulfill: (value: R) => Thenable, onReject?: (error: any) => U): Promise;
+ /**
+ * onFulFill is called when/if "promise" resolves. onRejected is called when/if "promise" rejects.
+ * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.
+ * Both callbacks have a single parameter , the fulfillment value or rejection reason.
+ * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.
+ * If an error is thrown in the callback, the returned promise rejects with that error.
+ *
+ * @param onFulFill called when/if "promise" resolves
+ * @param onReject called when/if "promise" rejects
+ */
+ then(onFulfill: (value: R) => U, onReject: (error: any) => Thenable): Promise;
+ /**
+ * onFulFill is called when/if "promise" resolves. onRejected is called when/if "promise" rejects.
+ * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.
+ * Both callbacks have a single parameter , the fulfillment value or rejection reason.
+ * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.
+ * If an error is thrown in the callback, the returned promise rejects with that error.
+ *
+ * @param onFulFill called when/if "promise" resolves
+ * @param onReject called when/if "promise" rejects
+ */
+ then(onFulfill?: (value: R) => U, onReject?: (error: any) => U): Promise;
+
+
+ /**
+ * Sugar for promise.then(undefined, onRejected)
+ *
+ * @param onReject called when/if "promise" rejects
+ */
+ catch(onReject?: (error: any) => Thenable): Promise;
+ /**
+ * Sugar for promise.then(undefined, onRejected)
+ *
+ * @param onReject called when/if "promise" rejects
+ */
+ catch(onReject?: (error: any) => U): Promise;
+}
+
+declare module Promise {
+
+ /**
+ * Returns promise (only if promise.constructor == Promise)
+ */
+ function cast(promise: Promise): Promise;
+ /**
+ * Make a promise that fulfills to obj.
+ */
+ function cast(object?: R): Promise;
+
+
+ /**
+ * Make a new promise from the thenable.
+ * A thenable is promise-like in as far as it has a "then" method.
+ * This also creates a new promise if you pass it a genuine JavaScript promise, making it less efficient for casting than Promise.cast.
+ */
+ function resolve(thenable: Thenable): Promise;
+ /**
+ * Make a promise that fulfills to obj. Same as Promise.cast(obj) in this situation.
+ */
+ function resolve(object?: R): Promise;
+
+ /**
+ * Make a promise that rejects to obj. For consistency and debugging (eg stack traces), obj should be an instanceof Error
+ */
+ function reject(error?: any): Promise;
+
+ /**
+ * Make a promise that fulfills when every item in the array fulfills, and rejects if (and when) any item rejects.
+ * the array passed to all can be a mixture of promise-like objects and other objects.
+ * The fulfillment value is an array (in order) of fulfillment values. The rejection value is the first rejection value.
+ */
+ function all(promises: Promise[]): Promise;
+
+ /**
+ * Make a Promise that fulfills when any item fulfills, and rejects if any item rejects.
+ */
+ function race(promises: Promise[]): Promise;
+}
\ No newline at end of file