Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
couchapp bits of
JavaScript Other


Build Status

The design doc for The npm Registry CouchApp


You need CouchDB version 1.4.0 or higher. 1.5.0 or higher is best.

Once you have CouchDB installed, create a new database:

curl -X PUT http://localhost:5984/registry

You'll need the following entries added in your local.ini

public_fields = appdotnet, avatar, avatarMedium, avatarLarge, date, email, fields, freenode, fullname, github, homepage, name, roles, twitter, type, _id, _rev
users_db_public = true

secure_rewrites = false

delayed_commits = false

Clone the repository if you haven't already, and cd into it:

git clone git://
cd npm-registry-couchapp

Now install the stuff:

npm install

Sync the ddoc to _design/scratch

npm start \

Next, make sure that views are loaded:

npm run load \

And finally, copy the ddoc from _design/scratch to _design/app

npm run copy \

Of course, you can avoid the command-line flag by setting it in your ~/.npmrc file:


The _ prevents any other packages from seeing the setting (with a password) in their environment when npm runs scripts for those other packages.

Replicating the Registry

To replicate the registry without attachments, you can point your CouchDB replicator at Note that attachments for public packages will still be loaded from the public location, but anything you publish into your private registry will stay private.

To replicate the registry with attachments, consider using npm-fullfat-registry. The fullfatdb CouchDB instance is deprecated.

Using the registry with the npm client

With the setup so far, you can point the npm client at the registry by putting this in your ~/.npmrc file:

registry = http://localhost:5984/registry/_design/app/_rewrite

You can also set the npm registry config property like:

npm config set \

Or you can simple override the registry config on each call:

npm \
  --registry=http://localhost:5984/registry/_design/app/_rewrite \
  install <package>

Optional: top-of-host urls

To be snazzier, add a vhost config:

[vhosts] = /registry/_design/app/_rewrite

Where is the hostname where you're running the thing, and 5984 is the port that CouchDB is running on. If you're running on port 80, then omit the port altogether.

Then for example you can reference the repository like so:

npm config set registry
Something went wrong with that request. Please try again.