Releases: pubkey/rxdb
Release list
17.5.0
- CHANGE Update the Angular example and the Ionic example from Angular 21 to Angular 22. Both examples now use TypeScript
6.0because@angular/buildv22 requires it. - CHANGE Update the
@angular/coredevDependency that the reactivity-angular plugin is built and type checked against from21.2.18to22.1.0. The@angular/corepeer dependency stays optional and unpinned, so RxDB keeps working with older Angular versions. - FIX dexie RxStorage: the reference counting in
dexie-helper.tsnever closed the underlying Dexie connections and never evicted the state cache entry, so the connections leaked and creating a database with the same name again after the IndexedDB databases were deleted threwDatabaseClosedError. Added a testcase for it intest/unit/rx-storage-dexie.test.ts. #8793 - IMPROVE Serve the docs favicon as
.icoin addition to the.svg, so browsers without SVG favicon support fall back to/files/logo/icon.ico. - FIX Running
tsc --noEmitinsidedocs-src/reported 482 type errors. The docs tsconfig now setsallowImportingTsExtensions(the RxDB sources insrc/use explicit.tsfile endings) and the@theme/*module declarations of the Docusaurus theme packages are referenced, so the swizzled components indocs-src/src/theme/resolve. The remaining errors in the docs components and in a fewsrc/files were fixed, the docs typecheck is clean now. - FIX
deleteFolder()of the backup plugin used the deprecatedfs.rmdirSync(path, { recursive: true }), it now usesfs.rmSync(). - ADD Discord chat hint to RxDB error messages so users can ask for help at https://rxdb.info/chat
- FIX An interrupted schema migration could never complete. Documents that were already stored in the new storage were pushed with
assumedMasterState: undefined, so the replication protocol reported each of them as a conflict. Resolving these conflicts wrote the new document state back into the old storage which emitted on the fork change stream and started the same cycle again, soaddCollections()never resolved and the migration spun conflict cycles until the tab ran out of memory. Push-conflicts of the migration replication are now ignored as intended and the document that is already stored in the new storage is kept. - FIX Canceling a running schema migration left the storage instances that the migration had opened behind.
RxMigrationState.cancel()now closes them, so an interrupted migration no longer leaks the old storage instance, its replication meta storage and their multi-instance BroadcastChannel reference.
FIX schema migration would leave the leader-electionBroadcastChannelopen when the migration threw (for example when amigrationStrategyfailed), keeping the tab leader forever and blocking other tabs from running the migration. The channel is now closed on every code path. (#7827) - FIX
useLiveRxQuerynever unsubscribed from the live query becauseuseEffectdropped the cleanup returned by the asyncrunQuerycallback. Added an unmount test intest/react/react-hooks.test.tsx. #8964 - CHANGE Update
graphqlfrom16.14.2to17.0.2. GraphQL.js v17 requires Node.js22or newer, sonpm install rxdbon older Node.js versions prints anEBADENGINEwarning for thegraphqlpackage. RxDB itself does not import fromgraphql, it is only needed as the peer dependency ofgraphql-wsand for the GraphQL servers in the tests and examples. The dev dependenciesgraphql-httpandgraphql-subscriptionsstill declare a peer dependency range that stops at v16, they are pinned to the rootgraphqlversion viaoverrides. See the GraphQL.js v16 to v17 upgrade guide. - CHANGE Update
graphql-wsfrom5.16.2to6.2.0. The GraphQL replication now imports the client fromgraphql-ws/clientinstead of the package root, so bundles no longer pull in thegraphql-wsserver code and itsgraphqlpeer dependency. Users who run their owngraphql-wsserver have to remove the/lib/part from their imports (graphql-ws/lib/use/wsbecomesgraphql-ws/use/ws) and, when they use theschema,context,onSubscribe,onOperation,onError,onNextoronCompleteserver hooks, adapt them to the new argument list where the full message was replaced by theidand thepayload. See the graphql-ws v6 migration notes. - CHANGE Raise the required Node.js version from
18to20becausegraphql-wsv6 no longer supports Node.js 18, which reached its end of life in April 2025. - ADD
exportJSON()of the json-dump plugin now supports theattachments: trueoption to include the attachments data as base64 strings in the dump.importJSON()restores these attachments. The default isfalseso that dumps stay small. Added testcases. #8924 - FIX The
JD1,JD2andJD3error messages linked to the backup plugin page. They now link to the new JSON Import and Export page which documents thejson-dumpplugin. #8924 - FIX
RxDatabase.close()resolved before the leader election was finished and before the broadcast channel was closed, which made a still running election post on the already closed channel #8893 - UPDATE
broadcast-channelto7.4.0which stops a dead leader elector from becoming leader and posting on a closed channel #8893 - FIX Make the testcase
groups live query write bursts before _ensureEqual when enabledno longer fail randomly. TheauditTime()window ofliveQueryUpdateThrottleTimeopens with the change event of the first insert, not when the write burst is done. On slow storages and loaded CI machines the burst itself took longer than the throttle time, so_ensureEqual()legitimately ran while the later inserts were still going on. The testcase now measures the wall clock time of the burst, only asserts when the burst did fit into the throttle window, and retries the burst otherwise. - IMPROVE Reduce the ESM bundle size by no longer down-transpiling native class syntax in the
dist/esmbuild. The class-lowering babel transforms now only run for the CJS/es5 build, which removes the@babel/runtimehelper imports (inheritsLoose,createClass,readOnlyError,wrapNativeSuper) from the ESM output. This shrinks the measured core+memory bundle from 45088 to 44279 bytes gzip (~1.8%) and removes@babel/runtimefrom the ESM tree entirely. The CJS build and all other syntax transforms are unchanged. - CHANGE Remove the
reconnecting-websocketdependency, which was unmaintained since 2020. The websocket replication now uses a small reconnecting websocket client that ships with RxDB itself. The behavior stays the same: the client reconnects with an exponential backoff and queues the messages that are sent while it is not connected. A connection attempt that does not open within the connection timeout now emits the new error codeRC_WEBSOCKET_TIMEOUTon theerror$stream of the replication. - FIX [replication-microsoft-onedrive] Make realtime sync reliable by sending a durable signaling message on every push in addition to the ephemeral WebRTC
RESYNCping. A ping to a peer whose WebRTC datachannel is not connected (handshake not finished yet or the connection dropped) was silently lost with no other trigger to re-pull, which made theshould realtime sync on both sidestest flaky. Peers now also converge over the polled signaling channel and keep the poll backoff responsive while there is traffic. - IMPROVE Add field-level comments to the
RxJsonSchematypings so coding agents and IDE users see the RxDB-specific schema rules (ref,final,default,maxLengthon indexed strings,minimum/maximum/multipleOfon indexed numbers) directly at the fields. Also document that schematitleanddescriptionare read by LLMs when plugins like webmcp pass the JSON schema to AI agents. #8832 - Update the Svelte example from Svelte 4 to Svelte 5 with runes. Shared state now lives in a
store.svelte.jsmodule with$state, and the RxDB query subscription is created in an$effectso it is cleaned up when the component is destroyed. - FIX In the Svelte example, saving an already existing note threw because
RxDocument.update()was used without theupdateplugin being added. The note editor now uses the coreincrementalPatch()method. Also added an e2e testcase that edits an existing note. - FIX The Tauri example e2e testcase
should insert a heroasserted on the rendered hero after a fixedbrowser.pause(100). On a slow CI runner the insert through the SQLite trial storage plus the re-render of the query subscription takes longer than that, so the testcase failed withExpected length: 1, Received length: 0. It now waits for the hero element to exist instead of pausing for a fixed time. (#8919) - Refactored the [WebMCP plugin]...
17.4.0
ADD test to ensure awaitDocumentPushed() resolves after a document push first had a conflict that was later resolved. (#8632)
ADD replicationState.awaitDocumentPushed(rxDocument) which returns a promise that resolves once the given RxDocument state was successfully pushed to the server. (#8632)
- ADD Datenschutzerklärung / Privacy Policy page (German and English) at
/privacy/, set tonoindex, and linked in the docs footer next to the Legal Notice. - ADD
replicationState.conflict$observable that emits each conflict that was reported by the remote in the response of the push handler, together with the output of the conflictHandler that resolved it. (#8742) - Add a
create-sem-pageClaude skill that generates a new SEM landingpage underdocs-src/src/pages/semfrom a slug plus 3 titles, 3 descriptions and 3 sets of bulletpoints that are a/b tested against each other. Adds thegetSemVariation()helper indocs-src/src/components/a-b-tests.tsxfor stable per visitor variation assignment and tracking. See https://github.com/pubkey/rxdb
FIX broken links on the alternatives page. Ten alternative article pages had a redundantalternatives/prefix in theirslugfrontmatter, which Docusaurus resolves relative to the file directory and produced doubled URLs like/articles/alternatives/alternatives/aws-amplify-datastore-alternative.html.
FIXawaitDocumentPushed()never resolved for documents that were already pushed when the storage uses a non-default checkpoint format, like the sharding RxStorage. It now compares the document state with the assumed master state from the replication meta instance instead of the push checkpoint. (#8632) - FIX CI failing on dependency-update PRs with
ETARGET No matching version foundby removingNPM_CONFIG_PREFER_OFFLINEfrom the workflows so npm revalidates cached registry metadata. - FIX Reserve explicit
width/heighton the docs images that Google Search Console reported with Cumulative Layout Shift (CLS), starting from the localStorage article. Covers the two in-article RxDB logos, the navbar logo, the footer logo, the footer community icons, and the "Was this page helpful?" thumbs-up and Discord icons so the browser reserves space before the SVGs load. - FIX Add an accessible
aria-labelto the icon-only Discord and GitHub navbar links and analttext to the footer Discord icon. - CHANGE Replace the raw centered logo
<img>HTML in all articles with a reusableRxdbLogoMDX component that derives an explicitheightfrom thewidth, so every article reserves image space and avoids CLS. - CHANGE Emit source maps in the production docs build (
devtool: 'source-map') so tools like Lighthouse can map the minified bundle back to the source and give more detailed tips. - FIX document the non-premium collection limit in the addCollections docs and premium pricing page, linked to #8614
- FIX dev-mode:
COL13andCOL16errors now report the type of the invalid value instead of a constant wrong type, and the field name check no longer accepts square brackets in field names because they cannot be used as javascript variables. - FIX
DocumentCacheno longer downgrades the cached latest document state when an older change event arrives out of order in multiInstance mode. This prevents two instances from diverging and fixes a flakyupsertLocal()concurrency test. Fixes #8609
- Fix
npm run docs:buildso it installsdocs-srcdependencies when needed before building the docs.
- FIX Add accessible
alttext to the "Was this page helpful?" thumbs-up and thumbs-down icons in the docs footer that an accessibility audit flagged as missing thealtattribute. - FIX reduce RxDB bundle size by using the internal
flatClone()helper inRxSchemainstead of importing it fromevent-reduce-js - FIX Handle 409 conflict errors and retry in
upsertLocalto prevent concurrency hazards with other browser tabs. Fixes #8609 - FIX:
createEmptyFile()in the Microsoft OneDrive replication plugin now uses the POST response body directly instead of an extralistFilesInFoldercall, avoiding a race condition. The test assertion forfileId.lengthwas also relaxed to> 0since the mock server can generate short IDs. - FIX: Increased the
OPEN_COLLECTIONSretry timeout from 1050ms (35×30ms) to 9000ms (300×30ms) to prevent false COL23 errors when using slow storage backends like MongoDB where tests hold collections open for several seconds. Also fixedstartTimetracking sotimeInRetryin the error now reflects the total wait time. - FIX: queries with
$gt/$ltbounds outside the schemaminimum/maximumnow correctly include boundary documents instead of excluding them due to index-string clamping. Fixed #8601 - FIX SEM landingpages always showed the first variation after clearing localStorage.
getSemVariation()indocs-src/src/components/a-b-tests.tsxreturned an in-memory cached index before reading localStorage, so clearing storage had no effect until a full page reload reset the module state (which does not happen on client side navigations or with dev server hot module replacement). localStorage is now the single source of truth, so a cleared storage reliably re-randomizes one of the variations. See https://github.com/pubkey/rxdb
Removed the appended| RxDB - JavaScript Databasesite-title suffix from SEO page titles by swizzling thePageMetadatatheme component, so the<title>andog:titlenow contain only the page title. See https://github.com/pubkey/rxdb - FIX storage-sqlite: removed
console.dircalls which areundefinedin production React Native / Hermes runtimes and threwTypeError: undefined is not a functioninsideopenSqliteTransaction, masking the real SQLite error and bypassing theBEGIN;retry loop. #8635 - FIX utils:
getFromObjectOrThrow()no longer throws on existing falsy values like0,''orfalse, andflattenObject()no longer drops keys whose value isnull.
Fix WebMCP v3 tests by resetting the WebMCP polyfill state between unit tests sonavigator.modelContextTestingis reinstalled reliably after each test run. Related to PR #8673 - IMPROVE query planner:
$inqueries on indexed fields now limit the scanned index range to the min/max of the given values instead of doing a full scan. This makes$inqueries with multiple values use the index in all RxStorage implementations that use the RxDB query planner. #8631 - IMPROVE trial SQLite storage: raise the document limit from 300 to 500, stop counting deleted (tombstone) documents towards the limit, and log a loud warning on each write once usage reaches ~80% of the document or operation limit. See https://rxdb.info/rx-storage-sqlite.html
- CHANGE Display Pro and Pro Plus tier pricing as per-month figures, update title to "RxDB for Professionals", merge subtitles, and clean up redundant header sections.
- Disallow crawling of the published
.mdfiles (generated for the llms.txt viagenerateMarkdownFiles) inrobots.txtso the raw markdown sources do not appear as duplicate content in search engines. See https://github.com/pubkey/rxdb - Add an optional
sem.bulletpointsfield to the landingpageSemPageconfig so SEM pages can customly define and a/b test the hero section bulletpoints like "Build apps that work offline". When not set, the default bulletpoints are used. See https://github.com/pubkey/rxdb - Add SEM landingpage
gaawsds1(a/b testing 3 title/description/bulletpoint variations for migrating off deprecated offline sync) at/sem/gaawsds1.html. - Add SEM landingpage
gaawsds2(a/b testing 3 title/description/bulletpoint variations for the open-source local-first database) at/sem/gaawsds2.html. - Add SEM landingpage
gaawsds3(a/b testing 3 title/description/bulletpoint variations for reliable offline sync you control) at/sem/gaawsds3.html. - Add SEM landingpage
gaencdb1(encrypted local database for JavaScript apps) that a/b tests 3 title, description and bulletpoint variations at/sem/gaencdb1.html. - Add SEM landingpage
gaencdb2(field-level encryption for JavaScript and TypeScript apps) that a/b tests 3 title, description and bulletpoint variations at/sem/gaencdb2.html. - Add SEM landingpage
gaencdb3(encrypt local app data on web and mobile) that a/b tests 3 title, description and bulletpoint variations at/sem/gaencdb3.html. - ADD SEM landingpages
/sem/gaidxdb1.html,/sem/gaidxdb2.htmland/sem/gaidxdb3.html, each a/b testing 3 variations of the hero title, description and bulletpoints. - Added SEM landingpage
gajsondb1(JSON database for JavaScript apps) that a/b tests 3 title, description and bulletpoint variations. - Added SEM landingpage
gajsondb2(open-source NoSQL JSON database) that a/b tests 3 title, description and bulletpoint variations. - Added SEM landingpage
gajsondb3(real JSON database vs JSON files) that a/b tests 3 title, description and bulletpoint variations. - Add SEM landingpage
garealm1(maintained local database with realtime sync for teams migrating off deprecated mobile sync) that a/b tests 3 title, description and bulletpoint variations at/sem/garealm1.html. - Add SEM landingpage
garealm2(local-first JavaScript database with self-hostable sync) that a/b tests 3 title, description and bulletpoint variations at/sem/garealm2.html. - Add SEM landingpa...
17.3.0
- TEST add reproduction for composite primary key auto-fill when only
nameandnumberare set in apreInserthook withoutid(#8527) - DOCS expand
partial-sync.mdto fully describe what partial sync is, when to use it, how to implement it with multiplereplicateRxCollectionstates, per-scope checkpoints, document tagging viapull.modifier/push.modifier, scope cleanup, real-time pull streams, and tradeoffs. - FIX allow
preInserthooks to set composite primary key fields (for examplenameandnumber) without manually settingid, so RxDB computes the composite primary key afterwards (#8527) - FIX live-query subscriptions being delayed under concurrent writes, by using a fixed
promiseWait(20)in the_execOverDatabase()rerun path instead of increasing the wait time with each rerun #8444 - FIX schema using
patternPropertieswith square bracket character classes no longer gets incorrectly interpreted as an array index in dev-mode schema validation. #8522 - FIX Use the lighter background color
var(--bg-color)for pricing tiers on the premium page. - FIX Add
IconChevronsRightcomponent and use it as the icon for all pricing tier buttons on the premium page. - FIX Keep
IconArrowUpRightcomponent for future use. - FIX Update
.pricing-tierstyling incustom.cssto usewidth: 90%on screens smaller than 768px. - FIX Position
tier-noteelements at the very top of each tier header block. - FIX Add a tablet media query to limit
.pricing-tiersmax-width to560pxfor screen sizes between 769px and 1120px to enforce a balanced 2-2 layout. - FIX React
RxDatabaseProviderTypeScript typings to acceptRxDatabaseinstances with concrete typed collection maps that do not use a string index signature - FIX generated
.d.tsfiles underdist/types/contained.tsextension import specifiers that TypeScript withmoduleResolution: "bundler"could not resolve, causing reactive field types (doc.field$$) to degrade toSignal<unknown>in Angular projects.scripts/fix-types.mjsnow rewrites all generated declaration files. See #8488 - ADD
replication-google-drivespace: 'drive' | 'appDataFolder'option to sync into Google Drive's hidden per-application data folder. When set toappDataFolder, the plugin stores data under theappDataFolderroot, scopes everyfiles.listrequest withspaces=appDataFolder, and makesfolderPathoptional. Requires thehttps://www.googleapis.com/auth/drive.appdataOAuth scope. - FIX writes to an
RxCollectionwhile a schema migration is pending or running now fail fast with a clearCOL25error instead of racing the migration and surfacing asRC_PUSH. - ADD
replication-google-driveplugin now supports attachment replication. Attachment binary data is stored as base64 in a separate_attachments_datafield of the document JSON file on Google Drive, keeping_attachmentsas clean stubs. Attachment replication is enabled automatically when the collection schema hasattachments: {}defined and can be disabled by passingattachments: falsetoreplicateGoogleDrive(). - ADD
replication-microsoft-onedriveplugin now supports attachment replication. Attachment binary data is stored as base64 in a separate_attachments_datafield of the document JSON file on OneDrive, keeping_attachmentsas clean stubs. Attachment replication is enabled automatically when the collection schema hasattachments: {}defined and can be disabled by passingattachments: falsetoreplicateMicrosoftOneDrive(). - REFACTOR move the attachment serialisation helpers (
serializeDocAttachments,deserializeDocAttachments,stripAllAttachmentDataForComparison) tosrc/replication-protocol/helper.tsso they can be shared between the google-drive and microsoft-onedrive replication plugins.
RxDB Premium
- FIX (storage-indexeddb) Eliminated unhandled
TransactionInactiveErrorrejections that occurred during bulk replication pulls when concurrent reads hit the WAL flush window. See #8497
NOTICE: An overview about all releases can be found at the changelog
Join RxDB:
17.2.0
- ADD React
useRxDocument(collection, primaryKey)hook for subscribing to a single document by primary key with live updates - ADD React
useReplicationStatus(replicationState)hook that exposessyncing,error,lastSyncedAt, andcanceledfrom replication observables - DOCS Mark
liveQueryUpdateThrottleTimeas a beta feature in the documentation - DOCS Move the main
liveQueryUpdateThrottleTimedocumentation torx-query.md;rx-database.mdandrx-collection.mdnow only list the option with a short description and a link - FIX
allAttachments$observable emitting a new value on every document revision even when the set of attachments is unchanged, by filtering emissions withdistinctUntilChangedbased on attachment ids and digests - FIX
RxAttachment.remove()not cleaning up binary attachment data from storage, becausecategorizeBulkWriteRows()only iterated over the new document's_attachmentsand never detected attachments removed between revisions - FIX attachments-compression
isCompressibleType()not stripping RFC 2045 parameters (e.g.; charset=utf-8) from MIME types, causing attachments with a charset-qualified type likeapplication/json; charset=utf-8to silently bypass compression when matched against exact patterns likeapplication/json - FIX backup plugin not removing the folder of a deleted document when the change batch only contained deletions, because
findByIds()returned an empty map and the loop exited early before running the deletion handler - FIX
RxCollection.cleanup()returningundefinedinstead ofbooleanas declared by its TypeScript return type, because the cleanup plugin implementation did not return the result fromcleanupRxCollection() - FIX CRDT plugin
bulkInserthook not including the composite primary key in CRDT operations, causing the primary key field to be lost during conflict resolution rebuild for schemas that use a composite primary key - ADD dev-mode check (SC43) to prevent encrypted fields from being nested inside other encrypted fields. When a parent path is encrypted, the entire object is encrypted so child paths must not be listed separately in the
encryptedarray. - FIX
findByIds()query operationsmodify(),patch(),incrementalModify(),incrementalPatch(), andincrementalRemove()returning an Array instead of a Map. Also fixfindByIds().remove()crashing withTypeError: docs.remove is not a functionbecause it did not handle the Map return type fromfindByIds(). - FIX
getJsonSchemaWithoutMeta()not removing internal meta field references (_deleted,_meta.lwt) from indexes, while correctly removing them from properties and required, causing the returned schema to be internally inconsistent - FIX
getLocal()returning a deleted local document from the document cache instead ofnull, causing inconsistent behavior between cache hits and storage lookups after a local document is removed - FIX
replication-google-driveplugin requestingetagin the Google Drive v3 list APIfieldsparameter, which is rejected by the real API; etag is now fetched separately via the v2 API - FIX
RxLocalDocument.get$()on nested object/array paths emitting spurious values when unrelated document fields changed, becausedistinctUntilChanged()used reference equality which always fails for non-primitive values across document revisions - FIX database-level
RxLocalDocument.$observable emitting events from a collection-level local document that shares the same id, because the filter on the database event stream only checkedisLocaland did not exclude events that originated from a collection - FIX localstorage storage
remove()not deleting attachment data from localStorage, causing orphaned attachment entries to remain after the storage instance is removed - FIX schema migration not forwarding
_attachmentsacross chained migration strategies, so later strategies received the document with_attachmentsasundefinedwhen an earlier strategy returned a new object without forwarding them, breaking theWithAttachments<DocData>contract and preventing strategies from reading or mutating attachment metadata as described in the docs - FIX schema migration losing attachments when the migration strategy returns a new object, because
migrateDocumentData()never restored_attachmentsafter running the strategies while_metaand_deletedwere restored - FIX
RxMigrationState.migratePromise()returningcount.percent: 0instead of100when the migration status isDONEand no migration was needed, which is inconsistent with theupdateStatus()logic that correctly sets percent to100when total is0 - FIX ORM attachment-method names conflicting with built-in
RxAttachmentmethods (getData,getStringData,getDataBase64,remove) not being validated, silently shadowing the built-in method on every attachment instance and preventing users from retrieving their attachment data. Dev-mode now throws a clearRxError(COL17) during collection creation. - FIX ORM document method names conflicting with schema-generated suffixed getters (
field$,field$$,field_) not being validated, causing aTypeErrorcrash at runtime instead of a clearRxError(COL18) during collection creation - FIX
RxDatabase.passwordbeing an enumerable property, which could leak the plaintext password throughObject.keys(), object spreading,Object.assign(), orJSON.stringify()in logging and error reporting contexts - FIX
RxPipelineerror state blocking unrelated reads on the destination collection, because the pipeline'swaitBeforeWriteFnhook always calledawaitIdle()which re-throws the stored handler error forever. After a handler throws, reads on the destination collection now proceed normally instead of re-throwing the pipeline error. - FIX
RxPipelinedeadlock when multiple pipelines share the same destination collection and their handlers read from the destination, because each pipeline'swaitBeforeWriteFnonly recognized its own flagged function name in the stack instead of any pipeline's flagged function prefix - FIX
RxDocument.populate()throwingDOC6for array fields whenrefis defined onitemsinstead of on the array field itself, even thoughcreateRxSchemaaccepts both patterns - FIX
RxDocument.populate()silently returningnullfor invalid schema paths and non-ref fields when the value at that path was falsy. The documentedDOC5/DOC6errors are now thrown consistently, regardless of whether the document has a value at the given path. - FIX
populate()on array ref fields returning documents in wrong order when two documents reference the same set of IDs in different order, becausefindByIdsquery cache deduplication reused a cached query whose Map iteration order matched the first caller instead of preserving each document's own ref array order - FIX query-builder operators (
gt,lt,ne,in, etc.) silently dropping the implicit$eqcondition when a selector shorthand value (e.g.{ age: 5 }) was used and then another operator was chained on the same field via the query-builder API - FIX default cache replacement policy not evicting executed unsubscribed queries when subscribed queries caused the total cache size to exceed
tryToKeepMax, because the eviction count was calculated from only the unsubscribed query count instead of the total cache size - FIX React hooks
useRxQueryanduseLiveRxQueryinitializingloadingstate asfalseinstead oftrue, causing components to briefly render with empty results before the query resolved #8292 - FIX remote storage
remove()not unsubscribing from internal subscriptions and not completing thechangeStream()observable, unlikeclose()which correctly performs both cleanup steps - FIX replication upstream marking documents as successfully pushed when the replication is paused during a push retry, because
masterWrite()returns an empty conflicts array on pause and the upstream updates the meta instance and checkpoint without verifying the push actually succeeded, causing those documents to never be retried on resume - FIX replication
sent$observable emitting documents in the master format (with the user-defineddeletedField) instead of the typedWithDeleted<RxDocType>format (with_deleted: boolean), because thedeletedFieldswap mutated the same row object that was later forwarded to subscribers - FIX replication
sent$observable emittingnullfor documents that were filtered out by apush.modifierreturningnull, violating itsObservable<WithDeleted<RxDocType>>type and falsely reporting filtered documents as sent to the endpoint - FIX RxState
_cleanup()not returningtrueon completion, causing the cleanup plugin loop to never terminate and run indefinitely - FIX RxState
$observable emitting duplicate and stale values on each write because both_ownEmits$andcollection.eventBulks$triggered emissions for own-instance events - FIX
RxState.get$()(and thefield$proxy accessor) emitting a stale value when subscribed after the state was modified, becausestartWith()eagerly captured the current value at observable creation time instead of at subscription time - FIX(types)
RxDocument.collectionlosing theReactivitygeneric because it was passed as the third type argument toRxCollection(which isStaticMethods) instead of the fifth, causingdoc.collection.find().$$and similar calls to be typed as the default reactivity instead of the user's custom reactivity type - FIX
RxDocument.$observable emitting stale document state when subscribed after the document was modified, because `startW...
17.1.0
-
FIX CRDT plugin
bulkInserthook not including schema default values in CRDT operations, causing data loss during conflict resolution rebuild when fields rely on schema defaults -
FIX
RxDocument.get$()on nested object/array paths emitting spurious values when unrelated document fields changed, becausedistinctUntilChanged()used reference equality which always fails for non-primitive values across document revisions -
FIX
incrementalUpsert()throwing a CONFLICT error when a concurrentupsert()/insert()creates the same document between the internalfindOne()andinsert()calls -
FIX
upsertLocal()on a previously removed local document keeping the document in deleted state instead of un-deleting it -
FIX push-only replication losing local writes that occur during a pause because
reSync()events were filtered out when no pull handler was configured -
FIX
getStartIndexStringFromUpperBound()incorrectly mappingINDEX_MINto'1'for boolean index fields, causing queries with exclusive bounds ($gt/$lt) on a field preceding a boolean index field to include boundary documents in the results -
FIX leader-election plugin not calling
die()on the LeaderElector when the database is closed, becauseLEADER_ELECTORS_OF_DBwas never populated due to a dead code branch -
FIX encryption plugin schema transformation not correctly handling nested dot-notation encrypted paths (e.g.
'nested.field'), causing validation failures when using a validator storage with non-string nested encrypted fields -
FIX dev-mode
checkSchema()not validating composite primary key fields for encryption (SC15), index (SC13), unique (SC14), and type (SC16) constraints because it compared property names against the primaryKey object instead of resolving the primary field path -
FIX
findOne().remove()crashing withTypeError: Cannot read properties of nullwhen no document matches the query, instead of returningnull -
ADD
findOne().remove(true)to throw when no document matches, consistent withfindOne().exec(true) -
FIX schema migration losing
_deletedstate when migration strategy returns a new object, causing deleted documents to be resurrected after migration -
FIX
RxPipeline.remove()not properly cleaning up checkpoint when called during active processing, causing a re-added pipeline with the same identifier to skip already-processed documents instead of starting fresh -
FIX cleanup plugin prematurely exiting its retry loop when
storageInstance.cleanup()returnsfalse(batched cleanup), becauseArray.find()returns the found valuefalseand!falseevaluates totrue, causingisDoneto be set incorrectly -
FIX encryption plugin
validatePassword()leaking the plaintext password inRxErrorparameters and error messages when password validation fails -
FIX
database.remove()not calling collectiononRemovehandlers, becauseclose()unsubscribed all listeners before the remove operation could trigger them -
FIX query-builder
eq()/equals()silently overwriting other operator conditions on the same field because the value was stored as a raw primitive instead of using the$eqoperator form -
FIX
deleted$observable emitting on every document revision instead of only when the deleted state changes, by addingdistinctUntilChanged() -
FIX
postSavecollection hook not receiving the RxDocument instance as the second argument, unlikepostInsertandpostRemovewhich correctly pass it -
FIX
getJsonSchemaWithoutMeta()not removing_revfrom schema properties, while correctly removing other internal meta properties (_deleted,_meta,_attachments) -
FIX
allAttachments$observable emitting attachments with a stale document reference, causingattachment.docto point to an outdated document version instead of the latest one -
FIX RxState not correctly recovering full-state replacements (via
set('', modifier)) from disk on database reopen, causing corrupted state -
FIX memory storage
count()returning incorrect results when the selector is not fully satisfied by the index and the query has alimitset -
FIX
replicateRxCollection().remove()on a never-started replication now creates the meta instance and deletes its data instead of skipping cleanup -
FIX
REPLICATION_STATE_BY_COLLECTIONnot cleaned up oncancel()/remove(), leaking replication state references -
FIX floating-point rounding overflow in index string decimal generation, where
Math.roundcould produce a value equal to the multiplier (e.g. 10 instead of max 9), creating a string one character too long and breaking sort order in compound indexes -
FIX
normalizeMangoQuery()skipped fully-matching indexes when choosing default sort order, falling back to the first index instead of using the best match -
FIX RxState
set('', modifier)passedundefinedto the modifier instead of the current state -
FIX
RxMigrationStatus.count.percentreturningNaNinstead of100when migrating a collection with 0 documents -
FIX
fillWithDefaultSettings()index deduplication was broken becauseArray.filter()return value was discarded, causing duplicate indexes in schemas when user-defined indexes become identical after adding_deletedprefix and primary key suffix -
FIX encryption plugin not stripping type-specific schema keywords (
maxLength,required,items, etc.) from encrypted fields, causing validation errors when using a validator storage with encryption -
FIX incorrect index string generation for negative decimal numbers causing wrong sort order and query results
-
FIX
rateQueryPlan()evaluatedstartKeystwice instead ofendKeys, causing suboptimal index selection for$lt/$ltequeries. -
FIX event-reduce mutating cached
docsDataMapcausing missing documents after insert-delete cycles -
FIX
modify()not deep-cloning document data, allowing the modifier to corrupt internal state via shared nested references -
FIX
fillObjectWithDefaultsshared mutable references for non-primitive schema defaults (arrays/objects) causing corrupted values on subsequent inserts
NOTICE: An overview about all releases can be found at the changelog
Join RxDB:
17.0.0
🚀 RxDB v15 is released
- A list of changes for RxDB v17 can be found here
NOTICE: An overview about all releases can be found at the changelog
Join RxDB:
17.0.0-beta.25
- A list of changes for RxDB v17 can be found here
NOTICE: An overview about all releases can be found at the changelog
Join RxDB:
17.0.0-beta.24
- A list of changes for RxDB v17 can be found here
NOTICE: An overview about all releases can be found at the changelog
Join RxDB:
17.0.0-beta.23
- A list of changes for RxDB v17 can be found here
NOTICE: An overview about all releases can be found at the changelog
Join RxDB:
17.0.0-beta.22
- A list of changes for RxDB v17 can be found here
NOTICE: An overview about all releases can be found at the changelog