RxDB: A realtime Database for JavaScript Applications

 

RxDB

A realtime Database for JavaScript Applications

RxDB (short for Reactive Database) is a NoSQL-database for JavaScript Applications like Websites, hybrid Apps, Electron-Apps and NodeJs. Reactive means that you can query the current state and subscribe to all state-changes, such as the result of a query or even a single field of a document. This is useful for UI-based apps that always display the realtime state to the user. RxDB can do a realtime replication with any CouchDB compliant endpoint and also with GraphQL endpoints.

 follow on Twitter

reactive.gif


Features
computeriphone Multiplatform support for browsers, nodejs, electron, cordova, react-native and every other javascript-runtime
incoming_envelope Reactive data-handling based on RxJS
rowing_man Offline first let your app still work when the users has no internet
arrows_counterclockwise Replication between client and server-data, compatible with pouchdbPouchDB, couchdbCouchDB and cloudantIBM Cloudant. There is also a plugin for a GraphQL replication
page_facing_up Schema-based with the easy-to-learn standard of json-schema
tangerine Mango-Query exactly like you know from mongoDB and mongoose
closed_lock_with_key Encryption of single data-fields to protect your users data
outbox_trayinbox_tray Import/Export of the database-state (json), awesome for coding with TDD
satellite Multi-Window to synchronise data between different browser-windows or nodejs-processes
nail_care ORM-capabilities to easily handle data-code-relations and customize functions of documents and collections
large_blue_diamond Full TypeScript support for fast and secure coding

Platform-support

RxDB is made so that you can use exactly the same code at

We optimized, double-checked and made boilerplates so you can directly start to use RxDB with frameworks like

Quickstart

Installation:

npm install rxdb --save

# peerDependencies
npm install rxjs --save

Import:

ES7
ES5

Feature-Showroom (click to toggle)

 Mango-Query

To find data in your collection, use the mquery api to create chained mango-queries, which you maybe know from mongoDB or mongoose.

 Reactive

RxDB implements rxjs to make your data reactive. This makes it easy to always show the real-time database-state in the dom without manually re-submitting your queries.

 MultiWindow/Tab

When two instances of RxDB use the same storage-engine, their state and action-stream will be broadcasted. This means with two browser-windows the change of window #1 will automatically affect window #2. This works completely offline.

 Replication

Because RxDB relies on glorious PouchDB, it is easy to replicate the data between devices and servers. And yes, the changeEvents are also synced.

 Schema

Schemas are defined via jsonschema and are used to describe your data.

 Encryption

By setting a schema-field to encrypted: true, the value of this field will be stored in encryption-mode and can’t be read without the password. Of course you can also encrypt nested objects. Example:

 Level-adapters

The underlying pouchdb can use different adapters as storage engine. So you can use RxDB in different environments by just switching the adapter. For example you can use websql in the browser, localstorage in mobile-browsers and a leveldown-adapter in nodejs.

 Import / Export

RxDB lets you import and export the whole database or single collections into json-objects. This is helpful to trace bugs in your application or to move to a given state in your tests.

 Leader-Election

Imagine your website needs to get a piece of data from the server once every minute. To accomplish this task you create a websocket or pull-interval. If your user now opens the site in 5 tabs parallel, it will run the interval or create the socket 5 times. This is a waste of resources which can be solved by RxDB’s LeaderElection.

 Key-Compression

Depending on which adapter and in which environment you use RxDB, client-side storage is limited in some way or the other. To save disc-space, RxDB has an internal schema-based key-compression to minimize the size of saved documents.

 QueryChangeDetection

Similar to Meteors oplog-observe-driver, RxDB has a QueryChangeDetection to optimize observed or reused queries. This makes sure that when you update/insert/remove documents, the query does not have to re-run over the whole database but the new results will be calculated from the events. This creates a huge performance-gain with zero cost. The QueryChangeDetection works internally and is currently in beta (disabled by default).

Browser support

All major evergreen browsers and IE11 are supported. Tests automatically run against Firefox and Chrome, and manually in a VirtualBox for IE11 and Edge.

We soon will switch to Browserstack and run automated tests in all major browsers

As RxDB heavily relies on PouchDB, see their browser support for more information. Also do keep in mind that different browsers have different storage limits, especially on mobile devices.

Getting started

Get started now by reading the docs or exploring the example-projects.

Contribute

Check out how you can contribute to this project.

Follow up

  • Follow RxDB on twitter to not miss the latest enhancements.
  • Join the chat on gitter for discussion.

Thank you

A big Thank you to every contributor of this project.

License

Apache-2.0

Source: Github