diff --git a/.changeset/dark-items-dig.md b/.changeset/dark-items-dig.md deleted file mode 100644 index d11921c5e..000000000 --- a/.changeset/dark-items-dig.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@tanstack/powersync-db-collection": minor ---- - -Initial Release diff --git a/.changeset/offline-transactions-initial.md b/.changeset/offline-transactions-initial.md deleted file mode 100644 index 3b50f64ea..000000000 --- a/.changeset/offline-transactions-initial.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -"@tanstack/offline-transactions": minor -"@tanstack/db": patch ---- - -Add offline-transactions package with robust offline-first capabilities - -New package `@tanstack/offline-transactions` provides a comprehensive offline-first transaction system with: - -**Core Features:** - -- Persistent outbox pattern for reliable transaction processing -- Leader election for multi-tab coordination (Web Locks API with BroadcastChannel fallback) -- Automatic storage capability detection with graceful degradation -- Retry logic with exponential backoff and jitter -- Sequential transaction processing (FIFO ordering) - -**Storage:** - -- Automatic fallback chain: IndexedDB → localStorage → online-only -- Detects and handles private mode, SecurityError, QuotaExceededError -- Custom storage adapter support -- Diagnostic callbacks for storage failures - -**Developer Experience:** - -- TypeScript-first with full type safety -- Comprehensive test suite (25 tests covering leader failover, storage failures, e2e scenarios) -- Works in all modern browsers and server-side rendering environments - -**@tanstack/db improvements:** - -- Enhanced duplicate instance detection (dev-only, iframe-aware, with escape hatch) -- Better environment detection for SSR and worker contexts - -Example usage: - -```typescript -import { - startOfflineExecutor, - IndexedDBAdapter, -} from "@tanstack/offline-transactions" - -const executor = startOfflineExecutor({ - collections: { todos: todoCollection }, - storage: new IndexedDBAdapter(), - mutationFns: { - syncTodos: async ({ transaction, idempotencyKey }) => { - // Sync mutations to backend - await api.sync(transaction.mutations, idempotencyKey) - }, - }, - onStorageFailure: (diagnostic) => { - console.warn("Running in online-only mode:", diagnostic.message) - }, -}) - -// Create offline transaction -const tx = executor.createOfflineTransaction({ - mutationFnName: "syncTodos", - autoCommit: false, -}) - -tx.mutate(() => { - todoCollection.insert({ id: "1", text: "Buy milk", completed: false }) -}) - -await tx.commit() // Persists to outbox and syncs when online -``` diff --git a/examples/react/paced-mutations-demo/CHANGELOG.md b/examples/react/paced-mutations-demo/CHANGELOG.md index b49765a9a..bf7ea10b3 100644 --- a/examples/react/paced-mutations-demo/CHANGELOG.md +++ b/examples/react/paced-mutations-demo/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/db-example-paced-mutations-demo +## 0.0.3 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + - @tanstack/react-db@0.1.39 + ## 0.0.2 ### Patch Changes diff --git a/examples/react/paced-mutations-demo/package.json b/examples/react/paced-mutations-demo/package.json index 6975f7953..88a339111 100644 --- a/examples/react/paced-mutations-demo/package.json +++ b/examples/react/paced-mutations-demo/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/db-example-paced-mutations-demo", - "version": "0.0.2", + "version": "0.0.3", "private": true, "type": "module", "scripts": { diff --git a/examples/react/todo/CHANGELOG.md b/examples/react/todo/CHANGELOG.md index 18c4e14cd..2a8614598 100644 --- a/examples/react/todo/CHANGELOG.md +++ b/examples/react/todo/CHANGELOG.md @@ -1,5 +1,15 @@ # examples/react/todo +## 0.1.19 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/electric-db-collection@0.1.41 + - @tanstack/query-db-collection@0.2.40 + - @tanstack/react-db@0.1.39 + - @tanstack/trailbase-db-collection@0.1.39 + ## 0.1.18 ### Patch Changes diff --git a/examples/react/todo/package.json b/examples/react/todo/package.json index f3b94b7ed..b57455162 100644 --- a/examples/react/todo/package.json +++ b/examples/react/todo/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/db-example-react-todo", "private": true, - "version": "0.1.18", + "version": "0.1.19", "dependencies": { "@tanstack/electric-db-collection": "workspace:^", "@tanstack/query-core": "^5.90.5", diff --git a/packages/angular-db/CHANGELOG.md b/packages/angular-db/CHANGELOG.md index 665232a21..024c9784a 100644 --- a/packages/angular-db/CHANGELOG.md +++ b/packages/angular-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/angular-db +## 0.1.22 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + ## 0.1.21 ### Patch Changes diff --git a/packages/angular-db/package.json b/packages/angular-db/package.json index c2e6de914..cf919d5fc 100644 --- a/packages/angular-db/package.json +++ b/packages/angular-db/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/angular-db", "description": "Angular integration for @tanstack/db", - "version": "0.1.21", + "version": "0.1.22", "author": "Ethan McDaniel", "license": "MIT", "repository": { diff --git a/packages/db/CHANGELOG.md b/packages/db/CHANGELOG.md index 819eed55b..5cfa93115 100644 --- a/packages/db/CHANGELOG.md +++ b/packages/db/CHANGELOG.md @@ -1,5 +1,70 @@ # @tanstack/db +## 0.4.17 + +### Patch Changes + +- Add offline-transactions package with robust offline-first capabilities ([#559](https://github.com/TanStack/db/pull/559)) + + New package `@tanstack/offline-transactions` provides a comprehensive offline-first transaction system with: + + **Core Features:** + - Persistent outbox pattern for reliable transaction processing + - Leader election for multi-tab coordination (Web Locks API with BroadcastChannel fallback) + - Automatic storage capability detection with graceful degradation + - Retry logic with exponential backoff and jitter + - Sequential transaction processing (FIFO ordering) + + **Storage:** + - Automatic fallback chain: IndexedDB → localStorage → online-only + - Detects and handles private mode, SecurityError, QuotaExceededError + - Custom storage adapter support + - Diagnostic callbacks for storage failures + + **Developer Experience:** + - TypeScript-first with full type safety + - Comprehensive test suite (25 tests covering leader failover, storage failures, e2e scenarios) + - Works in all modern browsers and server-side rendering environments + + **@tanstack/db improvements:** + - Enhanced duplicate instance detection (dev-only, iframe-aware, with escape hatch) + - Better environment detection for SSR and worker contexts + + Example usage: + + ```typescript + import { + startOfflineExecutor, + IndexedDBAdapter, + } from "@tanstack/offline-transactions" + + const executor = startOfflineExecutor({ + collections: { todos: todoCollection }, + storage: new IndexedDBAdapter(), + mutationFns: { + syncTodos: async ({ transaction, idempotencyKey }) => { + // Sync mutations to backend + await api.sync(transaction.mutations, idempotencyKey) + }, + }, + onStorageFailure: (diagnostic) => { + console.warn("Running in online-only mode:", diagnostic.message) + }, + }) + + // Create offline transaction + const tx = executor.createOfflineTransaction({ + mutationFnName: "syncTodos", + autoCommit: false, + }) + + tx.mutate(() => { + todoCollection.insert({ id: "1", text: "Buy milk", completed: false }) + }) + + await tx.commit() // Persists to outbox and syncs when online + ``` + ## 0.4.16 ### Patch Changes diff --git a/packages/db/package.json b/packages/db/package.json index 24825b313..2b24d61c2 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/db", "description": "A reactive client store for building super fast apps on sync", - "version": "0.4.16", + "version": "0.4.17", "dependencies": { "@standard-schema/spec": "^1.0.0", "@tanstack/db-ivm": "workspace:*", diff --git a/packages/electric-db-collection/CHANGELOG.md b/packages/electric-db-collection/CHANGELOG.md index 533f5586d..db89b29fc 100644 --- a/packages/electric-db-collection/CHANGELOG.md +++ b/packages/electric-db-collection/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/electric-db-collection +## 0.1.41 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + ## 0.1.40 ### Patch Changes diff --git a/packages/electric-db-collection/package.json b/packages/electric-db-collection/package.json index ccdc7235b..2b0f53539 100644 --- a/packages/electric-db-collection/package.json +++ b/packages/electric-db-collection/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/electric-db-collection", "description": "ElectricSQL collection for TanStack DB", - "version": "0.1.40", + "version": "0.1.41", "dependencies": { "@electric-sql/client": "^1.1.0", "@standard-schema/spec": "^1.0.0", diff --git a/packages/offline-transactions/CHANGELOG.md b/packages/offline-transactions/CHANGELOG.md new file mode 100644 index 000000000..5a10b322d --- /dev/null +++ b/packages/offline-transactions/CHANGELOG.md @@ -0,0 +1,71 @@ +# @tanstack/offline-transactions + +## 0.1.0 + +### Minor Changes + +- Add offline-transactions package with robust offline-first capabilities ([#559](https://github.com/TanStack/db/pull/559)) + + New package `@tanstack/offline-transactions` provides a comprehensive offline-first transaction system with: + + **Core Features:** + - Persistent outbox pattern for reliable transaction processing + - Leader election for multi-tab coordination (Web Locks API with BroadcastChannel fallback) + - Automatic storage capability detection with graceful degradation + - Retry logic with exponential backoff and jitter + - Sequential transaction processing (FIFO ordering) + + **Storage:** + - Automatic fallback chain: IndexedDB → localStorage → online-only + - Detects and handles private mode, SecurityError, QuotaExceededError + - Custom storage adapter support + - Diagnostic callbacks for storage failures + + **Developer Experience:** + - TypeScript-first with full type safety + - Comprehensive test suite (25 tests covering leader failover, storage failures, e2e scenarios) + - Works in all modern browsers and server-side rendering environments + + **@tanstack/db improvements:** + - Enhanced duplicate instance detection (dev-only, iframe-aware, with escape hatch) + - Better environment detection for SSR and worker contexts + + Example usage: + + ```typescript + import { + startOfflineExecutor, + IndexedDBAdapter, + } from "@tanstack/offline-transactions" + + const executor = startOfflineExecutor({ + collections: { todos: todoCollection }, + storage: new IndexedDBAdapter(), + mutationFns: { + syncTodos: async ({ transaction, idempotencyKey }) => { + // Sync mutations to backend + await api.sync(transaction.mutations, idempotencyKey) + }, + }, + onStorageFailure: (diagnostic) => { + console.warn("Running in online-only mode:", diagnostic.message) + }, + }) + + // Create offline transaction + const tx = executor.createOfflineTransaction({ + mutationFnName: "syncTodos", + autoCommit: false, + }) + + tx.mutate(() => { + todoCollection.insert({ id: "1", text: "Buy milk", completed: false }) + }) + + await tx.commit() // Persists to outbox and syncs when online + ``` + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 diff --git a/packages/offline-transactions/package.json b/packages/offline-transactions/package.json index b59120efb..dbb0d306b 100644 --- a/packages/offline-transactions/package.json +++ b/packages/offline-transactions/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/offline-transactions", - "version": "0.0.0", + "version": "0.1.0", "description": "Offline-first transaction capabilities for TanStack DB", "author": "TanStack", "license": "MIT", diff --git a/packages/powersync-db-collection/CHANGELOG.md b/packages/powersync-db-collection/CHANGELOG.md index 1c804e7e2..0f7c36df9 100644 --- a/packages/powersync-db-collection/CHANGELOG.md +++ b/packages/powersync-db-collection/CHANGELOG.md @@ -1 +1,12 @@ # @tanstack/powersync-db-collection + +## 0.1.0 + +### Minor Changes + +- Initial Release ([#747](https://github.com/TanStack/db/pull/747)) + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 diff --git a/packages/powersync-db-collection/package.json b/packages/powersync-db-collection/package.json index 9d5425104..19e7e7400 100644 --- a/packages/powersync-db-collection/package.json +++ b/packages/powersync-db-collection/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/powersync-db-collection", "description": "PowerSync collection for TanStack DB", - "version": "0.0.0", + "version": "0.1.0", "dependencies": { "@standard-schema/spec": "^1.0.0", "@tanstack/db": "workspace:*", diff --git a/packages/query-db-collection/CHANGELOG.md b/packages/query-db-collection/CHANGELOG.md index f4e953bf1..41f1f0c45 100644 --- a/packages/query-db-collection/CHANGELOG.md +++ b/packages/query-db-collection/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/query-db-collection +## 0.2.40 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + ## 0.2.39 ### Patch Changes diff --git a/packages/query-db-collection/package.json b/packages/query-db-collection/package.json index f54761c0c..81c00e9e1 100644 --- a/packages/query-db-collection/package.json +++ b/packages/query-db-collection/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/query-db-collection", "description": "TanStack Query collection for TanStack DB", - "version": "0.2.39", + "version": "0.2.40", "dependencies": { "@standard-schema/spec": "^1.0.0", "@tanstack/db": "workspace:*" diff --git a/packages/react-db/CHANGELOG.md b/packages/react-db/CHANGELOG.md index e866bfb26..9a431d76b 100644 --- a/packages/react-db/CHANGELOG.md +++ b/packages/react-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/react-db +## 0.1.39 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + ## 0.1.38 ### Patch Changes diff --git a/packages/react-db/package.json b/packages/react-db/package.json index 259ac8f71..770ecf879 100644 --- a/packages/react-db/package.json +++ b/packages/react-db/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/react-db", "description": "React integration for @tanstack/db", - "version": "0.1.38", + "version": "0.1.39", "author": "Kyle Mathews", "license": "MIT", "repository": { diff --git a/packages/rxdb-db-collection/CHANGELOG.md b/packages/rxdb-db-collection/CHANGELOG.md index 7d850a407..8e494e2eb 100644 --- a/packages/rxdb-db-collection/CHANGELOG.md +++ b/packages/rxdb-db-collection/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/rxdb-db-collection +## 0.1.28 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + ## 0.1.27 ### Patch Changes diff --git a/packages/rxdb-db-collection/package.json b/packages/rxdb-db-collection/package.json index e2099ab8f..64216ab5a 100644 --- a/packages/rxdb-db-collection/package.json +++ b/packages/rxdb-db-collection/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/rxdb-db-collection", "description": "RxDB collection for TanStack DB", - "version": "0.1.27", + "version": "0.1.28", "dependencies": { "rxdb": "16.20.0", "@standard-schema/spec": "^1.0.0", diff --git a/packages/solid-db/CHANGELOG.md b/packages/solid-db/CHANGELOG.md index 83cd3fbe7..5348735f6 100644 --- a/packages/solid-db/CHANGELOG.md +++ b/packages/solid-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/react-db +## 0.1.39 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + ## 0.1.38 ### Patch Changes diff --git a/packages/solid-db/package.json b/packages/solid-db/package.json index 4d1aafedb..d1ec5d816 100644 --- a/packages/solid-db/package.json +++ b/packages/solid-db/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/solid-db", "description": "Solid integration for @tanstack/db", - "version": "0.1.38", + "version": "0.1.39", "author": "Kyle Mathews", "license": "MIT", "repository": { diff --git a/packages/svelte-db/CHANGELOG.md b/packages/svelte-db/CHANGELOG.md index aeda13bf8..9d0e7f0a9 100644 --- a/packages/svelte-db/CHANGELOG.md +++ b/packages/svelte-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/svelte-db +## 0.1.39 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + ## 0.1.38 ### Patch Changes diff --git a/packages/svelte-db/package.json b/packages/svelte-db/package.json index bdacb876d..bcbe86959 100644 --- a/packages/svelte-db/package.json +++ b/packages/svelte-db/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/svelte-db", "description": "Svelte integration for @tanstack/db", - "version": "0.1.38", + "version": "0.1.39", "dependencies": { "@tanstack/db": "workspace:*" }, diff --git a/packages/trailbase-db-collection/CHANGELOG.md b/packages/trailbase-db-collection/CHANGELOG.md index ae515b1fb..6b1eac378 100644 --- a/packages/trailbase-db-collection/CHANGELOG.md +++ b/packages/trailbase-db-collection/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/trailbase-db-collection +## 0.1.39 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + ## 0.1.38 ### Patch Changes diff --git a/packages/trailbase-db-collection/package.json b/packages/trailbase-db-collection/package.json index 5ef57141f..a21b9c048 100644 --- a/packages/trailbase-db-collection/package.json +++ b/packages/trailbase-db-collection/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/trailbase-db-collection", "description": "TrailBase collection for TanStack DB", - "version": "0.1.38", + "version": "0.1.39", "dependencies": { "@standard-schema/spec": "^1.0.0", "@tanstack/db": "workspace:*", diff --git a/packages/vue-db/CHANGELOG.md b/packages/vue-db/CHANGELOG.md index 4f5885e12..8797c2cbb 100644 --- a/packages/vue-db/CHANGELOG.md +++ b/packages/vue-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/vue-db +## 0.0.72 + +### Patch Changes + +- Updated dependencies [[`49bcaa5`](https://github.com/TanStack/db/commit/49bcaa5557ba8d647c947811ed6e0c2450159d84)]: + - @tanstack/db@0.4.17 + ## 0.0.71 ### Patch Changes diff --git a/packages/vue-db/package.json b/packages/vue-db/package.json index c5695d9d6..8194896fd 100644 --- a/packages/vue-db/package.json +++ b/packages/vue-db/package.json @@ -1,7 +1,7 @@ { "name": "@tanstack/vue-db", "description": "Vue integration for @tanstack/db", - "version": "0.0.71", + "version": "0.0.72", "author": "Kyle Mathews", "license": "MIT", "repository": {