node package manager


Riak Protocol Buffers Model

Riak Models (that talk to Riak using Protocol Buffers).

(Uses riak-pb underneath)


$ npm install git://


var RiakModel = require('riak-pb-model');

Instantiate a Model

A model corresponds to a bucket:

var users = RiakModel({
  bucket: 'users'

Here are the valid constructor options:

  • nodes: array containing the nodes it connects to. Each node may contain:
    • host
    • port
  • bucket: the Riak bucket this model will use to store docs in
  • indexes: array of objects, each containing either one of the properties
    • key: a string indicating which doc attribute contains the key
    • composedKey: an array of strings indicating which attributes contain the key

Connecting first

You can create a global Riak connection before instantiating any model:

var riakConnection = RiakModel.connect({
  nodes: [
    {host: 'localhost', port: 8087}
/// now use that connection when instantiating the models 
var users = RiakModel(riakConnection, {
  bucket: 'users'

Using Indexes


var modelOptions = {
  bucket: 'users',
  indexes: [
    { key: 'email'}
var users = RiakModel(modelOptions);
users.findAllByEmail('', function(err, users) {
  // ... 


create(doc, cb); // cb = function(err, doc)

get(id, cb); // cb = function(err, doc)

getAllKeys(cb); // cb = function(err, doc)

getAll(cb); // cb = function(err, docs)

getAllStreaming(); // returns readable stream

update(doc, cb); // cb = function(err, doc)

save(doc, cb); // create or update; cb = function(err, doc)

del(id, cb); // cb = function(err)

del(doc, cb); // cb = function(err)

destroy(id, cb); // cb = function(err)

destroy(doc, cb); // cb = function(err)

removeAll(cb); // cb = function(err)

Dynamic methods, depending on the indexes you defined in the model constructor:

findAllByX(x, cb); // cb = function(err, docs)

findAllByFirstnameAndLastname(firstName, lastName, cb); // cb = function(err, docs)