This issue has been created
There are 6 updates.
 
 
Cristal / cid:jira-generated-image-avatar-9de248f9-50cc-44ba-ba0f-23561eb889be CRISTAL-835 Closed

Upgrade to dexie 4.4.4

 
View issue   ·   Add comment
 

Issue created

 
cid:jira-generated-image-avatar-2888e211-f32b-4a9e-91ec-d4cf77f12d18 Manuel Leduc created this issue on 17/Jul/26 14:34
 
Summary: Upgrade to dexie 4.4.4
Issue Type: cid:jira-generated-image-avatar-9de248f9-50cc-44ba-ba0f-23561eb889be Task
Affects Versions: 1.5.0
Assignee: Unassigned
Components: Dependency Upgrades
Created: 17/Jul/26 14:34
Priority: cid:jira-generated-image-static-major-2b0d8d52-897c-4b9f-93f9-5e7e6875b9c2 Major
Reporter: Manuel Leduc
Description:

v4.4.4: Dexie v4.4.4

Compare Source

This is a maintenance release that resolves a bug in useLiveQuery caching and includes a TypeScript typing enhancement.

Related Package Releases

Package Version
dexie 4.4.4
dexie-cloud-addon 4.4.13 (no change)
dexie-react-hooks 4.4.0 (no change)
y-dexie 4.4.0 (no change)

Bug Fixes

dexie@​4.4.4
  • fix: useLiveQuery fails to detect updates when mutating queried objects in-place and calling put() — In default/cloned cache mode (cache: 'cloned'), mutating queried objects in-place and subsequently calling put() on them would pollute the cache directly, preventing subsequent live-queries from detecting the change because the "before" and "after" states in the cache became identical. Live-queries now deeply clone results on read to completely isolate query results from in-place consumer mutations. (#​2310). Reported in #​2309 by @​laukaichung. Fixed by @​liz709 and @​dfahlander .

Other Changes

dexie@​4.4.4
  • fix: typescript typings - add missing table4 parameter to transaction method — Added the missing table4 parameter to the typescript type definition of Dexie.transaction(), aligning it with other table parameters. Contributed by @​renbaoshuo (#​2311)

v4.4.3: Dexie v4.4.3

Compare Source

This is a maintenance release with bug fixes and a configuration API improvement.

Related Package Releases

Package Version
dexie 4.4.3
dexie-cloud-addon 4.4.13

Bug Fixes

dexie@​4.4.3
  • fix: delByKeyPath() creates empty intermediate objects on missing pathDexie.delByKeyPath(obj, "foo.bar") on an object without foo would create {foo: {}} as a side effect instead of doing nothing. This caused a real-world bug in dexie-cloud-addon where clearing a dotted key from a changeSpec (e.g. claims.sub) would leave {claims: {}} in the spec, which then overwrote the inline primary key with undefined, resulting in: DataError: Evaluating the object store's key path did not yield a value. Fixed in setByKeyPath to bail out early when value is undefined and the intermediate path doesn't exist. (#​2303)
  • fix: Collection.sortBy() mutates frozen array in immutable cache mode — calling .sortBy() on a table when using immutable cache mode could throw TypeError: Cannot assign to read only property because Array.sort() was called on a frozen array. Fixed by sorting on a copy instead. (#​2294)
dexie-cloud-addon@​4.4.12
  • rename: maxStringLengthlargeStringThreshold — the string offloading option is renamed for clarity. The old name is kept as a backward-compatible alias. (#​2290)
  • fix: blob writebacks routed through BlobSavingQueue to avoid PSD context loss — after an async native fetch (blob download), Dexie's PSD zone is no longer active, causing table.mutate() to crash with Cannot read properties of undefined (reading 'table'). This surfaced as [dexie-cloud:blobResolve] Failed to resolve BlobRefs. Fixed by always routing blob writebacks through BlobSavingQueue.saveBlobs(), which opens a proper Dexie rw-transaction in a fresh JS task. Fixes lazy blob mode crash when using Dexie hooks with dexie-cloud-addon. (#​2302)
  • fix: eager blob downloader could starve RAM — the eager downloader triggered blobResolveMiddleware which resolved all pending blobs into memory at once. Fixed by downloading blobs in chunks with a query limit, so memory usage stays bounded regardless of how many blobs are pending. (#​2302)
  • fix: in-flight blob downloads are now deduplicated — if a blob is requested after download starts but before it is persisted, the existing download promise is reused instead of starting a new download. (#​2302)
  • fix: use cache: no-store for blob fetch requests — avoids the browser caching raw blob responses and double-storing them. (#​2302)
dexie-cloud-addon@​4.4.13
  • fix: DataError when applying server-side $logins update — when a user received a server update for the $logins table, dexie-cloud-addon tried to clear claims.sub from the changeSpec using delByKeyPath. Due to the bug above, this left {claims: {}} in the spec, overwriting the inline primary key with undefined and causing DataError: Evaluating the object store's key path did not yield a value. Fixed by guarding against empty changeSpec objects after key deletion. (#​2304)

Other Changes

  • dexie-observable and dexie-syncable README updated to mark them as legacy/unmaintained, with a recommendation to use dexie-cloud-addon for sync. (#​2298)

v4.4.2: Dexie.js v4.4.2

Compare Source

This is a maintenance release containing several bug fixes accumulated since v4.4.1.

Related Package Releases

Package Version
dexie 4.4.2
dexie-cloud-addon 4.4.8
dexie-react-hooks 4.4.0
dexie-export-import 4.4.0

Bug Fixes

dexie-cloud-addon
  • fix: Allow anonymous blob download — previously anonymous users could not download offloaded blobs. Also fixes a crash in Service Worker context when Dexie.ignoreTransaction() was called (#​2287)
  • fix: HMR protection of awareness provider — prevents hot module replacement from breaking the Y.js awareness connection in dev environments (9debfc0)
  • fix: Add configurable: true to awareness defineProperty — fixes compatibility issues with certain bundlers and proxies (#​2280)
  • fix: Strip primary key from changeSpecs in update mutations — incorrect inclusion of primary key could cause sync failures in certain edge cases (#​2277)
  • fix: Preserve syncState on logout to prevent spinner — logging out no longer resets sync state, avoiding an unwanted loading spinner on re-login (#​2276)
  • fix: Update wrappedCursor.value in non-blob and error paths in blob resolve middleware (f470167)

Other Changes

  • Upgraded dependencies and fixed npm audit warnings
  • Formatted codebase with Prettier (#​2282)

v4.4.1: Dexie v4.4.1

Compare Source

This release introduces Blob Offloading and String Offloading for Dexie Cloud, enabling efficient handling of large binary and text data. It also includes IDB 3.0 optimizations and several bug fixes.

Related Package Releases

Package Version
dexie 4.4.1
dexie-cloud-addon 4.4.6
dexie-cloud-common 1.0.59
dexie-react-hooks 4.4.0
dexie-export-import 4.4.0

New Features

⚡ IDB 3.0 Optimizations

Leverages IndexedDB 3.0 getAll(options) for more efficient key range queries, reducing overhead for collection operations.

📦 Blob Offloading for Dexie Cloud

Large binary data (Blob, File, ArrayBuffer, TypedArray) is now automatically offloaded to cloud blob storage during sync. Data is stored normally in IndexedDB — offloading happens transparently during the sync process.

  • Automatic offloading: Binaries ≥ 4 KB are offloaded to blob storage during sync
  • Lazy resolution: BlobRefs are resolved back to their original types on first read
  • Optional Lazy blob mode: Configure blobMode: 'lazy' to download blobs on-demand instead of eagerly after sync (default is 'eager')
  • Progress tracking: Observable db.cloud.blobProgress for download progress

import Dexie from 'dexie';import dexieCloud from 'dexie-cloud-addon';const db = new Dexie('mydb',

{ addons: [dexieCloud] }

);db.version(1).stores(

{ photos: '@​id, title' }

);db.cloud.configure(

{ databaseUrl: '...', blobMode: 'eager' }

);// Store binary data — syncs normally, offloads transparentlyawait db.photos.add({title: 'Vacation',image: new Blob([imageData],

{ type: 'image/jpeg' }

)});
 

📝 String Offloading for Dexie Cloud

Long strings are now offloaded to blob storage during sync, keeping IndexedDB data compact while preserving full string content in the cloud.

  • Configurable threshold: maxStringLength option (default: 32768 characters)
  • Transparent: Offloaded strings resolve back to regular strings on read
  • IndexedDB unchanged: Full strings remain in local IndexedDB

db.cloud.configure(

{databaseUrl: '...',maxStringLength: 32768 // Strings longer than this are offloaded (default)}

);
 

Bug Fixes

  • fix(dexie-export-import): Fix UTF-8 corruption for non-ASCII strings during import (#​2259)
  • fix(dexie-cloud): Always offload Blob/File objects regardless of size (#​2182)
  • fix(react-hooks): Avoid direct React.use access for React < 19
  • fix(dexie): liveQuery could miss to emit values in certain rare circumstances

Other Changes

  • feat(dexie-cloud): Add copy-to-clipboard button for whitelist command (#​2261)
  • Use FinalizationRegistry for Dexie.connections and enforce maxConnections (#​2254)

v4.4.0: Dexie v4.4.0

Compare Source

This release introduces Blob Offloading and String Offloading for Dexie Cloud, enabling efficient handling of large binary and text data. It also includes IDB 3.0 optimizations and several bug fixes.

Related Package Releases

Package Version
dexie 4.4.0
dexie-cloud-addon 4.4.3
dexie-cloud-common 1.0.59
dexie-react-hooks 4.4.0
dexie-export-import 4.4.0

New Features

⚡ IDB 3.0 Optimizations

Leverages IndexedDB 3.0 getAll(options) for more efficient key range queries, reducing overhead for collection operations.

📦 Blob Offloading for Dexie Cloud

Large binary data (Blob, File, ArrayBuffer, TypedArray) is now automatically offloaded to cloud blob storage during sync. Data is stored normally in IndexedDB — offloading happens transparently during the sync process.

  • Automatic offloading: Binaries ≥ 4 KB are offloaded to blob storage during sync
  • Lazy resolution: BlobRefs are resolved back to their original types on first read
  • Optional Lazy blob mode: Configure blobMode: 'lazy' to download blobs on-demand instead of eagerly after sync (default is 'eager')
  • Progress tracking: Observable db.cloud.blobProgress for download progress

import Dexie from 'dexie';import dexieCloud from 'dexie-cloud-addon';const db = new Dexie('mydb',

{ addons: [dexieCloud] }

);db.version(1).stores(

{ photos: '@​id, title' }

);db.cloud.configure(

{ databaseUrl: '...', blobMode: 'eager' }

);// Store binary data — syncs normally, offloads transparentlyawait db.photos.add({title: 'Vacation',image: new Blob([imageData],

{ type: 'image/jpeg' }

)});
 

📝 String Offloading for Dexie Cloud

Long strings are now offloaded to blob storage during sync, keeping IndexedDB data compact while preserving full string content in the cloud.

  • Configurable threshold: maxStringLength option (default: 32768 characters)
  • Transparent: Offloaded strings resolve back to regular strings on read
  • IndexedDB unchanged: Full strings remain in local IndexedDB

db.cloud.configure(

{databaseUrl: '...',maxStringLength: 32768 // Strings longer than this are offloaded (default)}

);
 

Bug Fixes

  • fix(dexie-export-import): Fix UTF-8 corruption for non-ASCII strings during import (#​2259)
  • fix(dexie-cloud): Always offload Blob/File objects regardless of size (#​2182)
  • fix(react-hooks): Avoid direct React.use access for React < 19

Other Changes

  • feat(dexie-cloud): Add copy-to-clipboard button for whitelist command (#​2261)
  • Use FinalizationRegistry for Dexie.connections and enforce maxConnections (#​2254)
 
 

6 updates

 
cid:jira-generated-image-avatar-2888e211-f32b-4a9e-91ec-d4cf77f12d18 Changes by Manuel Leduc on 17/Jul/26 14:34
 
Fix Version: 1.6.0-rc-1
Documentation in Release Notes: N/A
Documentation: N/A
Assignee: Manuel Leduc
Resolution: Fixed
Status: Open Closed