{% include anchor.html edit="true" title="Extras" hash="extras" %}

PouchDB offers some "extra" APIs that are designed for PouchDB plugin authors, or for those who want to use non-standard adapters like in-memory and LocalStorage.

These can be especially useful when you are using [Browserify](http://browserify.org/)/[Webpack](https://github.com/webpack/webpack), because they can reduce your overall code size by deduplicating packages. If you're not using Browserify/Webpack, you can also download them [as standalone scripts](/adapters.html#pouchdb_in_the_browser).

### Browser adapter plugins

These adapters are alternatives to PouchDB's built-in IndexedDB/WebSQL adapters. They fully pass the PouchDB test suite.

#### In-memory adapter

{% highlight js %}
var PouchDB = require('pouchdb');
require('pouchdb/extras/memory');

var db = new PouchDB('mydb', {adapter: 'memory'});
{% endhighlight %}

Fully in-memory PouchDB adapter. Data will not be saved after a browser refresh!

This adapter can be useful for unit tests or for environments that don't support IndexedDB/WebSQL. Based on [MemDOWN](https://github.com/Level/memdown).

You can also download this plugin [as a standalone script](https://github.com/pouchdb/pouchdb/releases/download/{{ site.version }}/pouchdb.memory.js).

{% include alert/start.html variant="warning"%}
{% markdown %}

If you want to use an in-memory PouchDB in Node.js/io.js, you should [directly require MemDOWN instead](/adapters.html#pouchdb_in_node_js).

{% endmarkdown %}
{% include alert/end.html%}

#### LocalStorage adapter

{% highlight js %}
var PouchDB = require('pouchdb');
require('pouchdb/extras/localstorage');

var db = new PouchDB('mydb', {adapter: 'localstorage'});
{% endhighlight %}

PouchDB adapter using [LocalStorage](http://www.w3.org/TR/webstorage/). Intended for browsers and environments that don't support IndexedDB or WebSQL. Based on [localstorage-down](https://github.com/No9/localstorage-down).

You can also download this plugin [as a standalone script](https://github.com/pouchdb/pouchdb/releases/download/{{ site.version }}/pouchdb.localstorage.js).

{% include alert/start.html variant="info"%}
{% markdown %}

When you include these plugins in your project, they will be automatically picked up as a "third" option when you create a new PouchDB without an adapter specified (e.g. `new PouchDB('mydb')`).

So for instance, if the user loads PouchDB in a browser that does not support WebSQL or IndexedDB, and if you are using the in-memory plugin, then PouchDB will automatically use the memory adapter instead of WebSQL or IndexedDB.

{% endmarkdown %}
{% include alert/end.html%}

#### FruitDOWN adapter

{% highlight js %}
var PouchDB = require('pouchdb');
require('pouchdb/extras/fruitdown');

var db = new PouchDB('mydb', {adapter: 'fruitdown'});
{% endhighlight %}

PouchDB adapter using [FruitDOWN](https://github.com/nolanlawson/fruitdown).
This is an alternative to the default IndexedDB adapter that ships with PouchDB, which works over all implementations of IndexedDB, including Apple's version.

It is slower and more inefficient than PouchDB's default IndexedDB adapter, but it's handy if you need to use IndexedDB in Safari, iOS, WKWebView, etc.

You can also download this plugin [as a standalone script](https://github.com/pouchdb/pouchdb/releases/download/{{ site.version }}/pouchdb.fruitdown.js).

### APIs for plugin authors

These APIs are designed for PouchDB plugin authors, who may want to re-use some PouchDB code to avoid duplication.

To use these APIs, you should save PouchDB as a required npm dependency (`npm install --save pouchdb`) and then require them like so:

#### Ajax

{% highlight js %}
var ajax = require('pouchdb/extras/ajax');
{% endhighlight %}

The `ajax()` function as used by PouchDB. Essentially a shim in the style of `jQuery.ajax`.

#### Checkpointer

{% highlight js %}
var Checkpointer = require('pouchdb/extras/checkpointer');
{% endhighlight %}

The `Checkpointer` function as used by PouchDB's replicator. Writes checkpoints as `_local` docs so that replication can resume where it last left off.

#### Promise

{% highlight js %}
var Promise = require('pouchdb/extras/promise');
{% endhighlight %}

The ES6 `Promise` shim as used by PouchDB. Expect this to be `lie` where a global `Promise` does not exist, the global `Promise` is used when supported.

#### Caveats

These APIs are not rigorously documented and may change frequently. Refer to the [source code](https://github.com/pouchdb/pouchdb/tree/master/extras) for the details of the APIs.

If your plugin depends on a particular version of PouchDB, please notify your users. Unless you like to live dangerously, you should also nail down the version of PouchDB you are using in your `package.json`. And if you need any other internal modules, please submit a pull request!
