Skip to content

Releases: powersync-ja/powersync-service

v1.26.1

Choose a tag to compare

@github-actions github-actions released this 11 Sep 13:04
3ffb123

What's Changed

  • Azure DocumentDB updates in #783 & #784
  • Improve MongoDB schema detection in #795
  • Use MongoDB client-level bulkWrite where available for storage in #792

Performance improvements for storage version 4:

  • Chunk-merge compact concurrency in #793
  • Increase default S3 concurrency in #791

CLI & Dashboard:

  • Add Rust schema generator in #789

Full Changelog: v1.26.0...v1.26.1

v1.26.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 10:36
3f28717

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:

  1. 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.
  2. Optionally store bulk data on S3-compatible object storage, significantly reducing overhead on the storage cluster in some cases.
  3. Faster clearing of old replication streams by dropping entire collections at a time, instead of deleting individual documents.
  4. Track storage stats attributed to individual sync streams, in addition to the overall aggregate.
  5. 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.
  6. 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

Choose a tag to compare

@github-actions github-actions released this 12 Aug 14:55
d3216be
  • [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 cacert option, with optional tls_servername configuration 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

Choose a tag to compare

@github-actions github-actions released this 06 Aug 09:11
d64536b
  • [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-request route so clients can create checkpoint requests using a client-supplied checkpoint request ID. (PR #696)
  • [ADDED] A configurable heartbeat_interval_seconds option 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_storage config; small operations still stay inline in MongoDB. Opt in with config.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 + Z log 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

Choose a tag to compare

@github-actions github-actions released this 07 Jul 18:14
6aab57d
  • [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 evicted error; the query now completes and its result is used. (PR #711)
  • [FIXED] [MongoDB Storage] Occasional readConcern errors when using bulk_read_preference with secondary reads. (PR #710)

Full Changelog: v1.23.2...v1.23.3

v1.23.2 - 2026-07-02

Choose a tag to compare

@github-actions github-actions released this 02 Jul 08:11
06b4092
  • [ADDED] api.parameters.bucket_count_cache_ttl_minutes config 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_preference config option for MongoDB storage, to spread bucket data and checksum reads across secondaries (e.g. secondaryPreferred or nearest) 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-checkpoint2 requests 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, and checkpoint_invalidated events 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

v1.23.1 - 2026-06-25 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Jun 12:48
4b76282
  • [IMPROVED] Docker images now follow a next/stable promotion process: new releases publish as 1.23.1-next (and 1-next, 1.23-next) first, then are promoted to 1.23.1 (and 1, 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

Choose a tag to compare

@rkistner rkistner released this 25 Jun 11:11
c406602
  • [IMPROVED] lower() and upper() are now Unicode-aware even with unstable_sqlite_expression_engine: true enabled, 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

Choose a tag to compare

@rkistner rkistner released this 25 Jun 11:11
02d4ae6
  • [ADDED] Initial (experimental) support for Convex as a replication source. (PR #574)
  • [ADDED] Experimental unstable_sqlite_expression_engine Sync Rules config: option to evaluate Sync Streams expressions through SQLite directly, for closer SQLite semantics. (PR #654)
  • [IMPROVED] [Postgres] Skip the redundant current_data copy for tables with REPLICA 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:port forms are recognized as IPs instead of falling through to DNS resolution. (PR #642)
  • [IMPROVED] Test client resolves !env tags in powersync.yaml, with an optional --env <path> flag for loading a .env file. (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 IN against 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_each object and scalar evaluation. (PR #647)
  • [FIXED] Sync Streams: division-by-zero semantics. (PR #646)
  • [INTERNAL] Reworked resolveTable → resolveTables so a single source table can resolve to multiple SourceTable entries — 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 → HydratedSyncConfig refactor to support multiple SyncConfig instances. (PR #651)

Full Changelog: v1.21.0...v1.22.0

v1.21.0 - 2026-05-14

Choose a tag to compare

@rkistner rkistner released this 25 Jun 11:11
9ca82d7
  • [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_version setting. (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 batchSize to recover from PSYNC_S1345 change 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 initSlot phase 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