Cross-db ORM for NodeJS!

Multi-database ORM: redis, mongodb, mysql, sqlite, postgres, neo4j.

Download now!


Installation is done using the NodeJS Package Manager (npm). If you don't have npm installed on your system you can download it from To install caminte:

$ sudo npm install caminte -g

Usage overview:

var Schema = require('caminte').Schema;
var schema = new Schema('redis2', {port: 6379}); //port number depends on your configuration
// define models
var Post = schema.define('Post', {
    title:     { type: String, length: 255 },
    content:   { type: Schema.Text },
    date:      { type: Date,    default: },
    published: { type: Boolean, default: false, index: true }

// simplier way to describe model
var User = schema.define('User', {
    name:         String,
    bio:          Schema.Text,
    approved:     Boolean,
    joinedAt:     Date,
    age:          Number

// define any custom method
User.prototype.getNameAndAge = function () {
    return + ', ' + this.age;

// models also accessible in schema:

// setup relationships
User.hasMany(Post,   {as: 'posts',  foreignKey: 'userId'});
// creates instance methods:
// user.posts(conds)
// // like new Post({userId:});
// user.posts.create(data) // build and save

Post.belongsTo(User, {as: 'author', foreignKey: 'userId'});
// creates instance methods:
// -- getter when called with function
// -- sync getter when called without params
// -- setter when called with object

schema.automigrate(); // required only for mysql NOTE: it will drop User and Post tables

// work with models:
var user = new User; (err) {
    var post ={title: 'Hello world'});;

// or just call it as function (with the same result):
var user = User();;

// Common API methods

// just instantiate model
new Post
// save model (of course async)
// all posts
// all posts by user
Post.all({where: {userId:}, order: 'id', limit: 10, skip: 20});
// the same as prev
// get one latest post
Post.findOne({where: {published: true}, order: 'date DESC'}, cb);
// same as new Post({userId:});
// save as Post.create({userId:}, cb);
// find instance by id
User.find(1, cb)
// count instances
User.count([conditions, ]cb)
// destroy instance
// destroy all instances

// Setup validations
User.validatesPresenceOf('name', 'email')
User.validatesLengthOf('password', {min: 5, message: {min: 'Password is too short'}});
User.validatesInclusionOf('gender', {in: ['male', 'female']});
User.validatesExclusionOf('domain', {in: ['www', 'billing', 'admin']});
User.validatesNumericalityOf('age', {int: true});
User.validatesUniquenessOf('email', {message: 'email is not unique'});

user.isValid(function (valid) {
    if (!valid) {
        user.errors // hash of errors {attr: [errmessage, errmessage, ...], attr: ...}


If you have found a bug please write unit test, and make sure all other tests still pass before pushing code to repo.