TypeScript icon, indicating that this package has built-in type declarations

    0.4.0 • Public • Published


    GitHub license Download Status

    IMPORTANT: This is still in early development stage, please report any issue found

    This library is written against ottoman-2.0.0. It is tested against Couchbase 7.0.1 which supports scope and collection

    A Feathers database adapter for Ottoman, an object modeling tool for Couchbase

    $ npm install feathers-ottoman

    Important: feathers-ottoman implements the Feathers Common database adapter API and querying syntax

    This adapter also requires a running Couchbase database server



    Returns a new service instance initialized with the given options. Model has to be a Ottoman model. See the Ottoman Guide for more information on defining your model

    // commonjs
    const service = require('feathers-ottoman');
    // es6 / typescript
    import { service } from 'feathers-ottoman';
    app.use('/messages', service({ Model }));
    app.use('/messages', service({ Model, id, events, paginate, ottoman: { lean, consistency } }));


    • Model (required) - The Ottoman model definition
    • id (optional, default: 'id') - The name of the id field property. Note that the id has to be also define when initializing the Ottoman Model if not using default value
    • events (optional) - A list of custom service events sent by this service
    • paginate (optional) - A pagination object containing a default and max page size
    • whitelist (optional) - A list of additional query parameters to allow
    • multi (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ])
    • ottoman.lean (optional, default: true) - Runs queries faster by returning plain objects instead of Ottoman Model
    • ottoman.consistency (optional, default: NONE) - Define default Search Consistency Strategy

    Note: You can get access to the Ottoman model via this.Model inside a hook and use it as usual. See the Ottoman Guide for more information on defining your model


    Here is an example of a Feathers server with a messages Ottoman service

    $ npm install @feathersjs/feathers @feathersjs/express ottoman feathers-ottoman

    In index.js:

    // Initialize Ottoman connection
    const { Ottoman, getModel, Schema, SearchConsistency } = require('ottoman');
    const ottoman = new Ottoman();
      connectionString: 'couchbase://localhost',
      bucketName: 'messageBucket',
      username: 'user',
      password: 'password',
    const modelOptions = {
      // specify `idKey` if not using default
      // idKey: 'customId',
      scopeName: 'messageScope',
      collectionName: 'messageCollection',
    const schema = new Schema({
      text: { type: String },
    ottoman.model('message', schema, modelOptions);
    // Setup feathers service
    const feathers = require('@feathersjs/feathers');
    const express = require('@feathersjs/express');
    const { Service } = require('feathers-ottoman');
    // Creates an ExpressJS compatible Feathers application
    const app = express(feathers());
    // Parse HTTP JSON bodies
    // Parse URL-encoded params
    app.use(express.urlencoded({ extended: true }));
    // Host static files from the current folder
    // Add REST API support
    // Register a Ottoman message service
    app.use('/messages', new Service({
      Model: getModel('message'),
      // if `idKey` is specify for the Model
      // id: 'customid',
      ottoman: {
        lean: true,
        consistency: SearchConsistency.LOCAL,
      paginate: {
        default: 10,
        max: 100
    // Register a nicer error handler than the default Express one
    // Create a dummy Message
      text: 'Message created on Ottoman server'
    }).then(function(message) {
      console.log('Created messages', message);
    app.listen(3030).on('listening', () => console.log('feathers-ottoman example started'));

    Run the example with node . and go to localhost:3030/messages

    For a complete example, take a look at feathers-ottoman-demo repository


    Ensure index has been created before running the test

    // Run on Couchbase UI > Query
    CREATE PRIMARY INDEX ON `default`:`testBucket`.`testpostscope`.`testpostcollection`


    1. Update package.json and package-lock.json version
    2. Run logchanges
    3. Commit CHANGELOG.md [chore: update CHANGELOG for X.X.X]
    4. Commit package.json and package-lock.json [X.X.X]
    5. Git tag vX.X.X
    6. Run npm publish --dry
    7. Run npm publish
    8. Git push
    9. Create new release in Github


    Copyright (c) 2021

    Licensed under the MIT license.


    npm i feathers-ottoman

    DownloadsWeekly Downloads






    Unpacked Size

    67 kB

    Total Files


    Last publish


    • bwgjoseph