The minimal JavaScript package manager.
Pull request Compare This branch is 129 commits behind jackfranklin:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Minimalist package manager – quickly grab a copy of your favourite library.

Built with ♥ by @jackfranklin and @phuu.

Build Status

Supports Node 0.10.x and 0.8.x.


Install pulldown globally using npm:

$ npm install -g pulldown

This gives you a pulldown command to use on your command line:

$ pulldown

  Usage: pulldown <identifier>[::<file>] [<identifier>[::<file>], ...] [options]

  An <identifier> can be a URL, a library name or a set.


    -o, --output  output directory

  Example usage:

    pulldown jquery             # Downloads jQuery
    pulldown jquery::jq.js      # Downloads jQuery to jq.js
    pulldown jquery angular.js  # Downloads jQuery and Angular.js
    pulldown backbone           # Downloads jQuery, Underscore.js and Backbone.js
    pulldown backbone -o js     # Downloads same as above, but into js/

Downloading Libraries

Once that's done, downloading jQuery is as simple as:

$ pulldown jquery
->  Success: was downloaded to jquery.min.js

Pulldown works by searching on the cdnjs site for what you asked it for.

Custom Downloads

Of course, not everything you might want to download exists on cdnjs. You can add your own custom downloads to ~/.pulldown.json. This file might look something like this:

  "mycustommodule": ""

Then you can run:

$ pulldown mycustommodule
->  Success: was downloaded to module.js

Pulldown will know where to look. Pulldown will always look in your local ~/.pulldown.json file before searching. This means if you want a particular version of a library you can put it into your local file, and Pulldown will always use that.

Sets on the Server

Pulldown comes with the notion of sets. Sets are a collection of libraries.

For example, a Backbone application typically requires 3 libraries:

  • Backbone
  • jQuery
  • Underscore

Rather than download all three yourself, Pulldown has you covered:

$ pulldown backbone
->  Success: was downloaded to underscore-min.js
->  Success: was downloaded to backbone-min.js
->  Success: was downloaded to jquery.min.js

We define sets on our server. When you hit our server asking for backbone, we give you back jQuery, Underscore and Backbone. If you think there's more sets we should support, let us know.

Custom Sets

You can define custom sets in your ~/.pulldown.json. They look like this:

  "backboneapp": ["jquery", "underscore", "backbone.js"]

Here I define a custom set, backboneapp, that will download jQuery, Underscore and Backbone. This is an example we have on the server, so you don't need to, but it's useful for setting up common sets of libraries you use together. Downloading them all becomes as simple as:

$ pulldown backboneapp
->  Success: was downloaded to underscore-min.js
->  Success: was downloaded to backbone-min.js
->  Success: was downloaded to jquery.min.js

Output Directories

You can tell Pulldown to save what it downloads into a directory, that will be created if it doesn't exist:

$ pulldown backbone -o foo/
->  Success: was downloaded to foo/underscore-min.js
->  Success: was downloaded to foo/backbone-min.js
->  Success: was downloaded to foo/jquery.min.js

Custom File Names

If you're downloading something that will resolve to a single file, you can choose the name of the file that will be downloaded using two colons:

$ pulldown jquery::foo.js
->  Success: was downloaded to foo.js


Pulldown supports finding a specific version of a library, and will do its best to find it. Use identifier@version:

$ pulldown jquery@1.7.1
->  Success: was downloaded to jquery.min.js

Pulldown searches cdnjs for it. If it can't find the right version, it'll give you the latest.


$ npm update pulldown -g


The Pulldown source is maintained jointly by @jackfranklin and @phuu. As such, the repositories are spread out:

  • pulldown-api. This powers our server, and is where you can add sets.
  • pulldown-resolve. This resolves search terms to URLs. It takes search a search term and does its best to find a URL.
  • pulldown-middleman. This is a very small API wrapper to query the Pulldown API. It will expand as our API does.
  • pulldown (you're here!). This is the CLI application, and the one you should install if you want to use pulldown.

Running the tests

$ npm install --dev
$ node tests/tests.js



  • swapped to using :: for seperating search term with output name
  • support URLs


  • allow help to be got at through pulldown -h or pulldown --help


  • added a help command (pulldown)
  • don't add zip extension to output path if it is already there


  • support downloading and unzipping of ZIP files.


  • only let the file name be dictated by the user if there's only one file to download


  • avoid downloading the same file more than once if we can avoid it


  • show an error if the search term could not be resolved


  • pass in an output directory to save all files to (pulldown backbone -o foo/)
  • support saving a file to a particular name (pulldown jquery:foo.js)


  • improve Windows support (thanks @sindresorhus)


  • make sure URLs in local JSON file are valid


  • complete rewrite. Too much to document here (see this README for a full briefing on the new pulldown).


  • updated structure of .pulldownrc to allow for specifying the file name
  • fix mkdir showing error if no directory given


  • if you try to install something to a folder that doesn't exist, pulldown will now create it


  • initial release!
  • this is a rewrite and rework of the old nodefetch module, with a better name.