-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
Copy pathalternatives.html
144 lines (142 loc) · 62.6 KB
/
alternatives.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-alternatives" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.7.0">
<title data-rh="true">Alternatives for realtime local-first JavaScript applications and local databases | RxDB - JavaScript Database</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://rxdb.info/img/rxdb_social_card.png"><meta data-rh="true" name="twitter:image" content="https://rxdb.info/img/rxdb_social_card.png"><meta data-rh="true" property="og:url" content="https://rxdb.info/alternatives.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Alternatives for realtime local-first JavaScript applications and local databases | RxDB - JavaScript Database"><meta data-rh="true" name="description" content="Explore real-time, local-first JS alternatives to RxDB. Compare Firebase, Meteor, AWS, CouchDB, and more for robust, seamless web/mobile app development."><meta data-rh="true" property="og:description" content="Explore real-time, local-first JS alternatives to RxDB. Compare Firebase, Meteor, AWS, CouchDB, and more for robust, seamless web/mobile app development."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://rxdb.info/alternatives.html"><link data-rh="true" rel="alternate" href="https://rxdb.info/alternatives.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://rxdb.info/alternatives.html" hreflang="x-default"><link rel="preconnect" href="https://www.google-analytics.com">
<link rel="preconnect" href="https://www.googletagmanager.com">
<script async src="https://www.googletagmanager.com/gtag/js?id=G-62D63SY3S0"></script>
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-62D63SY3S0",{})</script>
<link rel="preconnect" href="https://www.googletagmanager.com">
<script>window.dataLayer=window.dataLayer||[]</script>
<script>!function(e,t,a,n){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var g=t.getElementsByTagName(a)[0],m=t.createElement(a);m.async=!0,m.src="https://www.googletagmanager.com/gtm.js?id=GTM-PL63TR5",g.parentNode.insertBefore(m,g)}(window,document,"script","dataLayer")</script><link rel="stylesheet" href="/assets/css/styles.bc483400.css">
<script src="/assets/js/runtime~main.68ae4ffa.js" defer="defer"></script>
<script src="/assets/js/main.90e814da.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PL63TR5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"dark")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/files/logo/logo.svg" alt="RxDB Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/files/logo/logo.svg" alt="RxDB Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">RxDB</b></a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/consulting/">Support</a><a class="navbar__item navbar__link" href="/premium/">Premium</a><a class="navbar__item navbar__link" href="/overview.html">Docs</a><div class="navbarSearchContainer_Bca1"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div style="position:fixed;display:block;z-index:10;height:1.5px;background-color:var(--color-top);top:62.5px;border-top-right-radius:2px;border-bottom-right-radius:2px;width:0%"></div><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/overview.html">Getting Started with RxDB</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/overview.html">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/quickstart.html">🚀 Quickstart</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/install.html">Installation</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/dev-mode.html">Development Mode</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/tutorials/typescript.html">TypeScript Setup</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/rx-database.html">Core Entities</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/rx-database.html">RxDatabase</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/rx-schema.html">RxSchema</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/rx-collection.html">RxCollection</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/rx-document.html">RxDocument</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/rx-query.html">RxQuery</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/rx-storage.html">💾 Storages</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/schema-validation.html">Storage Wrappers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/replication.html">🔄 Replication</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/rx-server.html">Server</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/transactions-conflicts-revisions.html">How RxDB works</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/migration-schema.html">Advanced Features</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/rx-storage-performance.html">Performance</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/releases/16.0.0.html">Releases</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/offline-first.html">Articles</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/offline-first.html">Local First / Offline First</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/downsides-of-offline-first.html">Downsides of Local First / Offline First</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/why-nosql.html">Why NoSQL Powers Modern UI Apps</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/nodejs-database.html">RxDB - The Real-Time Database for Node.js</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/alternatives.html">Alternatives for realtime local-first JavaScript applications and local databases</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/react-native-database.html">React Native Database - Sync & Store Like a Pro</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/angular-database.html">RxDB as a Database in an Angular Application</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/browser-database.html">Benefits of RxDB & Browser Databases</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/browser-storage.html">Browser Storage - RxDB as a Database for Browsers</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/data-base.html">Empower Web Apps with Reactive RxDB Data-base</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/embedded-database.html">Embedded Database, Real-time Speed - RxDB</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/flutter-database.html">Supercharge Flutter Apps with the RxDB Database</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/frontend-database.html">RxDB - The Ultimate JS Frontend Database</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/in-memory-nosql-database.html">RxDB In-Memory NoSQL - Supercharge Real-Time Apps</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/ionic-database.html">RxDB - The Perfect Ionic Database</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/ionic-storage.html">RxDB - Local Ionic Storage with Encryption, Compression & Sync</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/json-database.html">RxDB - The JSON Database Built for JavaScript</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/websockets-sse-polling-webrtc-webtransport.html">WebSockets vs Server-Sent-Events vs Long-Polling vs WebRTC vs WebTransport</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/localstorage.html">Using localStorage in Modern Applications - A Comprehensive Guide</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/mobile-database.html">Real-Time & Offline - RxDB for Mobile Apps</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/progressive-web-app-database.html">RxDB as a Database for Progressive Web Apps (PWA)</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/react-database.html">RxDB as a Database for React Applications</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/realtime-database.html">What Really Is a Realtime Database?</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/angular-indexeddb.html">Build Smarter Offline-First Angular Apps - How RxDB Beats IndexedDB Alone</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/react-indexeddb.html">IndexedDB Database in React Apps - The Power of RxDB</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/capacitor-database.html">Capacitor Database Guide - SQLite, RxDB & More</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/electron-database.html">Electron Database - Storage adapters for SQLite, Filesystem and In-Memory</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/optimistic-ui.html">Building an Optimistic UI with RxDB</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/local-database.html">What is a Local Database and Why RxDB is the Best Local Database for JavaScript Applications</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/react-native-encryption.html">React Native Encryption and Encrypted Database/Storage</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/vue-database.html">RxDB as a Database in a Vue.js Application</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/vue-indexeddb.html">IndexedDB Database in Vue Apps - The Power of RxDB</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/jquery-database.html">RxDB as a Database in a jQuery Application</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/firestore-alternative.html">RxDB - Firestore Alternative to Sync with Your Own Backend</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/firebase-realtime-database-alternative.html">RxDB - Firebase Realtime Database Alternative to Sync With Your Own Backend</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/offline-database.html">RxDB – The Ultimate Offline Database with Sync and Encryption</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/zero-latency-local-first.html">Zero Latency Local First Apps with RxDB – Sync, Encryption and Compression</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/articles/indexeddb-max-storage-limit.html">IndexedDB Max Storage Size Limit - Detailed Best Practices</a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/contribution.html">Contribute & Innovate with RxDB</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/consulting/">Contact</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Articles</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Alternatives for realtime local-first JavaScript applications and local databases</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Alternatives for realtime offline-first JavaScript applications</h1></header>
<p>To give you an augmented view over the topic of client side JavaScript databases, this page contains all known alternatives to <strong>RxDB</strong>. Remember that you are reading this inside of the RxDB documentation, so everything is <strong>opinionated</strong>.
If you disagree with anything or think that something is missing, make a pull request to this file on the RxDB github repository.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>RxDB has these main benefits:</p><ul>
<li>RxDB is a battle proven tool <a href="/#reviews">widely used</a> by companies in real projects in production.</li>
<li>RxDB is not VC funded and therefore does not require you to use a specific cloud service to rip you off. RxDB can be used with your <a href="/replication-http.html">own backend</a> or no backend at all.</li>
<li>RxDB has a working business model of selling <a href="/premium/">premium plugins</a> which ensures that RxDB will be maintained and improved continuously while many alternatives are dead already or seem to die soon.</li>
<li>RxDB has years (since 2016) of performance optimization, bug fixing and feature adding. It is just working as is and there are close to zero <a href="https://github.com/pubkey/rxdb/issues" target="_blank" rel="noopener noreferrer">open issues</a>.</li>
</ul><center><a href="https://rxdb.info/"><img src="../files/logo/rxdb_javascript_database.svg" alt="JavaScript Database" width="220"></a></center></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="alternatives-to-rxdb">Alternatives to RxDB<a href="#alternatives-to-rxdb" class="hash-link" aria-label="Direct link to Alternatives to RxDB" title="Direct link to Alternatives to RxDB"></a></h2>
<p><a href="https://rxdb.info" target="_blank" rel="noopener noreferrer">RxDB</a> is an <strong>observable</strong>, <strong>replicating</strong>, <strong><a href="/offline-first.html">local first</a></strong>, <strong>JavaScript</strong> database. So it makes only sense to list similar projects as alternatives, not just any database or JavaScript store library. However, I will list up some projects that RxDB is often compared with, even if it only makes sense for some use cases.
Here are the alternatives to RxDB:</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="firebase">Firebase<a href="#firebase" class="hash-link" aria-label="Direct link to Firebase" title="Direct link to Firebase"></a></h3>
<p align="center"><img src="./files/alternatives/firebase.svg" alt="firebase alternative" class="img-padding" height="60"></p>
<p>Firebase is a <strong>platform</strong> developed by Google for creating mobile and web applications. Firebase has many features and products, two of which are client side databases. The <a href="/articles/firebase-realtime-database-alternative.html">Realtime Database</a> and the <a href="/articles/firestore-alternative.html">Cloud Firestore</a>.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="firebase---realtime-database">Firebase - Realtime Database<a href="#firebase---realtime-database" class="hash-link" aria-label="Direct link to Firebase - Realtime Database" title="Direct link to Firebase - Realtime Database"></a></h4>
<p>The firebase realtime database was the first database in firestore. It has to be mentioned that in this context, "realtime" means <strong>"realtime replication"</strong>, not "realtime computing". The firebase realtime database stores data as a big unstructured JSON tree that is replicated between clients and the backend.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="firebase---cloud-firestore">Firebase - Cloud Firestore<a href="#firebase---cloud-firestore" class="hash-link" aria-label="Direct link to Firebase - Cloud Firestore" title="Direct link to Firebase - Cloud Firestore"></a></h4>
<p>The firestore is the successor to the realtime database. The big difference is that it behaves more like a 'normal' database that stores data as documents inside of collections. The conflict resolution strategy of firestore is always <em>last-write-wins</em> which might or might not be suitable for your use case.</p>
<p>The biggest difference to RxDB is that firebase products are only able to be used on top of the Firebase cloud hosted backend, which creates a vendor lock-in. RxDB can replicate with any self hosted CouchDB server or custom GraphQL endpoints. You can even replicate Firestore to RxDB with the <a href="/replication-firestore.html">Firestore Replication Plugin</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="meteor">Meteor<a href="#meteor" class="hash-link" aria-label="Direct link to Meteor" title="Direct link to Meteor"></a></h3>
<p align="center"><img src="./files/alternatives/meteor_text.svg" alt="MeteorJS alternative" class="img-padding" height="60"></p>
<p>Meteor (since 2012) is one of the oldest technologies for JavaScript realtime applications. Meteor is not a library but a whole framework with its own package manager, database management and replication protocol.
Because of how it works, it has proven to be hard to integrate it with other modern JavaScript frameworks like <a href="https://github.com/urigo/angular-meteor" target="_blank" rel="noopener noreferrer">angular</a>, <a href="/articles/vue-database.html">vue.js</a> or svelte.</p>
<p>Meteor uses MongoDB in the backend and can replicate with a Minimongo database in the frontend.
While testing, it has proven to be impossible to make a meteor app <strong>offline first</strong> capable. There are <a href="https://github.com/frozeman/meteor-persistent-minimongo2" target="_blank" rel="noopener noreferrer">some projects</a> that might do this, but all are unmaintained.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="minimongo">Minimongo<a href="#minimongo" class="hash-link" aria-label="Direct link to Minimongo" title="Direct link to Minimongo"></a></h3>
<p>Forked in Jan 2014 from meteorJSs' minimongo package, Minimongo is a client-side, in-memory, JavaScript version of MongoDB with backend replication over HTTP. Similar to MongoDB, it stores data in documents inside of collections and also has the same query syntax. Minimongo has different storage adapters for IndexedDB, WebSQL, <a href="/articles/localstorage.html">LocalStorage</a> and SQLite.
Compared to RxDB, Minimongo has no concept of revisions or conflict handling, which might lead to undefined behavior when used with replication or in multiple browser tabs. Minimongo has no observable queries or changestream.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="watermelondb">WatermelonDB<a href="#watermelondb" class="hash-link" aria-label="Direct link to WatermelonDB" title="Direct link to WatermelonDB"></a></h3>
<p align="center"><img src="./files/alternatives/watermelondb.png" alt="WatermelonDB alternative" height="60"></p>
<p>WatermelonDB is a reactive & asynchronous JavaScript database. While originally made for <a href="/articles/react-database.html">React</a> and <a href="/react-native-database.html">React Native</a>, it can also be used with other JavaScript frameworks. The main goal of WatermelonDB is <strong>performance</strong> within an application with lots of data.
In React Native, WatermelonDB uses the provided SQLite database. Also there is an Expo plugin for WatermelonDB. In a browser, WatermelonDB uses the LokiJS in-memory database to store and query data. WatermelonDB is one of the rare projects that support both Flow and Typescript at the same time.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="aws-amplify">AWS Amplify<a href="#aws-amplify" class="hash-link" aria-label="Direct link to AWS Amplify" title="Direct link to AWS Amplify"></a></h3>
<p align="center"><img src="./files/alternatives/aws-amplify.svg" alt="AWS Amplify alternative" height="60" class="img-padding"></p>
<p>AWS Amplify is a collection of tools and libraries to develop web- and mobile frontend applications. Similar to firebase, it provides everything needed like authentication, analytics, a REST API, storage and so on. Everything hosted in the AWS Cloud, even when they state that <em>"AWS Amplify is designed to be open and pluggable for any custom backend or service"</em>. For realtime replication, AWS Amplify can connect to an AWS App-Sync GraphQL endpoint.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="aws-datastore">AWS Datastore<a href="#aws-datastore" class="hash-link" aria-label="Direct link to AWS Datastore" title="Direct link to AWS Datastore"></a></h3>
<p>Since December 2019 the Amplify library includes the AWS Datastore which is a document-based, client side database that is able to replicate data via AWS AppSync in the background.
The main difference to other projects is the complex project configuration via the amplify cli and the bit confusing query syntax that works over functions. Complex Queries with multiple <code>OR/AND</code> statements are not possible which might change in the future.
Local development is hard because the AWS AppSync mock does not support realtime replication. It also is not really offline-first because a user login is always required.</p>
<div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// An AWS datastore OR query</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> posts </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> DataStore</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">query</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Post</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> c </span><span class="token operator">=></span><span class="token plain"> c</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">or</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> c </span><span class="token operator">=></span><span class="token plain"> c</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">rating</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"gt"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">4</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">status</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"eq"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> PostStatus</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">PUBLISHED</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// An AWS datastore SORT query</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> posts </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> DataStore</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">query</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Post</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> Predicates</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">ALL</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(80, 250, 123)">sort</span><span class="token operator">:</span><span class="token plain"> s </span><span class="token operator">=></span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">rating</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">SortDirection</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">ASCENDING</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">title</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">SortDirection</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">DESCENDING</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>The biggest difference to RxDB is that you have to use the AWS cloud backends. This might not be a problem if your data is at AWS anyway.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="rethinkdb">RethinkDB<a href="#rethinkdb" class="hash-link" aria-label="Direct link to RethinkDB" title="Direct link to RethinkDB"></a></h3>
<p align="center"><img src="./files/alternatives/rethinkdb.svg" alt="RethinkDB alternative" height="60" class="img-padding"></p>
<p>RethinkDB is a backend database that pushed dynamic JSON data to the client in realtime. It was founded in 2009 and the company shut down in 2016.
Rethink db is not a client side database, it streams data from the backend to the client which of course does not work while offline.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="horizon">Horizon<a href="#horizon" class="hash-link" aria-label="Direct link to Horizon" title="Direct link to Horizon"></a></h3>
<p>Horizon is the client side library for RethinkDB which provides useful functions like authentication, permission management and subscription to a RethinkDB backend. Offline support <a href="https://github.com/rethinkdb/horizon/issues/58" target="_blank" rel="noopener noreferrer">never made</a> it to horizon.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="supabase">Supabase<a href="#supabase" class="hash-link" aria-label="Direct link to Supabase" title="Direct link to Supabase"></a></h3>
<p align="center"><img src="./files/alternatives/supabase.svg" alt="Supabase alternative" height="60" class="img-padding"></p>
<p>Supabase labels itself as "<em>an open source Firebase alternative</em>". It is a collection of open source tools that together mimic many Firebase features, most of them by providing a wrapper around a PostgreSQL database. While it has realtime queries that run over the wire, like with RethinkDB, Supabase has no client-side storage or replication feature and therefore is not offline first.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="couchdb">CouchDB<a href="#couchdb" class="hash-link" aria-label="Direct link to CouchDB" title="Direct link to CouchDB"></a></h3>
<p align="center"><img src="./files/icons/couchdb-text.svg" alt="CouchDB alternative" height="60" class="img-padding"></p>
<p>Apache CouchDB is a server-side, document-oriented database that is mostly known for its multi-master replication feature. Instead of having a master-slave replication, with CouchDB you can run replication in any constellation without having a master server as bottleneck where the server even can go off- and online at any time. This comes with the drawback of having a slow replication with much network overhead.
CouchDB has a changestream and a query syntax similar to MongoDB.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="pouchdb">PouchDB<a href="#pouchdb" class="hash-link" aria-label="Direct link to PouchDB" title="Direct link to PouchDB"></a></h3>
<p align="center"><img src="./files/alternatives/pouchdb.svg" alt="PouchDB alternative" height="60" class="img-padding"></p>
<p>PouchDB is a JavaScript database that is compatible with most of the CouchDB API. It has an adapter system that allows you to switch out the underlying storage layer. There are many adapters like for <a href="/rx-storage-indexeddb.html">IndexedDB</a>, <a href="/rx-storage-sqlite.html">SQLite</a>, the Filesystem and so on. The main benefit is to be able to replicate data with any CouchDB compatible endpoint.
Because of the CouchDB compatibility, PouchDB has to do a lot of overhead in handling the revision tree of document, which is why it can show bad performance for bigger datasets.
RxDB was originally build around PouchDB until the storage layer was abstracted out in version <a href="/releases/10.0.0.html">10.0.0</a> so it now allows to use different <code>RxStorage</code> implementations. PouchDB has some performance issues because of how it has to store the document revision tree to stay compatible with the CouchDB API.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="couchbase">Couchbase<a href="#couchbase" class="hash-link" aria-label="Direct link to Couchbase" title="Direct link to Couchbase"></a></h3>
<p>Couchbase (originally known as Membase) is another NoSQL document database made for realtime applications.
It uses the N1QL query language which is more SQL like compared to other NoSQL query languages. In theory you can achieve replication of a Couchbase with a PouchDB database, but this has shown to be not <a href="https://github.com/pouchdb/pouchdb/issues/7793#issuecomment-501624297" target="_blank" rel="noopener noreferrer">that easy</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="cloudant">Cloudant<a href="#cloudant" class="hash-link" aria-label="Direct link to Cloudant" title="Direct link to Cloudant"></a></h3>
<p>Cloudant is a cloud-based service that is based on <a href="/replication-couchdb.html">CouchDB</a> and has mostly the same features.
It was originally designed for cloud computing where data can automatically be distributed between servers. But it can also be used to replicate with frontend PouchDB instances to create scalable web applications.
It was bought by IBM in 2014 and since 2018 the Cloudant Shared Plan is retired and migrated to IBM Cloud.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="hoodie">Hoodie<a href="#hoodie" class="hash-link" aria-label="Direct link to Hoodie" title="Direct link to Hoodie"></a></h3>
<p>Hoodie is a backend solution that enables offline-first JavaScript frontend development without having to write backend code. Its main goal is to abstract away configuration into simple calls to the Hoodie API.
It uses CouchDB in the backend and PouchDB in the frontend to enable offline-first capabilities.
The last commit for hoodie was one year ago and the website (hood.ie) is offline which indicates it is not an active project anymore.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="lokijs">LokiJS<a href="#lokijs" class="hash-link" aria-label="Direct link to LokiJS" title="Direct link to LokiJS"></a></h3>
<p>LokiJS is a JavaScript embeddable, in-memory database. And because everything is handled in-memory, LokiJS has awesome performance when mutating or querying data. You can still persist to a permanent storage (IndexedDB, Filesystem etc.) with one of the provided storage adapters. The persistence happens after a timeout is reached after a write, or before the JavaScript process exits. This also means you could loose data when the JavaScript process exits ungracefully like when the power of the device is shut down or the browser crashes.
While the project is not that active anymore, it is more <em>finished</em> than <em>unmaintained</em>.</p>
<p>In the past, RxDB supported using <a href="/rx-storage-lokijs.html">LokiJS as RxStorage</a> but because the LokiJS is not maintained anymore and had too many issues, this storage option was removed in RxDB version 16.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="gundb">Gundb<a href="#gundb" class="hash-link" aria-label="Direct link to Gundb" title="Direct link to Gundb"></a></h3>
<p>GUN is a JavaScript graph database. While having many features, the <strong>decentralized</strong> replication is the main unique selling point. You can replicate data Peer-to-Peer without any centralized backend server. GUN has several other features that are useful on top of that, like encryption and authentication.</p>
<p>While testing it was really hard to get basic things running. GUN is open source, but because of how the source code <a href="https://github.com/amark/gun/blob/master/src/put.js" target="_blank" rel="noopener noreferrer">is written</a>, it is very difficult to understand what is going wrong.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="sqljs">sql.js<a href="#sqljs" class="hash-link" aria-label="Direct link to sql.js" title="Direct link to sql.js"></a></h3>
<p>sql.js is a javascript library to run SQLite on the web. It uses a virtual database file stored in memory and does not have any persistence. All data is lost once the JavaScript process exits. sql.js is created by compiling SQLite to WebAssembly so it has about the same features as SQLite. For older browsers there is a JavaScript fallback.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="absurd-sql">absurd-sQL<a href="#absurd-sql" class="hash-link" aria-label="Direct link to absurd-sQL" title="Direct link to absurd-sQL"></a></h3>
<p>Absurd-sql is a project that implements an IndexedDB-based persistence for sql.js. Instead of directly writing data into the IndexedDB, it treats IndexedDB like a disk and stores data in blocks there which shows to have a much better performance, mostly because of how <a href="/slow-indexeddb.html">performance expensive</a> IndexedDB transactions are.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="nedb">NeDB<a href="#nedb" class="hash-link" aria-label="Direct link to NeDB" title="Direct link to NeDB"></a></h3>
<p>NeDB was a embedded persistent or in-memory database for Node.js, nw.js, <a href="/electron-database.html">Electron</a> and browsers.
It is document-oriented and had the same query syntax as MongoDB.
Like LokiJS it has persistence adapters for IndexedDB etc. to persist the database state on the disc.
The last commit to NeDB was in <strong>2016</strong>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="dexiejs">Dexie.js<a href="#dexiejs" class="hash-link" aria-label="Direct link to Dexie.js" title="Direct link to Dexie.js"></a></h3>
<p>Dexie.js is a minimalistic wrapper for IndexedDB. While providing a better API than plain IndexedDB, Dexie also improves performance by batching transactions and other optimizations. It also adds additional non-IndexedDB features like observable queries or multi tab support or react hooks.
Compared to RxDB, Dexie.js does not support complex (MongoDB-like) queries and requires a lot of fiddling when a document range of a specific index must be fetched.
Dexie.js is used by Whatsapp Web, Microsoft To Do and Github Desktop.</p>
<p>RxDB supports using <a href="/rx-storage-dexie.html">Dexie.js as RxStorage</a> which enhances IndexedDB with RxDB features like MongoDB-like queries etc.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="lowdb">LowDB<a href="#lowdb" class="hash-link" aria-label="Direct link to LowDB" title="Direct link to LowDB"></a></h3>
<p>LowDB is a small, local JSON database powered by the Lodash library. It is designed to be simple, easy to use, and straightforward. LowDB allows you to perform native JavaScript queries and persist data in a flat JSON file. Written in TypeScript, it's particularly well-suited for small projects, prototyping, or when you need a lightweight, file-based database.</p>
<p>As an alternative to LowDB, <a href="/">RxDB</a> offers real-time reactivity, allowing developers to subscribe to database changes, a feature not natively available in LowDB. Additionally, RxDB provides robust <a href="/rx-query.html">query capabilities</a>, including the ability to subscribe to query results for automatic UI updates. These features make RxDB a strong alternative to LowDB for more complex and dynamic applications.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="localforage">localForage<a href="#localforage" class="hash-link" aria-label="Direct link to localForage" title="Direct link to localForage"></a></h3>
<p>localForage is a popular JavaScript library for offline storage that provides a simple, promise-based API. It abstracts over different storage mechanisms such as <a href="/rx-storage-indexeddb.html">IndexedDB</a>, WebSQL, or <a href="/articles/localstorage.html">localStorage</a>, making it easier to write code once and have it work seamlessly across various browsers. While localForage is great for storing data locally in a key-value manner, it doesn't provide the real-time reactive queries, <a href="/transactions-conflicts-revisions.html">conflict handling</a>, or revision-based replication that RxDB does. This makes localForage a useful choice for straightforward caching or persistent storage needs, but not ideal for advanced offline-first scenarios requiring multi-user collaboration or complex querying.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="mongodb-realm">MongoDB Realm<a href="#mongodb-realm" class="hash-link" aria-label="Direct link to MongoDB Realm" title="Direct link to MongoDB Realm"></a></h3>
<p>Originally Realm was a mobile database for Android and iOS. Later they added support for other languages and runtimes, also for JavaScript.
It was meant as replacement for SQLite but is more like an object store than a full SQL database.
In 2019 MongoDB bought Realm and changed the projects focus.
Now Realm is made for replication with the MongoDB Realm Sync based on the MongoDB Atlas Cloud platform. This tight coupling to the MongoDB cloud service is a big downside for most use cases.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="apollo">Apollo<a href="#apollo" class="hash-link" aria-label="Direct link to Apollo" title="Direct link to Apollo"></a></h3>
<p>The Apollo GraphQL platform is made to transfer data between a server to UI applications over GraphQL endpoints. It contains several tools like GraphQL clients in different languages or libraries to create GraphQL endpoints.</p>
<p>While it is has different caching features for offline usage, compared to RxDB it is not fully offline first because caching alone does not mean your application is fully usable when the user is offline.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="replicache">Replicache<a href="#replicache" class="hash-link" aria-label="Direct link to Replicache" title="Direct link to Replicache"></a></h3>
<p>Replicache is a client-side sync framework for building realtime, collaborative, local-first web apps. It claims to work with most backend stacks. In contrast to other local first tools, replicache does not work like a local database. Instead it runs on so called <code>mutators</code> that unify behavior on the client and server side. So instead of implementing and calling REST routes on both sides of your stack, you will implement mutators that define a specific delta behavior based on the input data. To observe data in replicache, there are <code>subscriptions</code> that notify your frontend application about changes to the state.
Replicache can be used in most frontend technologies like browsers, React/Remix, NextJS/Vercel and React Native. While Replicache can be installed and used from npm, the Replicache source code is not open source and the Replicache github repo does not allow you to inspect or debug it. Still you can use replicache for in non-commercial projects, or for companies with < $200k revenue (ARR) and < $500k in funding. (2024: Replicache will be free and Rocicorp are working on a new Zerosync product to succeed Replicache and Reflect.)</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="instantdb">InstantDB<a href="#instantdb" class="hash-link" aria-label="Direct link to InstantDB" title="Direct link to InstantDB"></a></h3>
<p>InstantDB is designed for real-time data synchronization with built-in offline support, allowing changes to be queued locally and <a href="/replication.html">synced</a> when the user reconnects. While it offers seamless <a href="/articles/optimistic-ui.html">optimistic updates</a> and rollback capabilities, its offline-first design is not as mature or comprehensive as RxDB's - the <a href="/articles/offline-database.html">offline data</a> is more of a cache, not a full-database sync. The query language used is Datalog, and the backend sync service is written in Clojure. InstantDB is focused more on simplicity and real-time collaboration, with fewer customization options for storage or conflict resolution compared to RxDB, which supports various storage adapters and advanced conflict handling via CRDTs.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="yjs">Yjs<a href="#yjs" class="hash-link" aria-label="Direct link to Yjs" title="Direct link to Yjs"></a></h3>
<p>Yjs is a <a href="/crdt.html">CRDT-based</a> (Conflict-free Replicated Data Type) library focused on enabling real-time collaboration - particularly for text editing, although it can handle other data types as well. While it provides powerful conflict resolution and peer-to-peer synchronization out of the box, Yjs itself is not a full-fledged database. Instead, you typically combine Yjs with other storage or networking layers to achieve a <a href="/offline-first.html">local-first architecture</a>. This flexibility allows for sophisticated <a href="/articles/realtime-database.html">real-time</a> features, but also means you must handle indexing, queries, and persistence on your own if you need them. Compared to RxDB, Yjs does not offer built-in replication adapters or a query system, so developers who require a more complete solution for conflict resolution, data persistence, and offline-first capabilities may find RxDB more convenient.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="electricsql">ElectricSQL<a href="#electricsql" class="hash-link" aria-label="Direct link to ElectricSQL" title="Direct link to ElectricSQL"></a></h3>
<p>2024: ElectricSQL is being rewritten in a new Electric-Next branch, which focuses on partial syncing of ("shapes") of data from a remote Postgres DB to a local clients written in TypeScript/JS or Elixir. The write path is not yet implemented, neither is client-side reactivity. The ElectricSQL backend is written in Elixir.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="signaldb">SignalDB<a href="#signaldb" class="hash-link" aria-label="Direct link to SignalDB" title="Direct link to SignalDB"></a></h3>
<p>SignalDB provides a reactive, in-memory local-lirst JavaScript database with real-time sync, bit it doesn't offer the same level of multi-client replication or flexibility with storage backends that RxDB provides, and through a RxDB persistence adapters you can actually use SignalDB for the front-end reactivity while relying on RxDB for backend sync and persistence.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="powersync">PowerSync<a href="#powersync" class="hash-link" aria-label="Direct link to PowerSync" title="Direct link to PowerSync"></a></h3>
<p>PowerSync is a flexible "framework" for implementing local-first solutions. It centralizes business logic and conflict resolution on a central, authoritative server (PostgreSQL or MongoDB), vs RxDB that also supports custom backends. Both RxDB and PowerSync can be used with a variety of storage backends, but PowerSync uses SQLite as the front-end database which has shown to be slow because the WASM-SQLite abstraction increases read and write latency. In terms of client SDKs, PowerSync offers Flutter, Kotlin, and Swift in addition to JS/TypeScript. PowerSync offers man client technologies, PowerSync is under a license that restricts commercial use that competes with PowerSync and the JourneyApps Platform.</p>
<h1>Read further</h1>
<ul>
<li><a href="https://github.com/pubkey/client-side-databases" target="_blank" rel="noopener noreferrer">Offline First Database Comparison</a></li>
</ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/nodejs-database.html"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">RxDB - The Real-Time Database for Node.js</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/react-native-database.html"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">React Native Database - Sync & Store Like a Pro</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#alternatives-to-rxdb" class="table-of-contents__link toc-highlight">Alternatives to RxDB</a><ul><li><a href="#firebase" class="table-of-contents__link toc-highlight">Firebase</a></li><li><a href="#meteor" class="table-of-contents__link toc-highlight">Meteor</a></li><li><a href="#minimongo" class="table-of-contents__link toc-highlight">Minimongo</a></li><li><a href="#watermelondb" class="table-of-contents__link toc-highlight">WatermelonDB</a></li><li><a href="#aws-amplify" class="table-of-contents__link toc-highlight">AWS Amplify</a></li><li><a href="#aws-datastore" class="table-of-contents__link toc-highlight">AWS Datastore</a></li><li><a href="#rethinkdb" class="table-of-contents__link toc-highlight">RethinkDB</a></li><li><a href="#horizon" class="table-of-contents__link toc-highlight">Horizon</a></li><li><a href="#supabase" class="table-of-contents__link toc-highlight">Supabase</a></li><li><a href="#couchdb" class="table-of-contents__link toc-highlight">CouchDB</a></li><li><a href="#pouchdb" class="table-of-contents__link toc-highlight">PouchDB</a></li><li><a href="#couchbase" class="table-of-contents__link toc-highlight">Couchbase</a></li><li><a href="#cloudant" class="table-of-contents__link toc-highlight">Cloudant</a></li><li><a href="#hoodie" class="table-of-contents__link toc-highlight">Hoodie</a></li><li><a href="#lokijs" class="table-of-contents__link toc-highlight">LokiJS</a></li><li><a href="#gundb" class="table-of-contents__link toc-highlight">Gundb</a></li><li><a href="#sqljs" class="table-of-contents__link toc-highlight">sql.js</a></li><li><a href="#absurd-sql" class="table-of-contents__link toc-highlight">absurd-sQL</a></li><li><a href="#nedb" class="table-of-contents__link toc-highlight">NeDB</a></li><li><a href="#dexiejs" class="table-of-contents__link toc-highlight">Dexie.js</a></li><li><a href="#lowdb" class="table-of-contents__link toc-highlight">LowDB</a></li><li><a href="#localforage" class="table-of-contents__link toc-highlight">localForage</a></li><li><a href="#mongodb-realm" class="table-of-contents__link toc-highlight">MongoDB Realm</a></li><li><a href="#apollo" class="table-of-contents__link toc-highlight">Apollo</a></li><li><a href="#replicache" class="table-of-contents__link toc-highlight">Replicache</a></li><li><a href="#instantdb" class="table-of-contents__link toc-highlight">InstantDB</a></li><li><a href="#yjs" class="table-of-contents__link toc-highlight">Yjs</a></li><li><a href="#electricsql" class="table-of-contents__link toc-highlight">ElectricSQL</a></li><li><a href="#signaldb" class="table-of-contents__link toc-highlight">SignalDB</a></li><li><a href="#powersync" class="table-of-contents__link toc-highlight">PowerSync</a></li></ul></li></ul></div></div></div></div></main></div></div></div><div class="block footer"><div class="footer-block"><div class="footer-links"><span><a variant="text" href="/" class="footer-logo-button"><img src="/files/logo/logo.svg" alt="RxDB" loading="lazy"><div>RxDB</div></a><div class="footer-community-links"><a variant="text" href="/chat/" target="_blank"><img src="/img/community-links/discord-logo.svg" alt="RxDB Discord" loading="lazy"></a><a variant="text" href="/code/" target="_blank"><img src="/img/community-links/github-logo.svg" alt="RxDB Github" loading="lazy"></a><a variant="text" href="https://twitter.com/intent/user?screen_name=rxdbjs" target="_blank"><img src="/img/community-links/x-logo.svg" alt="RxDB Twitter" loading="lazy"></a><a variant="text" href="https://www.linkedin.com/company/rxdb" target="_blank"><img src="/img/community-links/linkedin-logo.svg" alt="RxDB LinkedIn" loading="lazy"></a><a variant="text" href="https://stackoverflow.com/questions/tagged/rxdb" target="_blank"><img src="/img/community-links/stack-overflow-logo.svg" alt="RxDB Stack Overflow" loading="lazy"></a></div></span><div class="footer-nav-links"><a variant="text" href="/premium/" target="">Premium</a><a variant="text" href="/consulting/" target="">Support</a><a variant="text" href="/overview.html" target="">Documentation</a><a variant="text" href="/chat/" target="_blank">Discord</a><a variant="text" href="/code/" target="_blank">Github</a><a variant="text" href="https://twitter.com/intent/user?screen_name=rxdbjs" target="_blank">Twitter</a><a variant="text" href="https://www.linkedin.com/company/rxdb" target="_blank">LinkedIn</a></div></div><div class="footer-policy"><div><a variant="text" href="/legal-notice/" target="_blank">Legal Notice</a></div><span class="footer-rights">© 2025 RxDB. All rights reserved.</span></div><img class="footer-img desktop-img" src="/img/footer-column.svg" alt="columns" loading="lazy"></div></div><div class="call-to-action-popup"><div class="close"><div class="text">✕</div></div></div></div>
</body>
</html>