Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sergtitov/NodeJS-Learning

This page contains collection of curated links to blog posts, articles, videos, tutorials, books, frameworks, modules, IDEs, testing tools, hosting providers, etc. to help you learn Node.js and keep up to date.
https://github.com/sergtitov/NodeJS-Learning

Last synced: about 2 months ago
JSON representation

This page contains collection of curated links to blog posts, articles, videos, tutorials, books, frameworks, modules, IDEs, testing tools, hosting providers, etc. to help you learn Node.js and keep up to date.

Awesome Lists containing this project

README

        

NodeJS-Learning
===============
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/sergtitov/NodeJS-Learning?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

Learning node.js made easy. This page contains collection of curated links to blog posts, articles, videos, tutorials, books, frameworks, modules, IDEs, testing tools, hosting providers, etc. to help you learn Node.js and keep up to date.

It was just created and will be actively updated. Please fork and submit your pull-requests, if you would like to contribute. Thanks!

## Similar resources in other languages

[Chinese](https://github.com/youyudehexie/node123) - fantastic list of Chinese resources.

## Installation

Go to http://nodejs.org/, download node.js installer and follow instructions. Mac OS, Windows, and Linux are supported.

## JavaScript

To use Node.js you need to have a decent understanding of JavaScript language.
- [Codecademy - JS](http://www.codecademy.com/tracks/javascript) - Good for practicing and learning syntax.
- [Crockford's videos](http://javascript.crockford.com/)
- [Eloquent JavaScript](http://eloquentjavascript.net/)
- [Essential JavaScript Design Patterns For Beginners](http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/)
- [Advanced JavaScript Fundamentals](http://blog.buymeasoda.com/advanced-javascript-fundamentals/)
- [Understand JavaScript Closures With Ease](http://javascriptissexy.com/understand-javascript-closures-with-ease/)
- [JavaScript garden](http://bonsaiden.github.com/JavaScript-Garden/)
- [JavaScript Patterns Book](http://oreilly.com/catalog/9780596806767)
- [JavaScript: The Good Parts Book](http://oreilly.com/catalog/9780596517748/)
- [JavaScript Promises](https://web.dev/promises/)
- [JavaScript Guide](https://www.scaler.com/topics/javascript/)

## Development Tools/IDEs

- [Yeoman](http://yeoman.io/) - Project and modules generator
- [Gulp](http://gulpjs.com/) - Task runner/build system
- [Grunt]() - Task runner/build system
- [WebStorm/PHPStorm](http://www.jetbrains.com/webstorm/) - popular and extremely powerful IDE for coding web applications. Paid but you can get it for free , if you are an open-source developer (requierd an application approval).
- [Node.js Tools for Visual Studio](https://nodejstools.codeplex.com/) - see [blog post](http://www.hanselman.com/blog/IntroducingNodejsToolsForVisualStudio.aspx) from team member Scott Hanselman.
- NetBeans with [Node.js plugin](http://plugins.netbeans.org/plugin/36653/nodejs)
- [Nodejs Sublime Text 2 Package](https://github.com/tanepiper/SublimeText-Nodejs) - a set of code completion, scripts and tools to work with Node.js.
- [WebMatrix](http://www.microsoft.com/web/webmatrix/) - is a free, lightweight, cloud-connected web development tool from Microsoft.
- [CodeRunner](http://krillapps.com/coderunner/) - Mac only paid IDE.
- [Komodo](http://www.activestate.com/komodo-ide/features) - full-featured IDE from ActiveState is paid but there is also lean free version [Komodo Edit](http://www.activestate.com/komodo-edit).
- [Nide](http://coreh.github.io/nide/) - is a web-based IDE for Node.JS that can run locally or on a remote server. Available both as a command-line tool and as a standalone Mac app.
- [Nodeclipse & Enide](http://www.nodeclipse.org/) - is free open-source IDE based on Eclipse.
- [Aptana Studio](http://www.aptana.com/)
- [Scripted](https://github.com/scripted-editor/scripted)
- [Brackets](http://brackets.io/)
- [Visual Studio Code](https://code.visualstudio.com/)
### Online

- [Cloud9](https://c9.io/) - cloud-based IDE with native support for development of Node.js applications including debugging and other features. Note that you can also [install it locally](http://www.cambus.net/setting-up-a-node-js-development-environment-with-npm-and-cloud9-ide-installed-locally/).
- [Nitrous.io](https://www.nitrous.io/) - is both an IDE and environment in the cloud. Has both online and desktop versions. Paid.
- [Koding](https://koding.com) - offers you a free rootable VM with Node. Also you can work on the same code with your friends.
- [Cloud IDE (a.k.a eXo Cloud IDE, a.k.a codenvy)](https://codenvy.com/) - cloud development IDE and environemnt with continuous integration and other features. Offers both hosted and on-premises solutions.

## Hosting Providers

- [Nodejitsu](https://www.nodejitsu.com/) - hosting, databases and private NPM. Free for Open Source.
- [OpenShift](https://www.openshift.com/developers/node-js)
- [Heroku](https://devcenter.heroku.com/articles/getting-started-with-nodejs) - Dead simple to use.
- [Modulus](https://modulus.io/) -Scalable application platform (PaaS) for developers, offering Node.js hosting, MongoDB, and performance analytics in the cloud.
- [Codio](https://codio.com/) - Powerful web based IDE, free for public projects
- [Digital Ocean](https://www.digitalocean.com) - cloud infrastructure provider

## Fundamentals

- [Node.js FUNdamentals: A Concise Overview of The Main Concepts](http://webapplog.com/node-js-fundamentals-a-concise-overview-of-the-main-concepts)
- Why Node.js
- [Why The Hell Would I Use Node.js? A Case-by-Case Introduction](http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js)
- [Why I use Node.js?](http://pettergraff.blogspot.com/2013/01/why-node.html)
- [PHP vs. Node.js](http://webapplog.com/php-vs-node-js/)
- Migrating to Node.js
- [Dismantling the Monoliths](https://engineering.groupon.com/2013/misc/i-tier-dismantling-the-monoliths/)
- [Node.js at PayPal](https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/)
- [Official Documentation](http://nodejs.org/api/)
- CommonJS Module System
- http://docs.nodejitsu.com/articles/getting-started/what-is-require)
- http://pages.citebite.com/i9e9e4d1yxip
- [Node.js Modules Official Documentation](http://nodejs.org/api/modules.html)
- [Managing module dependencies](http://howtonode.org/managing-module-dependencies)
- [Using Node's Event Module](http://code.tutsplus.com/tutorials/using-nodes-event-module--net-35941)
- [Understanding exports vs. module.exports](http://openmymind.net/2012/2/3/Node-Require-and-Exports/)

## Asynchronous Programming

- [Understanding the node.js event loop](http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/)

- [Avoiding Callback Hell with Async.js](http://www.slideshare.net/cacois/avoiding-callback-hell-with-asyncjs)
- Promises
- [Asynchronous Control Flow with Promises](http://howtonode.org/promises)
- [Promises with Q](http://www.slideshare.net/async_io/javascript-promisesq-library-17206726)
- [ES6 Generators and Preventing Callback Hell](http://www.sitepoint.com/javascript-generators-preventing-callback-hell/)
- [Managing Node.js Callback Hell with Promises, Generators and Other Approaches](http://strongloop.com/strongblog/node-js-callback-hell-promises-generators/?utm_source=nodeweekly&utm_medium=email)

## Node Package Manager (npm)

- [What is npm?](http://docs.nodejitsu.com/articles/getting-started/npm/what-is-npm)
- [Introduction to npm](http://howtonode.org/introduction-to-npm)
- Explore [registered public npm modules](https://npmjs.org/)
- [How to publish your module to npm?](https://gist.github.com/coolaj86/1318304)
- Node.js tips and tricks
- [9 Quick Tips About npm](http://blog.ponyfoo.com/2013/12/14/9-quick-tips-about-npm)
- [NPM tricks](http://www.devthought.com/2012/02/17/npm-tricks/)
- [Task automation with npm run](http://substack.net/task_automation_with_npm_run)
- Private NPM approches
- [How to create a private npm.js repository](http://clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository)
- [A hierarchical npm-registry proxy that allows to support private npm repos without replicating the entire public registry](https://github.com/paypal/kappa)
- [A lazy local cache for npm](https://github.com/mixu/npm_lazy)

## Debugging

- [What’s New in Node.js v0.12: Debugging Clustered Apps with Node-Inspector](http://strongloop.com/strongblog/whats-new-nodejs-v0-12-debugging-clusters/)
- [Video: Debugging Node.js with node-inspector](http://www.youtube.com/watch?v=03qGA-GJXjI)
- [node-inspector](https://github.com/node-inspector/node-inspector)
- [Using Eclipse as Node Applications Debugger](https://github.com/joyent/node/wiki/Using-Eclipse-as-Node-Applications-Debugger)

## Tutorials

- http://nodeschool.io/
- [Node js tutorial](https://hackr.io/tutorials/learn-node-js) - A user ranked online tutorials site hosting many relavant free and paid tutorials to learn Node js online.
- https://www.codeschool.com/courses/real-time-web-with-nodejs
- [The dead-simple step-by-step guide for front-end developers to getting up and running with node.js, express, jade, and mongodb](http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/)
- [Make a RESTful todo app](http://webapplog.com/todo-app-with-express-jsnode-js-and-mongodb/)
- [Make a simple CRUD app](http://mherman.org/blog/2015/08/24/node-express-swig-mongo-primer/)
- [NodeJS and JavaScript for 2016 Onwards](https://vinkaga.gitlab.io/learn-node/) - Slides based tutorial for server side JavaScript with NodeJS 6.x (beginner to intermediate).
- [How to add an API-Based CMS to NodeJS](https://www.storyblok.com/tp/node-js-cms) - How to integrate Storyblok, a component composer and headless CMS, to your Express.js app in a few easy steps.
- [NodeJS Courses at Classpert](https://classpert.com/nodejs) - List of over 70 NodeJS Courses (free and paid) at Classpert Online Course Search

### Authentication
- [Authentication](http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local) - Goes over local, facebook & twitter authentication.

### Command line
- [Command line tool](http://javascriptplayground.com/blog/2012/08/writing-a-command-line-node-tool/)

## Blog posts/articles

- [Node.js Production Practices](http://www.joyent.com/developers/node) - fantastic overview of design, deployment and debugging technics from [Joyent](http://www.joyent.com/).

## Videos

- [Introduction to Node.js with Ryan Dahl](http://www.youtube.com/watch?v=jo_B4LTHi3I) - Ryan Dahl is a Node.js creator. Must see.
- [Alex Ford: Node.js & Express 101](http://www.youtube.com/watch?v=BN0JlMZCtNU)
- [142 conference presentation Videos](http://lanyrd.com/topics/nodejs/video/) from [Lanyard.com](http://lanyrd.com/)
- [Node.js video tutorials by Pedro Teixeira](http://nodetuts.com/)
- [Collection of node.js video tutorials](http://vidinterest.com/playlist/enbeeone3/nodejs-tutorial-videos) at [vidinterest.com](vidinterest.com)
- [Node.js has Arrived!](http://vimeo.com/70603516) - In this video, Node.js core committer Bert Belder discusses some of the new features in Node v0.12 including Streams3, VM improvements, cluster round-robin, execSync and profiling APIs.
- [Getting started with node.js](http://channel9.msdn.com/Series/Visual-Studio-Online-Monaco/Getting-started-with-nodejs) at [channel9.msdn.com](channel9.msdn.com)
-[Basics of Express and Mongo](http://www.youtube.com/watch?v=eD2I0zAjM5g&list=PLw2e3dFxewkLL73aUzOP-efQnXOTtMLbY)
-[Getting Started with Sails.js](http://irlnathan.github.io/sailscasts/)
-[History of Node.js](http://www.youtube.com/watch?v=SAc0vQCC6UQ)
- [StrongLoop Talks](https://strongloop.com/node-js/videos/)

## Free Courses
- [Startup engineering by Stanford](https://www.coursera.org/course/startup)
- [NodeJS Exercises for Beginners](http://paqmind.com/courses/nodejs-beginner/)

## Paid Courses
- [Real-time Web with Node.js](https://www.codeschool.com/courses/real-time-web-with-nodejs) from [codeschool.com](https://www.codeschool.com/)
- [Getting Started with Node.js and the NPM Package Manager](http://teamtreehouse.com/library/code-racer/getting-started-with-nodejs-and-the-npm-package-manager) from [Treehouse](http://teamtreehouse.com/).
- [Node.js First Look](http://www.lynda.com/Nodejs-tutorials/Nodejs-First-Look/101554-2.html)(beginner) and [Node.js Essential Training](http://www.lynda.com/JavaScript-tutorials/Nodejs-Essential-Training/141132-2.html)(advanced) at [lynda.com](http://www.lynda.com/Node-js-training-tutorials/1283-0.html)
- [Meet Node.js](https://peepcode.com/products/nodejs-i) and [Full-stack Node.js](https://peepcode.com/products/full-stack-nodejs-i) at [peepcode.com](peepcode.com/)
- Node.js courses at Pluralsight
- [Meet Node.js](http://pluralsight.com/training/courses/TableOfContents?courseName=meet-nodejs)
- [Introduction to Node.js](http://pluralsight.com/training/courses/TableOfContents?courseName=node-intro)
- [Full Stack Node.js](http://pluralsight.com/training/courses/TableOfContents?courseName=full-stack-nodejs)
- [Building AngularJS and Node.js Apps with the MEAN Stack](http://pluralsight.com/training/courses/TableOfContents?courseName=building-angularjs-nodejs-apps-mean)
- [Web Development with ExpressJS](http://pluralsight.com/training/courses/TableOfContents?courseName=expressjs)
- [Node on Windows and Azure](http://pluralsight.com/training/courses/TableOfContents?courseName=node-on-azure)

## Free Books

- [The Node Beginner Book](http://www.nodebeginner.org/#about)
- [The Art of Node](https://github.com/maxogden/art-of-node)
- [JavaScript and Node FUNdamentals](https://leanpub.com/jsfun/read)
- [Mixu's Node book](http://book.mixu.net/node/)
- [A collection of Node.js books](http://book.rednode.cn/)
- [Mastering Node.js](http://visionmedia.github.io/masteringnode/)

## Paid Books

- [Node.js in Action](http://www.amazon.com/Node-js-Action-Mike-Cantelon/dp/1617290572/ref=sr_1_1?s=books&ie=UTF8&qid=1391739265&sr=1-1&keywords=%22node.js%22)
- [Learning Node.js: A Hands-On Guide to Building Web Applications in JavaScript Marc Wandschneide](http://www.amazon.com/Learning-Node-js-Hands-On-Applications-JavaScript/dp/0321910575/ref=sr_1_1?ie=UTF8&qid=1394518585&sr=8-1&keywords=learning+node.js)
- [JavaScript on the Server Using Node.js and Express](http://www.amazon.com/JavaScript-Server-Node-js-Express-Development/dp/0956737080/ref=sr_1_20?s=books&ie=UTF8&qid=1391739340&sr=1-20&keywords=%22node.js%22)
- [Express.js Guide](http://www.amazon.com/Express-js-Guide-Comprehensive-Book/dp/1494269279/ref=sr_1_2?s=books&ie=UTF8&qid=1391740486&sr=1-2&keywords=%22node.js%22+express)
- [Node js The Right Way](http://www.amazon.com/Node-js-Right-Way-Server-Side-JavaScript/dp/1937785734/ref=sr_1_1?ie=UTF8&qid=1393208626&sr=8-1&keywords=Node+js+The+Right+Way.)
- [Learn JS](http://learnjs.io/)
- [Get Programming with Node.js](https://www.manning.com/books/get-programming-with-node-js)

## Frameworks

- Sinatra like:
- [connect](https://github.com/senchalabs/connect) - an extensible HTTP server framework for Node.js using "plugins" known as middleware.
- [express.js](http://expressjs.com/guide.html) - a Sinatra inspired Web development framework for Node.js.
- [hapi](https://github.com/spumko/hapi) - a rich framework for building Web applications and services.
- [express.io](https://github.com/techpines/express.io) = Express + Socket.io.
- [koa](https://github.com/koajs/koa) - an expressive middleware for Node.js using generators.
- [Flatiron](https://github.com/flatiron/flatiron) - framework components for Node.js and a browser.
- [total.js](https://github.com/totaljs/framework) - a Web application framework for creating rich Web sites and Web services.
- MVC:
- [Geddy](http://geddyjs.org) - a simple, structured Web framework for Node.js.
- [Sails.js](http://sailsjs.org) - a realtime MVC Framework for Node.js.
- [Compound](http://compoundjs.com/) - the compound formula is Express + Structure + Extensions.
- Full stack:
- [meteor.js](https://github.com/meteor/meteor) - Meteor is an ultra-simple environment for building modern Web applications. Built using Node.js, Meteor is a framework on its own. Please see an [amazing list of Meteor resources](http://yauh.de/articles/376/best-learning-resources-for-meteorjs) for more information.
- [Derby](https://github.com/codeparty/derby) - the MVC framework making it easy to write realtime, collaborative applications that run in both Node.js and browsers.
- [SocketStream](https://github.com/socketstream/socketstream) - A fast, modular Node.js Web framework dedicated to building realtime single-page applications.

If you would like to learn more about Node.js frameworks, please visit [nodeframework.com](http://nodeframework.com/) and [nodewebmodules.com](http://nodewebmodules.com).

## CLI TOOLS

- [Nodemon](http://remysharp.com/2014/01/20/nodemon-1-0/)

## CMS
- [Ghost](https://ghost.org/)
- [Keystone](http://keystonejs.com/)
- [Calipso](http://calip.so/)
- [Hatch](http://hatchjs.com/)

## Static Site Generators
- [Hexo](http://hexo.io/) - fast, simple & powerful blog framework.
- [Metalsmith](http://www.metalsmith.io/) - extremely simple, pluggable static site generator.
- [Harp](http://harpjs.com/) - static web server with built-in preprocessing.
- [Assemble](http://assemble.io/) - static site generator for Grunt.js, Yeoman and Node.js.
- [Wheat](https://github.com/creationix/wheat) - a blog engine for coders written in node.JS.
- [Punch](https://github.com/laktek/punch) - a fun and easy way to build modern websites.
- [Blacksmith](https://github.com/flatiron/blacksmith) - generic static site generator built using flatiron, plates, and marked.
- [Poet](https://github.com/jsantell/poet) - a node.js blog engine.

> See extensive collection of Static Site Generators including other languages at http://www.staticgen.com/

## Libraries

- [socket.io](https://github.com/LearnBoost/socket.io) - a realtime application framework for Node.JS, with HTML5 WebSockets and cross-browser fallbacks support.
- [mongoose](https://github.com/LearnBoost/mongoose) - MongoDB object modeling designed to work in an asynchronous environment.
- [winston](http://github.com/flatiron/winston) - a multi-transport asynchronous logging library for Node.js
- [passport](https://github.com/jaredhanson/passport) - simple, unobtrusive authentication for Node.js.
- [async](https://github.com/caolan/async) - asynchronous utilities for Node and the browser.
- [Q](https://github.com/kriskowal/q) - a tool for making and composing asynchronous promises in JavaScript.
- [co](https://github.com/visionmedia/co) - the ultimate generator based flow-control goodness for nodejs;
- [jade](https://github.com/visionmedia/jade) - Jade - a robust, elegant, feature-rich template engine for Node.js.
- [ejs](https://github.com/visionmedia/ejs) - embedded JavaScript templates for Node.js.
- [lodash](https://github.com/lodash/lodash) - a utility library delivering consistency, customization, performance, and extras.
- [request](https://github.com/mikeal/request) - a simplified HTTP request client.
- [config](https://github.com/lorenwest/node-config) - a runtime configuration for Node.js. modules.
- [joi](https://www.npmjs.com/package/joi) - The most powerful schema description language and data validator for JavaScript.

### Authentication and Security
- [Passport](http://passportjs.org/) - simple, unobtrusive authentication for Node.js that supports OpenID and OAuth.

#
## Testing

Read about various approaches to testing Node.js code:

- [Testing in Node.js](http://code.tutsplus.com/tutorials/testing-in-nodejs--net-35018)
- [Testing NodeJS with Mocha, Should, Sinon, and JSCoverage](http://www.slideshare.net/mlilley/testing-node-js-with-mocha)
- [Setting up Mocha and JSCoverage](http://www.seejohncode.com/2012/03/13/setting-up-mocha-jscoverage/)
- [Acceptance testing with supertest](http://www.scotchmedia.com/tutorials/express/authentication/2/02)
- [Testing node.js applications with Jasmine](http://blog.codeship.io/2013/08/20/testing-tuesday-19-how-to-test-node-js-applications-with-jasmine.html)
- [Mocking Dependencies using [rewire]](http://howtonode.org/mocking-private-dependencies-using-rewire)
- [Unit Testing and TDD in Node.js – Part 1](https://www.codementor.io/nodejs/tutorial/unit-testing-nodejs-tdd-mocha-sinon), [Part 2](https://www.codementor.io/nodejs/tutorial/unit-testing-tdd-node-js-nockjs-part-2)

Some popular testing frameworks:

- [mocha](https://github.com/visionmedia/mocha) - a simple, flexible JavaScript test framework for Node.js and a browser. (BDD, TDD, QUnit styles via interfaces).
- [jasmin-node](https://github.com/mhevery/jasmine-node) - integration of the Jasmine Spec framework with Node.js.
- [sinon](https://github.com/cjohansen/Sinon.JS) - test spies, stubs, and mocks for JavaScript.
- [chai](https://github.com/chaijs/chai) - a BDD / TDD assertion framework for Node.js and a browser.
- [supertest](https://github.com/visionmedia/supertest) - a super-agent driven library for testing Node.js HTTP servers using a fluent API.
- [rewire](https://github.com/jhnns/rewire) - a dependency injection for Node.js applications.
- [node-jscoverage](https://github.com/visionmedia/node-jscoverage) - JSCoverage for Node.js.

## Keep up to date

### What To Read

### Communities/Groups

- [Google Node.js Group](https://groups.google.com/forum/#!forum/nodejs)
- [Google+ Node.js Community](https://plus.google.com/communities/115365528781941125390)
- [CNode](http://cnodejs.org/) - Node.js professional Chinese community
- [Node.js on Reddit](http://www.reddit.com/r/node/)
- [Stackoverflow Node.js tag](http://stackoverflow.com/questions/tagged/node.js)
- [NodeJsForums.com](http://www.nodejsforums.com)
- IRC - For real-time chat about Node development go to [irc.freenode.net](irc.freenode.net) in the **#node.js** channel with an [IRC client](http://colloquy.info/) or connect in your web browser to the channel using [freenode's WebChat](http://webchat.freenode.net/?channels=node.js).

## Blogs/News

- ["How To Node" blog](http://howtonode.org/)
- [Node.js Weekly](http://nodeweekly.com/) - an email list that gathers up the latest events and news from around the Node.js community.
- [NodeUp](http://nodeup.com/) - a podcast covering the latest Node news in the community.

### Who to Follow

- [TJ Holowachuk](https://github.com/visionmedia) - express, Jade, Mocha, Stylus
- [Isaac Z. Schlueter](https://github.com/isaacs) - maintainer of Node.js / NPM
- [Mikeal Rogers](https://github.com/mikeal) - Request
- [James Haliday "substack"](https://github.com/substack) - Browserify, dnode, Optimist
- [Guillermo Rauch](https://github.com/guille) - Socket.IO

### Node mavens

You can find the most famous Node.js developer at [Nodemavens](http://nodemavens.com/).

## Resource
- [Rednode garden](http://yuan.rednode.cn/resource)
- [Nodecloud](http://nodecloud.com)
- [Hackr.io](https://hackr.io/tutorials/learn-node-js)

## Credits

Inspired by amazing [AngularJS-Learning](https://github.com/jmcunningham/AngularJS-Learning)

## Contributors

- [Eugene Tsypkin](https://github.com/jhony-chikens)
- [Pavel Voronin](https://github.com/voroninpaul)
- [jacksongeller](https://github.com/jacksongeller)
- [Pana Wang](https://github.com/Pana)
- [Stephen Keep](https://github.com/stephenkeep)

[co]: https://github.com/visionmedia/co

## License

(The MIT License)

Copyright (c) 2014 Sergey Titov

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.