PouchDB's concurrency control policy is multi-version concurrency control, allowing consistency of reads.
Starting with version 2.2.0, PouchDB supports secondary indexes using B-trees. It supports an ID-based index by default.
PouchDB does not support joins since it uses a document-based data model. To mimic the existence of joins, the Relational Pouch plugin can be used. It enables PouchDB interaction as if it were a relational database. Regardless, the joins used here are actually created by additional requests (instead of classic join algorithms).
When offline, data is stored locally using WebSQL (deprecated) or IndexedDB, depending on the browser. For IndexedDB usage, the method of storage organization is ISAM. When online, data synchs with CouchDB (and other servers). CouchDB storage uses copy-on-write to update database files.
As with other members of the Couch family, each node contains the same replica of all the data (so you don't have to worry about which node is the true source of all data). PouchDB is an AP database (referring to CAP theorem) so it guarantees availability (responses for each request) and partition tolerance (continued system operation in the event of dropped messages).
PouchDB supports both materialized (persistent) views as well as virtual (temporary) views. In PouchDB, views are synonymous with indexes (i.e. the same as CREATE INDEX in SQL-based databases). Views store information about a specified (map/reduce) query. In turn, views are stored in design documents. These views are very similar to CouchDB however PouchDB uses ASCII ordering to order view query keys. It also does not support the offset property that CouchDB does. Instead, a skip parameter is used instead of an actual offset.