.. Licensed under the Apache License, Version 2.0 (the "License"); you may not
.. use this file except in compliance with the License. You may obtain a copy of
.. the License at
..
..   http://www.apache.org/licenses/LICENSE-2.0
..
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
.. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
.. License for the specific language governing permissions and limitations under
.. the License.

.. _experimental:

=====================
Experimental Features
=====================

This is a list of experimental features in CouchDB. They are included in
a release because the development team is requesting feedback from the
larger developer community. As such, please play around with these features
and send us feedback, thanks!

Use at your own risk! Do not rely on these features for critical applications.

NodeJS Query Server
===================

The NodeJS Query Server is an alternative runtime environment for
the default JavaScript Query Server that runs on top of Node.JS and
not SpiderMonkey like the default Query Server.

Setup
-----

You will need to install Node.JS version 0.10.0 or later. See `Node.JS
Downloads <http://nodejs.org/download/>`_ for options.

1. Install the `couchjs-node` binary. Either from the CouchDB sources::

    cd src/couchjs-node
    npm link

Or via NPM::

    npm install -g couchjs

.. note::
    **NPM in non-standard locations**
    If your Node.JS installation doesn’t store binaries in `/usr/local/bin`
    you will need to adjust CouchDB’s configuration. Add this to your
    `local.ini` file:

    .. code-block:: ini

        [query_servers]
        nodejs = /path/to/couchjs-node /path/to/couchdb/share/server/main.js

    And then restart your CouchDB instance.

2. Done. Now you can create design documents with the `language` parameter
set to `nodejs` and all JavaScript functions in this design document will
be processed by the Node.JS query server.

Enjoy!

Differences from the SpiderMonkey Query Server
----------------------------------------------

V8 and SpiderMonkey roughly behave similar, but there might be engine- specific
differences that make or break a JavaScript function in one or the other server.

Plugins
=======

See `src/couch_plugins/README.md`.

Content-Security-Policy (CSP) Header Support for /_utils (Fauxton)
==================================================================

This will just work with Fauxton, and not Futon. You can enable it
in your config: you can enable the feature in general and change
the default header that is sent for everything in /_utils.

    .. code-block:: ini

        [csp]
        enable = true

Then restart CouchDB.

Have fun!
