I‘m happy to pre-announce new query server – Couchbox. Couchbox is an augment for CouchDB, that extends built-in query server with so long desired hooks/triggers and async api.
Both api methods and hooks are defined as branches of design documents, very similar to lists, shows and updates. Unlike native QS functions, Couchbox hook and api functions are async and see extensions as this._email or this._cache or whatever, bound to current design doc. Not to mention you can query CouchDB during function execution. Couchbox is a combo of CouchDB, node.js 7+, Redis and, optionally, nginx. There is a script to install all dependencies in nearly one click. Couchbox employs one of best CouchDB principles: ‘deploy it, start it once and forget’. That‘s why Couchbox is configured using native CouchDB config, so it can be (and intended to be) managed from Futon. Since Couchbox runs in node.js as a swarm of VMs inside several workers, api and hooks functions fully support ES6 syntax. It also means adding new plugins (new functions visible as this._something) to Couchbox is an easy task. Just take known node.js lib and wrap it with several lines of code – and you have new plugin, available from inside your hooks or api. Couchbox mimics CouchDB practices whenever possible. Request object, inhaled by api functions is well known Req object like in Couch, require() and isArray() work exactly same, so making old lists/updates work in new Couchbox literally takes minutes (and we sometimes observed more then order of magnitude performance boost for old lists running in new QS). Couchbox is specifically designed to work in large distributed nets of CouchDB instances, actually it was created to run pretty complex commercial project (which it now runs). ---- We plan to make Couchbox fully OSS at the end of June, now it lives in restricted dev repo. If somebody wants to preview and play with it right now, please, register at Gitlab and let me know your nickname, I‘ll grant a guest access. Questions are welcomed. ermouth