Releases: powersync-ja/powersync-service
Releases · powersync-ja/powersync-service
Release list
v1.26.1
v1.26.0
Fixes and stability improvements
- Configurable snapshot socket timeout by @henriquekraemer in #739
- Fix connection stall after data fetch errors in #773
- Fix equality for table-valued functions in #779
- Fix provenance for lookups with multiple inputs in #780
- Fix MySQL replication stalls caused by silently dropped idle connections by @bean1352 in #760
Performance improvements
- Improve sync throughput by persisting subkey in MongoDB storage in #753
- Improve Postgres storage performance by avoid ts-codec unions in #775
- Incremental parameter index compacting for MongoDB storage in #759
Diagnostic improvements
- Log checkpoint_interrupted for errors while fetching data in #774
- Add optional version_label to sync configs in #756 and #781
MongoDB storage version 4
MongoDB storage version 3 is now promoted to version 4, marking the format as stable. This is still opt-in, and we encourage users to try it out.
Over storage version 2 (the current default), this has the following improvements:
- Incremental reprocessing of sync streams, only re-snapshotting data for new and updated sync streams in many cases. Right now this supports MongoDB source databases, with others to follow.
- Optionally store bulk data on S3-compatible object storage, significantly reducing overhead on the storage cluster in some cases.
- Faster clearing of old replication streams by dropping entire collections at a time, instead of deleting individual documents.
- Track storage stats attributed to individual sync streams, in addition to the overall aggregate.
- Restructure bucket compacting to be incremental, instead of a single large "run to completion job": Can run many times a day without significant overhead, can be interrupted and resumed at any time, and can run multiple compaction jobs concurrently.
- Various further performance improvements.
Opt in by specifying config.storage_version: 4 in the sync config. This triggers reprocessing, with the new data then using storage version 4.
Over storage version 3 in v1.25.0, this release contains the following changes:
- Add storage version 4 in #776
- Restructure compacting in #752
- Fix S3 stalls in #766 and #769
- Restructure sync event / custom checkpoint request support in #764
- Report S3 storage stats in #770
- Add S3 timing info for sync checkpoints in #768
- Force create new replication stream if old one is invalidated in #755
Full Changelog: v1.25.0...v1.26.0
v1.25.0
- [BREAKING] [MSSQL] Replication streams no longer adopt schema or table changes automatically. Streams now pin their table set and CDC capture instances; schema changes require explicit table names and a new sync config deployment. (PR #727)
- [ADDED] [MSSQL] Custom CA certificate support through the new
cacertoption, with optionaltls_servernameconfiguration when the connection hostname differs from the certificate name. (PR #750) - [IMPROVED] Subkey UUID generation performance. (PR #749)
- [FIXED] [MySQL] Idle heartbeat keepalives now retain the last committed position instead of stalling checkpoints, and GTID sets containing multiple server UUIDs are parsed correctly. (PR #706)
- [FIXED] [MSSQL] CDC operations are now processed in a consistent order, preventing inconsistencies when handling deferred updates. CDC polling also reports transaction counts correctly and streams query results. (PR #742)
Full Changelog: v1.24.0...v1.25.0
v1.24.0
- [ADDED] Wildcard schema support for Sync Streams (e.g.
SELECT * FROM "%".assets WHERE assets.schema() = auth.parameter('tenant_schema')), enabling schema-per-tenant replication from a single Postgres replication slot. (PR #703) - [ADDED] A
/sync/checkpoint-requestroute so clients can create checkpoint requests using a client-supplied checkpoint request ID. (PR #696) - [ADDED] A configurable
heartbeat_interval_secondsoption for MongoDB, Postgres, and SQL Server sources, mainly to avoid MongoDB change stream timeouts during large bulk writes elsewhere in the cluster. (PR #747) - [ADDED] [MongoDB Storage V3, experimental] S3-compatible object storage for bucket data, opt-in via
storage.object_storageconfig; small operations still stay inline in MongoDB. Opt in withconfig.storage_version: 3. (PR #728) - [IMPROVED] Bucket data query performance in Postgres storage. (PR #721)
- [IMPROVED] Diagnostics when a connection exceeds the bucket limit now list every Sync Stream / bucket definition contributing to the total instead of only the 10 largest. (PR #723)
- [IMPROVED] The
Flushed X + Y + Zlog message now labels its data more clearly. (PR #746) - [IMPROVED] YAML sync config errors now include a source location instead of only being caught by a later schema-validation pass, so mistakes are easier to find. (PR #722, PR #725)
- [IMPROVED] Updated the service runtime to Node.js v24.18.1. When using
unstable_sqlite_expression_engine, this may change how floating-point values are converted to text, since the bundled SQLite version was upgraded to 3.53. (PR #744) - [FIXED] [Postgres storage] Stale checkpoint notifications after the underlying connection is interrupted (e.g. by
idle_session_timeout), which could leave clients syncing against an outdated checkpoint. (PR #719) - [FIXED] [Postgres storage] Clearing a large group's rows now happens in batches instead of one long-running
DELETE, so a retry after a timeout continues where it left off instead of restarting from scratch. (PR #734) - [FIXED] Clearing old sync rule / Sync Stream data after a deploy could run concurrently across replication processes and continue even when it caused replication lag; it's now locked to one process and batches without relying on operation timeouts. (PR #736)
- [FIXED] An unhandled WebSocket error when an invalid frame arrives before the first data. (PR #738)
Full changelog
Full Changelog: v1.23.3...v1.24.0
v1.23.3 - 2026-07-07
- [ADDED] Experimental support for Azure Cosmos DB for MongoDB vCore (Azure DocumentDB) as a replication source. (PR #605)
- [IMPROVED] Sync Streams now warn when a stream joins multiple sources and the primary table has an unquoted alias, since rows can silently sync under the alias instead of the table's name. (PR #662)
- [FIXED] A cache entry evicted while its query was still in flight no longer cancels the request with an unhelpful
evictederror; the query now completes and its result is used. (PR #711) - [FIXED] [MongoDB Storage] Occasional
readConcernerrors when usingbulk_read_preferencewith secondary reads. (PR #710)
Full Changelog: v1.23.2...v1.23.3
v1.23.2 - 2026-07-02
- [ADDED]
api.parameters.bucket_count_cache_ttl_minutesconfig option to control how long bucket checksums and counts are cached, reducing calculation overhead under load (self-hosted only). (PR #695) - [ADDED] Experimental
bulk_read_preferenceconfig option for MongoDB storage, to spread bucket data and checksum reads across secondaries (e.g.secondaryPreferredornearest) instead of always hitting the primary (self-hosted only). (PR #697) - [IMPROVED] Sync Streams: queries that select
*after an aliased column (e.g.SELECT public_id AS id, *) now log a warning, since the*can silently overwrite the alias. (PR #689) - [IMPROVED] Concurrent
write-checkpoint2requests are now batched into a single database round-trip, cutting response times under load and avoiding client-side 429 errors from retries. (PR #691) - [IMPROVED] [MongoDB] Several internal storage writes (checkpoint notifications, error clearing, resume LSN updates) no longer wait for majority write acknowledgement, reducing write latency when replication lag is high. (PR #699)
- [IMPROVED] Sync logs now include
checkpoint_complete,partial_checkpoint_complete, andcheckpoint_invalidatedevents with operation counts, bytes synced, and timing breakdowns, replacing the noisier per-lock sync messages. (PR #701) - [FIXED] A checkpoint using bucket priorities could report complete without its full data if a concurrent compaction invalidated it mid-sync, requiring a full re-download of the affected buckets on the next checksum check. (PR #701)
Full Changelog: v1.23.1...v1.23.2
v1.23.1 - 2026-06-25
- [IMPROVED] Docker images now follow a
next/stablepromotion process: new releases publish as1.23.1-next(and1-next,1.23-next) first, then are promoted to1.23.1(and1,1.23) after validation. (PR #687) - [IMPROVED] Rolling deploys hand off replication faster: a new process starts replicating almost immediately instead of waiting for the next polling interval. (PR #686)
- [FIXED] Replication no longer fails to acquire its lock when a sync config update is added to an existing replication stream. (PR #686)
Full Changelog: v1.23.0...v1.23.1
v1.23.0 - 2026-06-23
- [IMPROVED]
lower()andupper()are now Unicode-aware even withunstable_sqlite_expression_engine: trueenabled, using the JavaScript evaluator's behavior instead of SQLite's ASCII-only default. (PR #666) - [IMPROVED] The "Cannot mark snapshot done while source tables still require snapshotting" error now names the tables still pending a snapshot. (PR #681)
- [FIXED] Sync Streams: parameter queries that select from a table matched by a wildcard pattern now return a proper error response instead of failing unexpectedly. (PR #676)
Full Changelog: v1.22.0...v1.23.0
v1.22.0 - 2026-06-04
- [ADDED] Initial (experimental) support for Convex as a replication source. (PR #574)
- [ADDED] Experimental
unstable_sqlite_expression_engineSync Rulesconfig:option to evaluate Sync Streams expressions through SQLite directly, for closer SQLite semantics. (PR #654) - [IMPROVED] [Postgres] Skip the redundant
current_datacopy for tables withREPLICA IDENTITY FULL, since the full row already arrives on every change. Reduces storage and avoids TOAST-merge reads. (PR #655) - [IMPROVED] [MongoDB] Run initial snapshot concurrently with streaming replication on storage v3+, reducing catch-up lag after a sync config deploy. (PR #641)
- [IMPROVED] [MongoDB] Per-batch replication logs now report durations in milliseconds correctly (previously microseconds labelled as
ms) and break out checkpoint-write time separately. (PR #660) - [IMPROVED] Service error responses now honor the negotiated
Content-Encoding(gzip/zstd), so SDK HTTP clients see the actual error instead of a decoding failure. (PR #649) - [IMPROVED] IP-range validation normalizes host strings before checking, so IPv6 literals and
host:portforms are recognized as IPs instead of falling through to DNS resolution. (PR #642) - [IMPROVED] Test client resolves
!envtags inpowersync.yaml, with an optional--env <path>flag for loading a.envfile. (PR #650) - [FIXED] [MongoDB] Checkpoint stalls after an internal command retry, which previously caused replication lag to grow indefinitely with no real data backlog. (PR #659)
- [FIXED] Sync Streams:
&&(overlap) operator on JSON arrays now tests intersection correctly, with consistent bigint/number comparison. (PR #639) - [FIXED] Sync Streams:
IN/NOT INagainst scalar JSON arrays now applies correct SQLite typing for booleans and integers above 2^53. (PR #637) - [FIXED] Sync Streams:
iif()arity is validated at compile time instead of failing later in the evaluator. (PR #644) - [FIXED] Sync Streams: SQLite-compatible casts from signed numeric strings. (PR #645)
- [FIXED] Sync Streams:
json_eachobject and scalar evaluation. (PR #647) - [FIXED] Sync Streams: division-by-zero semantics. (PR #646)
- [INTERNAL] Reworked
resolveTable→resolveTablesso a single source table can resolve to multipleSourceTableentries — groundwork for incremental Sync Stream updates on storage v3+. (PR #624) - [INTERNAL] [MongoDB Storage V3] Support multiple
SyncConfigs per replication stream. (PR #619) - [INTERNAL]
HydratedSyncRules→HydratedSyncConfigrefactor to support multipleSyncConfiginstances. (PR #651)
Full Changelog: v1.21.0...v1.22.0
v1.21.0 - 2026-05-14
- [ADDED] Cloud only: High availability for replication processes on Pro and higher plans, with adjusted resource requests and limits.
- [ADDED] Per-batch MongoDB replication timing logs to trace replication performance. (PR #616)
- [ADDED] Configurable storage version via the new
config.storage_versionsetting. (PR #601) - [ADDED] Configurable limit on parameter query results, with offending stream definitions identified in the error. (PRs #621, #630)
- [ADDED] Warning for unreferenced common table expressions in Sync Streams. (PR #634)
- [IMPROVED] Cloud only: Reduced replication process downtime on scaling events, mostly affecting free instances after the HA changes above.
- [IMPROVED] Custom raw MongoDB change stream implementation for finer control over replication behavior and better throughput. (PR #591)
- [IMPROVED] Adaptive MongoDB
batchSizeto recover fromPSYNC_S1345change stream timeouts. (PR #609) - [IMPROVED] Fail-fast when too many parameters are requested at once, surfacing the error earlier. (PR #635)
- [IMPROVED] Clearer error messages for invalid YAML nodes (PR #612) and Postgres query failures (PR #620).
- [IMPROVED] More consistent logs, error messages, and comments across modules. (PR #626)
- [FIXED] Cloud only: Deploy failures with dedicated bucket storage by no longer updating the Atlas cluster scaling config automatically.
- [FIXED] Crash when the same CTE is referenced from multiple sites. (PR #604)
- [FIXED] Crash in queries joining multiple tables where more than one WHERE condition references columns from both tables. (PR #608)
- [FIXED] Replication of parameter rows that produce multiple outputs. (PR #625)
- [FIXED] Postgres
initSlotphase detection for snapshot failures; the same change adds WAL budget warnings to the diagnostics API. (PR #606) - [FIXED] JWK config schema support for P-521 EC curves. (PR #636)
Full Changelog: v1.20.5...v1.21.0