---
layout: 2ColLeft
title: About PouchDB
sidebar: nav.html
---

PouchDB was written to help web developers build applications that work offline as well as they do online. Applications save data locally, so the user can use all the features of an app even when they're offline. Plus, the data is synchronized between clients, so the user has up-to-date data wherever they go.

PouchDB is a free open-source project, written in JavaScript by these [wonderful contributors](https://github.com/daleharvey/pouchdb/graphs/contributors) and inspired by <a href="http://couchdb.apache.org/">Apache CouchDB</a>. If you want to get involved then check out the [contributing guide](https://github.com/daleharvey/pouchdb/blob/master/CONTRIBUTING.md).

{% include anchor.html class="h3" title="Browser Support" hash="browser_support" %}

PouchDB uses various backends so it can work across different browsers and in Node.js. It uses IndexedDB in Firefox/Chrome/Opera/IE, WebSQL in Safari and most mobile browsers, and LevelDB in Node.js. It is currently tested and fully supported in:

 * Firefox latest stable (v29+)
 * Chrome latest stable (v34+)
 * Desktop Safari latest stable (v6+)
 * Internet Explorer (v10+)
 * Opera latest stable (v21+)
 * Android 4.0+
 * iOS Safari latest stable (v7.1+)
 * [Node.js](http://nodejs.org/)

PouchDB is experimental on Android 2.x and various mobile browsers and environments including [Apache Cordova](http://cordova.apache.org/). It is known to work, but you may run into issues. As we resolve these issues we will update the fully supported list.

PouchDB requires an ES5 environment. If your browser does not support this (IE <= 9, Android < 4.0, Opera Mini), then you will need to include the [es5-shim](https://github.com/es-shims/es5-shim) library.

{% include anchor.html class="h3" title="Installing" hash="installing" %}

PouchDB is designed to be a minimal library that is suitable for mobile devices, tablets, desktops &mdash; anything that runs Javascript. To start using PouchDB in your website, you simply [download][latest] it and include it in your webpage.

  [latest]: https://github.com/daleharvey/pouchdb/releases/download/{{ site.version }}/pouchdb-{{ site.version }}.min.js

{% highlight html %}
<script src="pouchdb-{{ site.version }}.min.js"></script>
{% endhighlight %}

##### Downloads

Latest and greatest: [pouchdb-{{ site.version }}.min.js][latest]

For past releases and changelog, check out the [Github releases page](https://github.com/daleharvey/pouchdb/releases).

##### Node.js

If you are using Node.js then run

{% highlight bash %}$ npm install pouchdb{% endhighlight %}

For an HTTP API to PouchDB check out [PouchDB Server](https://github.com/nick-thompson/pouchdb-server).

{% include anchor.html class="h3" title="Using PouchDB" hash="using_pouchdb" %}

To get started using PouchDB, check out our [Getting Started Tutorial](getting-started.html) and the [API Documentation](api.html).