Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Backbone.js sync for CouchDB

branch: master

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 test
Octocat-spinner-32 backbone-couch.js
Octocat-spinner-32 backbone.json
Octocat-spinner-32 couch.js
Octocat-spinner-32 index.js
Octocat-spinner-32 package.json

Backbone Couch

Overrides for Backbone to use CouchDB for Model persistence. Intended for server-side use of Backbone like in Bones.


npm install backbone-couch


var Backbone = require('backbone');

// Create a new backbone-couch handler for a database 'documents'.
var couch = require('backbone-couch')({
    host: '',
    port: '5984',
    name: 'documents'

// Create database, push default design documents to it and
// assign sync method to Backbone.
couch.install(function(err) {
    Backbone.sync = couch.sync;

// Backbone.sync will now load and save models from a 'documents' couch db.


backbone-couch stores models in using the model.url as its _id. By default, Collections retrieve models by matching the Collection url against the initial portion of the Model url. See backbone.json for the default design document and collection view.

var orange = new FruitModel({id: 'orange'});
var apple = new FruitModel({id: 'apple'});
var banana = new FruitModel({id: 'banana'});

console.log(orange.url()); // fruits/orange
console.log(apple.url());  // fruits/apple
console.log(banana.url()); // fruits/banana

var fruits = new FruitCollection();

console.log(fruits.url);   // fruits

fruits.fetch();            // retrieves orange, apple, banana

To override the default design doc with your own special sauce use the doc option when calling couch.install().

// Pass a filepath to your design doc.
couch.install({doc: '/path/to/my/doc.json'}, callback);

// Or provide a literal js object directly.
couch.install({doc: {
    _id: '_design/backbone',
    language: 'javascript'
}, callback);

Your design doc should use _design/backbone as its _id. Collections will be called against this design doc using their url. For example, if you have a Collection /blog/recent, your design doc should provide a rewrite rule to respond to this path:

    "views": {
        "recent": {
            "map": "function(doc) { emit(doc._id, doc._id) }"
    "rewrites": [
            "from": "/blog/recent",
            "to": "_view/recent",
            "query": {
                "limit": 10
                "include_docs": true

See the rewrite handler docs or this blog post for more info on design doc rewrites.

Run tests

Requires Expresso. Tested with version 0.7.6.

cd backbone-couch/
npm test
Something went wrong with that request. Please try again.