This post was written for Nodejitsu blog and is crossposted here. Nodejitsu loved what I was doing at and is now supporting the project.

hashring (GitHub: 3rd-Eden/node-hashring, License: MIT) by Arnout Kazemier is a JavaScript implementation of the Consistent Hashing algorythm. If you don’t know exactly what that is and not into reading dry Wikipedia articles, watch this 3 minute video for a pretty good overview of what’s going on.

hashring also compatible with the original libketama library that was developed at as well as with the hash_ring module for Python.

npm install hashring


'use strict';

var HashRing = require('hashring');

var ring = new HashRing({
  '': { vnodes: 50 },
  '': { vnodes: 200 },
  '': { vnodes: 100 }



console.log(ring.range('http://...', 2));
// [ '', '' ]

This can be immensly useful for caching or distributing data to multiple servers. Weights or vnodes are used to give servers a bigger distribution in the hashring. For example if you have 3 servers where you want to distribute your keys over but not all servers are equal in capacity as 2 of those machines have 200mb of memory and the other has 3.2 gig of memory. The last server is substantially bigger and there for should receive a greater distrubtion in the ring.

What Else?

Unfortunately hashring relies on C imlementation and therefore can’t be used in the browsers.

The module now requires a C++ compiler to be installed on your server as hashing the value requires support for 64bit bitshifting and JavaScript as a language only supports 32bit bitshifting.

Checkout the runnable example and github example repository. Have you seen other modules along these lines? Please let us know in the comments!