Releases: powersync-ja/powersync-service
Releases · powersync-ja/powersync-service
Release list
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
v1.20.5 - 2026-04-13
- [IMPROVED] Postgres replication slot handling: During Postgres snapshots the Service now detects a lost replication slot, stops the snapshot, emits
PSYNC_S1146with remediation text, logs WAL budget use, and avoids retries that would repeat the same snapshot. Postgres rows in the diagnostics API now also includewal_status,safe_wal_size, andmax_slot_wal_keep_size. (PR #554) - [IMPROVED] Postgres validation now uses three database round-trips for all tables instead of six queries per table, which cuts sync config validation time on large configs over slow links (about 80s to about 6s for 70 tables at ~200ms RTT in testing). Tables with
REPLICA IDENTITY NOTHINGvalidate when Postgres still allows replication. (PR #587) - [IMPROVED] Sync Streams now persist compilation errors with the stored sync plan so the diagnostics API shows them after deploy without re-parsing stream definitions each time. (PR #596)
- [FIXED] Sync Stream subscription priority overrides now apply consistently when the Service orders buckets and emits
partial_checkpoint_complete, which stops client checksum errors when subscriptions use custom priorities. (PR #586) - [FIXED] The Sync Streams compiler now blocks functions the evaluator does not implement, so bad functions fail at compile time instead of at runtime. (PR #595)
- [FIXED] MongoDB connection handling now decodes percent-encoded usernames, passwords, and database names from the URI so SCRAM auth succeeds when those values contain
@,=,/,%, or similar characters. (PR #592) - [FIXED]
PSYNC_S2305parameter-query errors now log only the checkpoint number, not full storage checkpoint objects, so log lines stay small and compatible with JSON parsers. (PR #593)
Full Changelog: v1.20.4...v1.20.5
v1.20.4 - 2026-03-23
- [ADDED] Sync Streams validation errors when expanding OR conditions would produce more than 100 equivalent bucket definitions, which prevents those queries from overloading the Service. (PR #579)
- [IMPROVED] The
powersync_replication_lag_secondsmetric tracks commit and in-flight replication lag with a 30-second rolling window so it matches logged lag, instead of falling back to database timestamps that could spike after restarts or rolling deploys. (PR #582) - [IMPROVED] Bump the image runtime to Node 24.14.0 and upgrade several dependencies. (PR #583)
- [FIXED] SQL-in-YAML error reporting handles more YAML scalar edge cases so Sync Rules and Sync Streams config mistakes map to the correct source location. (PR #578)
Full Changelog: v1.20.3...v1.20.4