DATE:
AUTHOR:
PowerSync Product Team
Capacitor SDK

Capacitor Client SDK: v0.10.0

DATE:
AUTHOR: PowerSync Product Team

We are pleased to announce the release of version 0.10.0 of the PowerSync Capacitor client SDK. The Capacitor SDK is in beta.

The Capacitor SDK uses the PowerSync Web SDK as a peer dependency. This changelog includes the Web SDK changes that apply on iOS and Android, under the first Capacitor version that requires them. For changes that only affect the web, see the Web SDK changelog.

See the full changelog below.

Have any questions or feedback? Chat with us and the PowerSync community on Discord.

Changelog

v0.10.0 - 2026-11-02

  • [ADDED] connect() now accepts an Authenticator and a MutationUploader separately, instead of only a single PowerSyncBackendConnector, including download-only and upload-only overloads. Existing PowerSyncBackendConnector implementations keep working unchanged. (PR #1149)

  • [ADDED] Support for managed tables: pass { direct: true } to Table to store it as plain SQLite rows instead of the JSON-based view PowerSync normally manages. This is in alpha. (PR #1158)

  • [ADDED] PowerSync DevTools now works with Capacitor apps on iOS and Android. (PR #1169)

  • [FIXED] The bundled PowerSync SQLite core extension was updated to v0.5.4. This fixes underreported sync progress after compaction, and priority 0 data not applying while uploads were pending if all buckets had priority 0. (PR #1155)

  • [FIXED] A checkpoint request or the sync connection could hang forever if the PowerSync Service never responded, blocking uploads, downloads, and later disconnect()/connect() calls. Both now time out via the new connectTimeoutMs sync option (default 30 seconds), and pending checkpoint requests are cancelled on disconnect(). (PR #1173)

  • [FIXED] A failed COMMIT issued a ROLLBACK to revert the transaction, but that call had no effect and swallowed the error. The SDK now forwards the error and rolls back correctly. (PR #1178)

  • [FIXED] A watched query that returned the same rows in a new order, with no additions or removals, did not re-emit its results. (PR #1157)

  • [FIXED] After a connect() call's initialization failed, every later disconnect() rejected with that same error, and the next connect() failed too because it disconnects first. (PR #1177)

  • [FIXED] A sync iteration that rejected with no error value crashed the retry loop's error handling, silently stopping downloads without logging anything or setting downloadError. (PR #1168)

v0.9.4 - 2026-10-19

  • [FIXED] Since v0.8.0, iOS and Android apps received sync data in binary format, which is slow to pass through Capacitor's JSON-based bridge. The SDK requests text format again. (PR #1140)

  • [FIXED] The expiresAt and lastSyncedAt properties of a Sync Stream subscription were always Invalid Date. (PR #1148)

v0.9.3 - 2026-10-01

  • [FIXED] onChangeWithCallback, watchWithCallback, compilableQueryWatch, AbstractQueryProcessor, and AttachmentQueue.startSync leaked listeners when aborted or stopped early. (PR #1122)

  • [FIXED] fetchCredentials implementations compiled with exactOptionalPropertyTypes hit a type error returning { expiresAt: undefined }. PowerSyncCredentials.expiresAt now accepts an explicit undefined. (PR #1134)

v0.9.2 - 2026-09-21

  • [ADDED] disconnectAndClear({ soft: true }) clears your synced tables but keeps the internal sync state. A later connect() for the same user then completes without downloading all data again. (PR #1111)

  • [FIXED] [Android] After the webview reloaded while a write transaction was open, for example during live reload, every later write failed with database is locked (code 5). (PR #1103)

  • [FIXED] disconnect() sometimes never completed when checkpointMode was 'requests', and later connect() calls then stayed pending. (PR #1108)

  • [FIXED] A normal disconnect() left a stale downloadError of "Disconnect has been requested" on the sync status. (PR #1108)

v0.9.1 - 2026-09-10

  • [FIXED] The bundled PowerSync SQLite core extension was updated to v0.5.3. This fixes a tx_id mismatch for insert-only tables, and error messages now include the underlying SQL statement. (PR #1090)

  • [FIXED] AttachmentQueue.expireCache() never resolved when there was nothing archived left to delete. (PR #1092)

v0.9.0 - 2026-09-02

  • [ADDED] requestCheckpoint() lets you wait until the local database has caught up with the server, including your pending uploads. Opt in with the checkpointMode: 'requests' connect option while the feature is in alpha. Requires PowerSync Service v1.24.0 or later. See Sync Catch-Up. (PR #1072)

  • [ADDED] The AttachmentTransportAdapter interface lets an AttachmentQueue use a custom upload, download, and delete implementation in place of remoteStorage. (PR #1039)

  • [FIXED] A Sync Stream subscription change made while connect() was still starting was sometimes dropped until the next change or reconnect. (PR #1078)

v0.8.2 - 2026-08-05

  • [FIXED] Apps with strict node_modules layouts, such as pnpm's default, failed with an unresolved import error. (PR #1061)

v0.8.1 - 2026-08-03

  • [IMPROVED] @journeyapps/wa-sqlite is now a regular dependency, so you can remove it from your own dependencies unless you import it directly. (PR #1049)

  • [FIXED] On startup, connect() briefly overwrote the restored sync status, so hasSynced was undefined and stream subscriptions were missing for a moment. (PR #1051)

v0.8.0 - 2026-07-21

  • [BREAKING] This version is part of the JavaScript SDKs v2.0 release. Sync options are now set only on connect(), and several deprecated APIs are removed. The announcement lists every change and how to upgrade. (PR #987)

  • [BREAKING] If you pass a custom open factory such as CapacitorSQLiteOpenFactory, use the factory key instead of database. (PR #987)

  • [ADDED] The SDK exports the AttachmentQueueOptions interface and the AttachmentTableRecord type, so you can type and extend the attachment queue. (PR #992, PR #1006)

  • [IMPROVED] AttachmentQueue no longer blocks saveFile() and deleteFile() while uploads or downloads are in progress, and stopSync() can interrupt a batch. (PR #974)

  • [FIXED] With the HTTP connection method, a token that expired while the client was disconnected caused an endless auth-error retry loop. (PR #1034)

  • [FIXED] Sync status errors lost Error.cause when serialized, so uploadError and downloadError did not include the full cause chain. (PR #1000)

  • [FIXED] Breaking out of a watch() or onChange() async iterator early left the underlying change listener attached. (PR #996)

  • [FIXED] Queries inside the onChange callback of createDiffTrigger failed when they relied on this binding. (PR #1028)

  • [FIXED] The exported LogLevel types caused a TypeScript error. (PR #1032)

v0.7.0 - 2026-06-10

  • [ADDED] The Capacitor SDK is now in beta. (PR #980)

  • [ADDED] AttachmentQueue.withAttachmentContext() gives custom attachment logic, such as a custom saveFile, access to read and change attachment records. (PR #985)

  • [ADDED] Watched attachment items accept an optional mediaType, so attachments download with the correct media type. (PR #975)

Powered by LaunchNotes