Skip to content

Commit 172c16a

Browse files
16.8.1
1 parent d699be9 commit 172c16a

File tree

273 files changed

+477
-480
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

273 files changed

+477
-480
lines changed

CHANGELOG.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33

44
<!-- CHANGELOG NEWEST -->
55

6-
- FIX col.find() ignores the primaryKey index if another index was defined [#6925](https://github.com/pubkey/rxdb/pull/6925)
76
<!-- ADD new changes here! -->
87

98
<!-- /CHANGELOG NEWEST -->
109

1110
<!-- RELEASE BELOW -->
1211

12+
### 16.8.1 (14 March 2025)
13+
14+
- FIX col.find() ignores the primaryKey index if another index was defined [#6925](https://github.com/pubkey/rxdb/pull/6925)
15+
1316
### 16.8.0 (3 March 2025)
1417

1518
- Add a free trial version of the [SQLite RxStorage](https://rxdb.info/rx-storage-sqlite.html)

dist/cjs/plugins/utils/utils-rxdb-version.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/cjs/plugins/utils/utils-rxdb-version.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/esm/plugins/utils/utils-rxdb-version.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/esm/plugins/utils/utils-rxdb-version.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/types/plugins/storage-denokv/index.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { RxStorageInstanceDenoKV } from "./rx-storage-instance-denokv.ts";
44
export declare class RxStorageDenoKV implements RxStorage<DenoKVStorageInternals<any>, DenoKVSettings> {
55
settings: DenoKVSettings;
66
name: string;
7-
readonly rxdbVersion = "16.8.0";
7+
readonly rxdbVersion = "16.8.1";
88
constructor(settings: DenoKVSettings);
99
createStorageInstance<RxDocType>(params: RxStorageInstanceCreationParams<RxDocType, DenoKVSettings>): Promise<RxStorageInstanceDenoKV<RxDocType>>;
1010
}

dist/types/plugins/storage-dexie/rx-storage-dexie.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { RxStorageInstanceDexie } from './rx-storage-instance-dexie.ts';
44
export declare class RxStorageDexie implements RxStorage<DexieStorageInternals, DexieSettings> {
55
settings: DexieSettings;
66
name: string;
7-
readonly rxdbVersion = "16.8.0";
7+
readonly rxdbVersion = "16.8.1";
88
constructor(settings: DexieSettings);
99
createStorageInstance<RxDocType>(params: RxStorageInstanceCreationParams<RxDocType, DexieSettings>): Promise<RxStorageInstanceDexie<RxDocType>>;
1010
}

dist/types/plugins/storage-mongodb/rx-storage-mongodb.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { RxStorageInstanceMongoDB } from './rx-storage-instance-mongodb.ts';
44
export declare class RxStorageMongoDB implements RxStorage<MongoDBStorageInternals, MongoDBSettings> {
55
databaseSettings: MongoDBDatabaseSettings;
66
name: string;
7-
readonly rxdbVersion = "16.8.0";
7+
readonly rxdbVersion = "16.8.1";
88
constructor(databaseSettings: MongoDBDatabaseSettings);
99
createStorageInstance<RxDocType>(params: RxStorageInstanceCreationParams<RxDocType, MongoDBSettings>): Promise<RxStorageInstanceMongoDB<RxDocType>>;
1010
}

dist/types/plugins/storage-remote/rx-storage-remote.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { MessageFromRemote, RemoteMessageChannel, RxStorageRemoteInternals,
44
export declare class RxStorageRemote implements RxStorage<RxStorageRemoteInternals, any> {
55
readonly settings: RxStorageRemoteSettings;
66
readonly name: string;
7-
readonly rxdbVersion = "16.8.0";
7+
readonly rxdbVersion = "16.8.1";
88
private seed;
99
private lastRequestId;
1010
messageChannelIfOneMode?: Promise<RemoteMessageChannel>;

dist/types/plugins/storage-sqlite/index.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export * from './sqlite-basics-helpers.ts';
88
export declare class RxStorageSQLiteTrial implements RxStorage<SQLiteInternals, SQLiteInstanceCreationOptions> {
99
settings: SQLiteStorageSettings;
1010
name: string;
11-
readonly rxdbVersion = "16.8.0";
11+
readonly rxdbVersion = "16.8.1";
1212
constructor(settings: SQLiteStorageSettings);
1313
createStorageInstance<RxDocType>(params: RxStorageInstanceCreationParams<RxDocType, SQLiteInstanceCreationOptions>): Promise<RxStorageInstanceSQLite<RxDocType>>;
1414
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
/**
22
* This file is replaced in the 'npm run build:version' script.
33
*/
4-
export declare const RXDB_VERSION = "16.8.0";
4+
export declare const RXDB_VERSION = "16.8.1";

dist/types/rx-database.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export declare class RxDatabaseBase<Internals, InstanceCreationOptions, Collecti
2929
readonly allowSlowCount?: boolean | undefined;
3030
readonly reactivity?: RxReactivityFactory<any> | undefined;
3131
readonly idleQueue: IdleQueue;
32-
readonly rxdbVersion = "16.8.0";
32+
readonly rxdbVersion = "16.8.1";
3333
/**
3434
* Contains all known non-closed storage instances
3535
* that belong to this database.

docs/404.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<link rel="preconnect" href="https://www.googletagmanager.com">
1111
<script>window.dataLayer=window.dataLayer||[]</script>
1212
<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.e5fcb770.css">
13-
<script src="/assets/js/runtime~main.564f139d.js" defer="defer"></script>
14-
<script src="/assets/js/main.12cd979d.js" defer="defer"></script>
13+
<script src="/assets/js/runtime~main.b0db9c51.js" defer="defer"></script>
14+
<script src="/assets/js/main.b63c220e.js" defer="defer"></script>
1515
</head>
1616
<body class="navigation-with-keyboard">
1717
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PL63TR5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>

docs/adapters.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<link rel="preconnect" href="https://www.googletagmanager.com">
1111
<script>window.dataLayer=window.dataLayer||[]</script>
1212
<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.e5fcb770.css">
13-
<script src="/assets/js/runtime~main.564f139d.js" defer="defer"></script>
14-
<script src="/assets/js/main.12cd979d.js" defer="defer"></script>
13+
<script src="/assets/js/runtime~main.b0db9c51.js" defer="defer"></script>
14+
<script src="/assets/js/main.b63c220e.js" defer="defer"></script>
1515
</head>
1616
<body class="navigation-with-keyboard">
1717
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PL63TR5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>

docs/alternatives.html

+7-7
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<link rel="preconnect" href="https://www.googletagmanager.com">
1111
<script>window.dataLayer=window.dataLayer||[]</script>
1212
<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.e5fcb770.css">
13-
<script src="/assets/js/runtime~main.564f139d.js" defer="defer"></script>
14-
<script src="/assets/js/main.12cd979d.js" defer="defer"></script>
13+
<script src="/assets/js/runtime~main.b0db9c51.js" defer="defer"></script>
14+
<script src="/assets/js/main.b63c220e.js" defer="defer"></script>
1515
</head>
1616
<body class="navigation-with-keyboard">
1717
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PL63TR5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
@@ -40,7 +40,7 @@ <h4 class="anchor anchorWithStickyNavbar_LWe7" id="firebase---cloud-firestore">F
4040
<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>
4141
<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>
4242
<p align="center"><img src="./files/alternatives/meteor_text.svg" alt="MeteorJS alternative" class="img-padding" height="60"></p>
43-
<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.
43+
<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.
4444
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>
4545
<p>Meteor uses MongoDB in the backend and can replicate with a Minimongo database in the frontend.
4646
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>
@@ -125,17 +125,17 @@ <h3 class="anchor anchorWithStickyNavbar_LWe7" id="apollo">Apollo<a href="#apoll
125125
<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>
126126
<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>
127127
<p>Replicache is a client-side sync framework for building realtime, collaborative, <a href="/articles/local-first-future.html">local-first</a> 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.
128-
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 &lt; $200k revenue (ARR) and &lt; $500k in funding. (2024: Replicache will be free and Rocicorp are working on a new Zerosync product to succeed Replicache and Reflect.)</p>
128+
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 &lt; $200k revenue (ARR) and &lt; $500k in funding. (2024: Replicache will be free and Rocicorp are working on a new Zerosync product to succeed Replicache and Reflect.)</p>
129129
<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>
130-
<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&#x27;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>
130+
<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&#x27;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>
131131
<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>
132132
<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>
133133
<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>
134-
<p>2024: ElectricSQL is being rewritten in a new Electric-Next branch, which focuses on partial syncing of (&quot;shapes&quot;) 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>
134+
<p>2024: ElectricSQL is being rewritten in a new Electric-Next branch, which focuses on partial syncing of (&quot;shapes&quot;, which makes is basically a NoSQL like document database) 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>
135135
<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>
136136
<p>SignalDB provides a reactive, in-memory local-lirst JavaScript database with real-time sync, bit it doesn&#x27;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>
137137
<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>
138-
<p>PowerSync is a flexible &quot;framework&quot; 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>
138+
<p>PowerSync is a &quot;framework&quot; 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>
139139
<h1>Read further</h1>
140140
<ul>
141141
<li><a href="https://github.com/pubkey/client-side-databases" target="_blank" rel="noopener noreferrer">Offline First Database Comparison</a></li>

docs/articles/angular-database.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<link rel="preconnect" href="https://www.googletagmanager.com">
1111
<script>window.dataLayer=window.dataLayer||[]</script>
1212
<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.e5fcb770.css">
13-
<script src="/assets/js/runtime~main.564f139d.js" defer="defer"></script>
14-
<script src="/assets/js/main.12cd979d.js" defer="defer"></script>
13+
<script src="/assets/js/runtime~main.b0db9c51.js" defer="defer"></script>
14+
<script src="/assets/js/main.b63c220e.js" defer="defer"></script>
1515
</head>
1616
<body class="navigation-with-keyboard">
1717
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PL63TR5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>

0 commit comments

Comments
 (0)