pubkey/rxdb
pubkey/rxdb has 23,421 GitHub stars and 1,183 forks. GitHot measured +2 stars in 24 hours. Last checked 2026-11-05 10:49 UTC. Last push 2026-11-03.
The local-first database that runs on every JS runtime and replicates with your existing backend - no vendor, no lock-in - https://rxdb.info/
What you can do
- Logging Attachments ORM Conflict Handling Middleware Signals TanStack DB - State Backup Replication Server Storages Local Documents - Schema Validation Compression Migration Encryption CRDT Population
Measured star growth
- in 24h
- +2
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalA fast, local-first, reactive Database for JavaScript Applications
What is RxDB?
RxDB (short for Reactive Database) is a local-first, NoSQL-database for JavaScript Applications. Reactive means that you can not only query the current state, but subscribe to all state changes like the result of a query or even a single field of a document. This is great for UI-based realtime applications in a way that makes it easy to develop and also has great performance benefits.
Use the quickstart, read the documentation or explore the example projects.
Used by many
RxDB is a proven technology used by thousands of developers worldwide. With its flexibility, RxDB is used in a diverse range of apps and services.
(add yours)
Multiplayer realtime applications

Replicate with your existing infrastructure
RxDB provides an easy to implement, battle-tested Sync Engine for realtime replication with your existing infrastructure.
You do not have to use a specific cloud or backend database. The protocol works by implementing three simple HTTP endpoints.
There are also production-ready plugins to easily replicate with GraphQL, CouchDB, Websocket, WebRTC (P2P), Supabase, Firestore, NATS or Google Drive.
Flexible storage layer
RxDB is based on a storage interface that enables you to swap out the underlying storage engine. This increases code reuse because the same database code can be used in different JavaScript environments by just switching out the storage settings.
You can use RxDB on top of LocalStorage, IndexedDB, OPFS, LokiJS, Dexie.js, in-memory, SQLite, in a WebWorker thread and even on top of FoundationDB and DenoKV.
No matter what kind of runtime you have, as long as it runs JavaScript, it can run RxDB:
Browsers
Node.js
React Native
Capacitor
NativeScript
Flutter
or as an
Electron Database
All the features that you need
Since its beginning in 2018, RxDB has gained a huge set of features and plugins which makes it a flexible full solution regardless of which type of application you are building. Every feature that you need now or might need in the future is already there.
|
Logging Attachments ORM Conflict Handling Middleware Signals TanStack DB |
State Backup Replication Server Storages Local Documents |
Schema Validation Compression Migration Encryption CRDT Population |
Quick start
Install
npm install rxdb rxjs --save
Store data
import {
createRxDatabase
} from 'rxdb/plugins/core';
/**
* For browsers, we use the localstorage based storage.
* In other JavaScript runtimes, we can use different storages:
* @link https://rxdb.info/rx-storage.html
*/
import {
getRxStorageLocalstorage
} from 'rxdb/plugins/storage-localstorage';
// create a database
const db = await createRxDatabase({
name: 'heroesdb', // the name of the database
storage: getRxStorageLocalstorage()
});
// add collections with a schema
await db.addCollections({
heroes: {
schema: {
version: 0,
primaryKey: 'name',
type: 'object',
properties: {
name: {
type: 'string',
maxLength: 100
},
healthpoints: {
type: 'number'
}
},
required: ['name', 'healthpoints']
}
}
});
// insert a document
await db.heroes.insert({
name: 'Bob',
healthpoints: 100
});
Query data once
const aliveHeroes = await db.heroes.find({
selector: {
healthpoints: {
$gt: 0
}
}
}).exec(); // the exec() returns the result once
Observe a Query
await db.heroes.find({
selector: {
healthpoints: {
$gt: 0
}
}
})
.$ // observable with updated query results
.subscribe(aliveHeroes => console.dir(aliveHeroes));
Get started
Get started now by reading the docs or exploring the example-projects.
Support and Contribute
- Leave a Star ☝️
- Check out how you can contribute to this project.
- Read this when you have found a bug
- Buy access to the premium plugins
- Join us at discord to get help
- Follow us at LinkedIn
More content
Angular Database, Frontend Database, localStorage, React Database, Browser Database, React Native Database, PWA Database, In-memory NoSQL database, JSON database, Angular IndexedDB, React IndexedDB, Optimistic UI, local database, React Native Encryption, Vue Database, jQuery Database, Vue IndexedDB, Firestore Alternative, Firebase Realtime Database Alternative, Ionic Storage, Electron SQLite, SQLite Sync, TanStack DB Offline, DDIL Database
View llms.txt
Explore related projects
Asabeneh/30-Days-Of-Python
The 30 Days of Python programming challenge is a step-by-step guide to learn the Python programming language in 30 days. This challenge may take more than 100 days. Follow your own pace. These videos may help too: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,163 starsgrafana/grafana
The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
77,699 starsredis/redis
For developers, who are building real-time data-driven applications, Redis is the preferred, fastest, and most feature-rich cache, data structure server, and document and vector query engine.
77,199 starsapache/superset
Apache Superset is a Data Visualization and Data Exploration Platform
75,413 stars