Skip to content

Releases: powersync-ja/powersync-service

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 resolveTableresolveTables 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] HydratedSyncRulesHydratedSyncConfig 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

v1.20.5 - 2026-04-13

Choose a tag to compare

@rkistner rkistner released this 25 Jun 11:11
c2d8648
  • [IMPROVED] Postgres replication slot handling: During Postgres snapshots the Service now detects a lost replication slot, stops the snapshot, emits PSYNC_S1146 with remediation text, logs WAL budget use, and avoids retries that would repeat the same snapshot. Postgres rows in the diagnostics API now also include wal_status, safe_wal_size, and max_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 NOTHING validate 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_S2305 parameter-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

Choose a tag to compare

@rkistner rkistner released this 25 Jun 11:11
dc0188b
  • [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_seconds metric 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

v1.20.3 - 2026-03-19

Choose a tag to compare

@rkistner rkistner released this 25 Jun 11:11
583e487
  • [ADDED] [MongoDB] Metrics tracking the bytes, transactions, and chunks replicated. (PR #575)
  • [FIXED] [MongoDB] Replication batching under high write-checkpoint load, which was limiting throughput. (PR #573)

Full Changelog: v1.20.2...v1.20.3

v1.20.2 - 2026-03-18

Choose a tag to compare

@rkistner rkistner released this 25 Jun 11:11
0eca675
  • [ADDED] instr(string, substring) SQLite function support in Sync Stream query expressions, consistent with SQLite's built-in behavior. (PR #564)
  • [ADDED] Global with block in sync config YAML to define common table expressions (CTEs) shared across all Sync Streams; per-stream with blocks continue to work and shadow global definitions. (PR #567)
  • [ADDED] Class-based .NET schema generation from Sync Streams/Rules. (PR #559)
  • [ADDED] Schema change detection and automatic handling for the SQL Server (MSSQL) adapter, including deadlock retry for CDC queries, diagnostics warnings on pending schema changes, and checkpointing only when schema changes produce row changes. (PR #510)
  • [IMPROVED] compact CLI command gains --parameter-indexes / --no-parameter-indexes flags to explicitly control whether parameter indexes are compacted, and improves abort behavior during long compact jobs. (PR #569)
  • [IMPROVED] Clearer error message when a Sync Stream query tries to partition a table-valued function that depends on request data, with a suggested rewrite hint. (PR #555)
  • [IMPROVED] Reduced MongoDB replication test time from over 5 minutes down to ~3 minutes. (PR #560)
  • [FIXED] Compiler crash when a CTE column is referenced inside another subquery. (PR #552)
  • [FIXED] Incorrect output column names in Sync Streams when using quoted identifiers. (PR #551)
  • [FIXED] SQL error positions reported at incorrect locations in YAML sync config source. (PR #568)
  • [FIXED] Sync Streams silently dropping parts of OR conditions for subqueries not contributing bucket parameters. (PR #556)
  • [FIXED] MongoDB Storage compact failing for buckets larger than 2 GB. (PR #571)
  • [FIXED] Overly broad Supabase hostname regex that could incorrectly apply Supabase JWT auto-configuration to non-Supabase Postgres connection strings. (PR #558)

Full Changelog: v1.20.1...v1.20.2