There are many conformant implementations of Promises/A+. Here are the ones we know about. Note that an implementation's conformance is determined by it passing the test suite. If you pass the tests, feel free to send a pull request to get yourself on this list!
Conformant implementations are encouraged to include the Promises/A+ logo in their README files with a link to the specification, using code like the following:
<a href="https://promisesaplus.com/">
<img src="https://promisesaplus.com/assets/logo-small.png" alt="Promises/A+ logo"
title="Promises/A+ 1.0 compliant" align="right" />
</a>
Also, if your implementation is published in the npm registry, we suggest using the "promises-aplus" keyword.
The ECMAScript specification includes a section titled "Promise Objects". This section mandates that a conformant implementation of ECMAScript have a Promise
global. Largely due to the actions of the Promises/A+ community, the Promise
global specified by ECMAScript and present in any conforming JavaScript engine is indeed a Promises/A+ implementation!
The "Promise Objects" section of the ECMAScript specification has many additional requirements for the processing model beyond those given in Promises/A+. In other words, people can implement promises libraries that conform to Promises/A+, without necessarily conforming to the ECMAScript specification for promise objects. In this way, ECMAScript's Promise
global is just one of many Promises/A+ implementations.
Implementation | Description | Spec Version |
---|---|---|
Adehun | Light weight Promises/A+ implementation; good for learning about the Promise/A+ spec. | 1.1 |
avow | Example Promises/A+ implementation. Simple, tiny, fast, fully async | 1.0 |
ayepromise | A teeny-tiny promise library | 1.1 |
BelofteJS | A lightweight Promises/A+ compliant implementation of ECMAScript Promise API | 1.1 |
bloodhound | Feature-rich promise library with performance timing and reporting baked in. | 1.1 |
bluebird | Full featured Promises/A+ implementation with exceptionally good performance | 1.1 |
broody-promises | Promises with `.value()` method, that brings ability to get value of the chain synchronously | 1.1 |
cheno | Just an implementation of Promise/A+ then with ES6 syntax , just to learning Promise and ES6. | 1.0 |
CodeCatalyst/promise.coffee | Promises/A+ compliant implementation in object-oriented CoffeeScript | 1.1 |
Covenant | A tight and performant Promises/A+ compliant implementation in CoffeeScript | 1.1 |
creed | Functionally-oriented async with coroutines, promises, ES2015 iterables, fantasy-land | 1.1 |
D.js | A tiny Promises/A+ implementation for Node.js and the browser with some extras | 1.1 |
Deferred.js | Deferreds, promises, and callback aggregators. | 1.1 |
denote | Minimalistic Promises/A+ compliant JavaScript promise implementation | 1.1 |
diogocampos/promise-coffee | Promises/A+ spec-compliant promises in less than 80 lines of readable CoffeeScript | 1.1 |
es3-promise | An implementation of Promise then with ES3 syntax | 1.1 |
fate | Promises/A+ closure-based implementation | 1.0 |
ff | Simplifies the most common use cases for series, parallel, and promise utilities | 1.0 |
fidelity | A fast and simple Promise/A+ implementation | 1.1 |
FidPromise | Promise implementation that is readable and debuggable | 1.1 |
Future | Original concept of (futures and promises) and tiny implementation of Promises/A+ | 1.1 |
Given | Given is a Promises/A+ spec implementation wrote for fun and learning purposes, using ES6 syntax | 1.1 |
GPromise | Another Promise/A+ Implementation | 1.1 |
hbarcelos/promise-js | Simple Promises/A+ JavaScript implementation | 1.1 |
HQidea/promise | A Promises/A+ implementation | 1.1 |
ipromise | Standalone, lightweight and tested implementation of Promises/A+ | 1.1 |
Legendary | Combines promise subclassing with sugar inspired by when.js, Q and async. | 1.1 |
Lie | Small library following the ES6 syntax | 1.1 |
Lifelong.Promise | Lifelong implements the spec in a single, very strongly typed Typescript file, without extraneous identifiers. | 1.1 |
microPromise | Written for a nodejs + browser ArangoDB driver. | 1.1 |
min-promise | Small and clean Promises/A+ implementation in a hundred lines | 1.1 |
mpromise | A Promises/A+ conformant implementation, written for mongoose | 1.1 |
MutexPromise | An implementation for developing & debugging with Promises | 1.1 |
Naive Promesse | Naïve implementation of Promises/A+ specification | 1.0 |
Native Promise Only | Polyfill for native ES6 Promises only, no extras! | 1.1 |
Octane/Promise | Promises/A+ compliant implementation of ES6 promises for browsers and Node.js | 1.1 |
ondras/promise | Straightforward client-side Promises/A+ implementation, with XHR, setTimeout etc. | 1.1 |
potch/promise.js | Fully Promises/A+ compliant promises and nothing else! | 1.0 |
P | A simple Promises/A+ library, implementing a subset of the the Q API | 1.1 |
Pacta | An algebraic, Promises/A+ compliant implementation of Promises in node.js. | 1.0 |
Parole | Another ES6 promise implementation compliant with Promises/A+ | 1.1 |
Pinky | An extremely tiny Promises/A+ implementation that passes the Promises/A+ test suite | 1.0 |
PinkySwear.js | Promises/A+ compliant in less than 500 bytes | 1.1 |
Potential | Small Promises/A+ library focusing on simple, annotated source code for educational purposes | 1.1 |
promeso | A little Promises/A+ implementation | 1.0 |
promesse | A Promises/A+ implementation that tries to be concise using functional style while remaining easy to understand | 1.1 |
Promis | A small embeddable Promise polyfill | 1.1 |
promiscuous | A minimal and fast promise/deferred implementation | 1.0 |
Promise3 | A very easy-to-read source code of Promise implementation, good to learn how Promise works inside | 1.1 |
Promised | A 150 loc Promises/A+ implementation with ES6 class | 1.0 |
Promises, Promises... | A full, documented, standalone Promises/A+ 1.1 implementation for TypeScript / JavaScript / Node.js with some additional features to improve productivity | 1.1 |
Promistix | A very tiny (less than 100 lines of Javascript code) implementation, written just for fun. This code unintentionally uncovered a bug in the specs in 2014! | 1.1 |
Promix | Mix promises with callbacks for improved control flow | 1.0 |
Promiz | Tiny (590 bytes), with an even smaller micro version at 228 bytes (min + gzip) | 1.1 |
Q | A tool for making and composing asynchronous promises in JavaScript | 1.0 |
Robin Egg Bluebird | A tiny Promises/A+ compliant implementation inspired by the official Crayola color. | 1.1 |
RWPromise | 88 lines of concise code, with comments annotating which clause of the spec each line conforms to | 1.1 |
rsvp.js | A lightweight library that provides tools for organizing asynchronous code | 1.1 |
Shvua | A promise implementation that also allows you to wrap your object's API with promise-like API | 1.0 |
sure-thing | A simple and fast Promises/A+ implementation. | 1.1 |
Taxi | Simple and Annotated. A tiny example Promises/A+ implementation. Just for learning. | 1.1 |
Ten.Promise | Promises/A+ implementation written in TypeScript | 1.0 |
then/promise | Bare bones Promises/A+ implementation | 1.1 |
ThenFail | Promises/A+ implementation in TypeScript with the ability to break the chain | 1.1 |
typescript-deferred | A tiny Promises/A+ implementation written in Typescript | 1.1 |
vow | Promises/A+ implementation | 1.0 |
vPromise | Apache 2.0 Licensed, Promises/A+ implementation | 1.1 |
WeePromise | An ultra light (<1k minified/gzipped) Promises/A+ implementation | 1.1 |
Welsh | A+ Promises and Deferreds à la Twisted | 1.1 |
when | cujoJS's promise implementation and async toolkit | 1.1 |
y-resolver | Implementation of a backwards compatible extension to the Promises/A+ spec | 1.1 |
yaku | A fast, lightweight, error friendly and ES6 compatible implementation (~3.5KB) | 1.1 |
yapa | Yet another Promises/A+ implementation | 1.0 |
yapi.js | Yet another Promises/A+ implementation which works in both browser and node | 1.1 |
Zousan | A lightning fast, very small (<1k) Promises/A+ 1.1 Implementation (MIT license) | 1.1 |
zpromise | Simple Promises/A+ implementation, good for learning | 1.0 |
Implementation | Description | Spec Version |
---|---|---|
Core | A fine foundation for JavaScript projects | 1.0 |
Hprose | Hprose is a Serialization and RPC library with Promise/A+ implementation. | 1.1 |
nbd.js | Promises as an inheritable trait from nbd.js | 1.1 |
Orion Deferred | From the Orion library | 1.1 |
promesse | Emily's Promise/A+ | 1.0 |
YUI | YUI is a free, open source JavaScript library for building richly interactive web applications | 1.0 |
jQuery (3.0 or newer) | jQuery is a fast, small, and feature-rich JavaScript library dealing with HTML document traversal, manipulation, event handling, animation, and Ajax. | 1.1 |
zone.js(0.7.7 or newer) | A Zone is an execution context that persists across async tasks. | 1.1 |
We've been excited to discover that the popularity of Promises/A+ has led to a number of implementations in other languages besides JavaScript. Although these don't necessarily match the exact semantics of the spec due to differing language capabilities, and we can't verify them against our JavaScript test suite directly, it's still very exciting to have such a strong community and we want to showcase these efforts.
Language | Implementation | Description |
---|---|---|
ActionScript | CodeCatalyst/promise-as3 | Promises/A+ compliant implementation in ActionScript 3.0 |
Python | promise | A clean and generic implementation of the Promises/A+ specification in Python |
Python | xogeny/aplus | An implementation of the Promises/A+ specification and test suite in Python |
Objective-C | PromiseKit | A very simple and lightweight Objective-C framework based on Promises/A+ specification |
Objective-C | RXPromise | An Objective-C Class which implements the Promises/A+ specification |
Objective-C | SHXPromise | A lightweight implementation of Promises/A+ for iOS and OS X |
Swift | FutureLib | A pure Swift 2 library implementing futures and promises, inspired by Scala |
Swift | Then | A simple Promises/A+ implementation in Swift using associated Result enum and generics |
Perl | stevan/promises-perl | An implementation of the Promises/A+ pattern for asynchronous programming in Perl |
Perl | alexbyk/perl-evo | A framework with non-recursive implementation of the Promises/A+ Role (for any Event Loop) |
Perl | kraih/mojo | A web framework whose event loop features an implementation of the Promises/A+ specification |
QML | Quick Promise | Promises/A+ compliant implementation in QML |
C# | Real-Serious-Games/c-sharp-promise | An unit-tested implementation of the Promises/A+ pattern for asynchronous programming in C# |
PHP | Guzzle Promises | Promises/A+ implementation in PHP that handles promise chaining and resolution iteratively, allowing for "infinite" promise chaining, while keeping the stack size constant. |
PHP | Promise PHP Library | This is a Promises/A+ implementation in PHP. This handles promise chaining immutably until all context handler is all gone from execution context. |